Memik Yanık - Kişisel Web Sitesi Ana Sayfa | Hakkımda | Kitap Önerileri | Fotoğraflarım | RSS RSS | İletişim

Delphi Prism ile Çalışmaya Başlamak


Bir önceki makalemizde Oxygene’in Delphi Prism olmadan önceki hali hakkında kısaca bilgi verdik. Şimdi sırada Delphi Prism üzerinde konuşmak var. Bu amaçla embarcadero.com’dan Delphi Prism’in en son sürümün deneme kopyasını indirip kurmak üzere Install.exe adlı programı çalıştırdım. Aşağıda verilen ekran görüntüsünden fark edeceğiniz gibi Delphi Prism paketinden ayrıca Interbase veritabanı ve InstallAware adlı setup programı çıkmaktadır.



Bu penceredeki Install Delphi Prism seçeneği tıklandığında birkaç klasik sorudan sonra kurulum tamamlanmaktadır. Delphi Prism’i kurduktan sonra, ister Visual Studio kurulurken Başlat menüsünde hazırlanan komutu verin ister Delphi Prism’e ait komutu verin Visual Studio başlatılmaktadır. Visual Studio 2008’i başlatıp yeni bir Delphi Prism projesi hazırlamak üzere ekrana New Project diyalog kutusunu getirdim.



Aşağıda verilen ekran görüntüsünden fark etmiş olacağınız gibi Windows Application şablonu ile yeni bir proje hazırlayınca bu projeye Program.pas ve Main.Pas adında 2 kod dosyası hazırlanmaktadır. Program.pas dosyasında uygulamanın başlangıç noktası olan Main() metodu bulunurken, Main.pas dosyasında .NET Framework ile gelen Form sınıfının mirasçısı bir Class hazırlanıp bu Class’ın yani formun uygulamanın başlangıç formu olması sağlanmaktadır.



Ancak bu makalelerde sizlere işin özünü anlatmayı hedeflediğim için Visual Studio 2008’den yararlanarak hazırladığım bu projeyi bir tarafa bırakıp Not Defteri ile en kısıtlı özelliklere sahip ve konsolda çalışan bir Delphi Prism uygulaması hazırlayacağım. Bunu yaparken yani en kısıtlı özelliklere sahip konsol uygulamasını hazırlarken konunun hemen anlaşılmasını sağlamak için kodu parça parça vereceğim. En kısıtlı özelliklere sahip Delphi Prism uygulaması bile namespace olarak düzenlendiği için aşağıdaki gibi bir Namepace hazırladım.



Namespace’in sonunu işaret eden end deyiminin sonuna noktalı virgül(;) yerine nokta konulması gerekiyor. Tabi bu şekilde düzenlenen Delphi Prism kodu derlendiğinde hata meydana gelir. Çünkü tıpkı Delphi uygulamalarında olduğu gibi Delphi Prism kodunun en azından interface ve implementation bölgelerine sahip olması gerekiyor. Bu nedenle koda ekleme yapıp interface ve implementation bölgelerine yer verdim.



Delphi Prism uygulamasının mutlaka gerek duyduğu interface ve implementation bölgelerine bu şekilde yer verilse bile bu kod derlenirse hata meydana gelir. Çünkü uygulamanın başlangıç noktası olan Main() metoduna sahip olması gerekiyor. Bu nedenle bu koda ekleme yapıp Main() metoduna yer verdim.



Bu şartlarda bu kod hatasız derlenip çalıştırılır. Bu kodu yakında incelediğinizde Delphi Prism’de Delphi’den farklı olarak geriye değer göndermeyen metotlar method anahtar kelimesiyle başlayabilmektedir. Yok eğer ben eski alışkanlıklarımı sürdürüp geriye değer göndermeyen metotları hazırlarken procedure anahtar kelimesinden yararlanacağım diyorsanız bu kodu aşağıdaki gibi değiştirebilirsiniz. 

namespace ilk_uzay; 
 interface 
 implementation 
  procedure Main; 
    begin 
     Console.WriteLine('wwww.memikyanik.com'); 
   end;
end. 

Not Defteri ile veya başka bir editörle hazırladığınız Delphi Prism uygulamalarını konsolda derlemek istiyorsanız aşağıda yeri ve adı işaret edilen exe dosyadan yani Oxygene.exe adlı derleyiciden yararlanmanız gerekir.



Bu dosya kurulum sırasında arama yoluna dahil edildiği için PAS uzantılı kod dosyaları istenen klasöre kaydedilip istenen klasörde iken derleme yapılabilir. “ilk.pas” adını verdiğim kod dosyasını derlemek için DOS penceresinde önce derleyicinin, ardından derlemek istediğimiz PAS dosyasının adını yazdık.



Bu şekilde yapılan derleme sonucu “ilk.exe” adında bir çalışabilir .NET uyumlu dosya hazırlanır. Bu exe uzantılı dosya çalıştırıldığında ise Console sınıfının WriteLine() metoduna parametre olarak verilen sabit bilgi konsola yazılır. Delphi Prism’in bazı özelliklerini ortaya çıkarmak için yukarıda verdiğim kodu aşağıdaki gibi değiştirdim.


Bu kodda tıpkı Delphi’de olduğu gibi Main() metodu içinde var bloğuna yer verip “yil” adında ve integer tipinde bir değişken tanımladım. Devamında Console sınıfının Read() metodu sayesinde konsola yazılan bilgiyi bu değişkene aktardık. Delphi Prism’de değişken tanımlamak için metodun asıl işlem yapan satırlarının dışında var bloğuna yer vermek şart olmadığı için bu kodu aşağıdaki gibi düzenlemek mümkündür. 

namespace ilk_uzay; 
 interface 
 implementation 
  procedure Main; 
  begin 
    var yil : integer; 
    Console.Write('Hangi Yıldayız :'); 
    yil := Console.Read(); 
  end;
end. 

Açıkçası Delphi Prism’de var anahtar kelimesiyle istenen yerde değişken tanımlanabilmektedir. Şimdi bu Delphi Prism programına ekleme yapıp kullanıcıdan istenip “yıl” adını verdiğim değişkenine aktarılan bilgiyi WriteLine() metodu ile tekrar ekrana yazacağım. 

namespace ilk_uzay; 
 interface 
 implementation 
  method Main; 
   begin 
     var yil : integer; 
     Console.Write('Hangi Yıldayız :'); 
     yil := Console.Read(); 
     Console.WriteLine(); 
     Console.Write("Girdiğiniz Yıl :"); 
     Console.WriteLine(yil); 
   end;
end. 

Bu şekilde düzenlenen örnek derlenirken hata vermediği gibi çalıştırıldığında da hata vermez ama girilen yıl bilgisi ile sonradan WriteLine() metodu ile ekrana yazılan yıl bilgisi birbirinden farklı olur. Aşağıda verdiğim ekran görüntüsünü bu Delphi Prism programını derleyip çalıştırdıktan sonra aldım.



Yukarıda verilen koda dikkat ederseniz konsoldan bilgi okuma işlemi Read() metodu ile yapılmaktadır. Read() metodu konsoldan okuma yaparken girilen bilginin ilk karakterinin ASCII kodunu geriye göndermektedir. Console sınıfının ReadLine() metodu ise farklı bir şekilde çalışmaktadır ve konsoldan yani DOS penceresinden okuduğu bilginin String tipte olduğunu varsaymaktadır. Bu nedenle yukarıda verdiğimde örnekte değişiklik yapıp okuma işlemini Read() yerine ReadLine() metodu ile yapmaya çalıştım. 

namespace ilk_uzay; 
 interface 
 implementation 
  method Main; 
   begin 
     var yil : integer; 
     Console.Write('Hangi Yıldayız :'); 
      yil := Console.ReadLine(); 
     Console.WriteLine(); 
     Console.Write("Girdiğiniz Yıl :"); 
     Console.WriteLine(yil); 
   end;
end. 

Bu şekilde değiştirdiğimiz Delphi Prism programını derlemek istersek derleyici hata rapor eder. Çünkü Console sınıfının ReadLine() metodu tarafından okunup geriye gönderilen bilgi String tipte olmasına rağmen burada integer tipindeki değişkene aktarmaya çalışıyorum. Bu hatanın önüne geçmek için String tipte bir değişken tanımlayıp kullandım. 

namespace ilk_uzay; 
 interface 
 implementation 
  method Main; 
   begin 
     var yil : string; 
     Console.Write('Hangi Yıldayız :'); 
     yil := Console.ReadLine(); 
     Console.WriteLine(); 
     Console.Write("Girdiğiniz Yıl :"); 
     Console.WriteLine(yil); 
   end;
end. 

Bu hali ile programımız istediğimiz sonucu verir. Bu örnekte konsoldan girilen “yıl” bilgisi matematiksel işlemlerde kullanılmadığı için rakamlardan meydana gelse bile string yani karaktersel bilgi olarak değerlendirmenin bir sakıncası olmaz. 

Her ne kadar Delphi Prism %100 nesne yönelimli bir programlama dili olsa bile sizi Class hazırlamak zorunda bırakmıyor. Deneysel uygulamalar hariç Class hazırlamak gerektiği için şimdi yukarıda verilen kodda değişiklik yapıp bir Class’a sahip olmasını sağlayacağım.



Delphi ve Delphi Prism’de Class’lar interface bölgesinde type ile end anahtar kelimelerinin arasında class anahtar kelimesiyle tanımlanır. Burada “ilk_sinif” adını verdiğim Class’ın henüz metodu, özelliği, alanı vs yoktur.Class’ın public üyeleri public bloğunda, private üyeleri ise private bloğunda tanımlanmaktadır. 

Şimdi bu konsol uygulamasındaki Main() metodunun “ilk_sinif” adını verdiğim Class’ın public bir üyesi yani metodu olması sağlayacağım. Bu amaçla namespace’in interface bölgesindeki type bloğunda aşağıdaki gibi değişiklik yaptık. 

namespace ilk_uzay; 
 interface 
  type    
   ilk_sinif = class 
   public 
      class method Main; 
   private 
  end; 
 implementation 
  method Main; 
   begin 
     Console.WriteLine('wwww.memikyanik.com'); 
     Console.Write('Çıkmak İçin Bir Tuşa Basın'); 
     Console.ReadKey(); 
   end;
end. 

Bu şekilde düzenlenen Delphi Prism uygulaması derlenmek istenirse hata meydana gelir. Çünkü bu sınıfın Main adında ve herhangi bir parametreye sahip olmayan bir metoda sahip olduğu işaret edilmekle birlikte namespace’in implementation bölgesinde bu sınıfla ilişkilendirilen bir metot yoktur. Mevcut Main() metodunun başına class ve method anahtar kelimesinden sonra class adı aşağıdaki gibi yazılırsa sorun çözülür. 

namespace ilk_uzay; 
 interface 
  type 
    ilk_sinif = class 
   public 
      class method Main; 
   private 
  end; 
 implementation 
  class method ilk_sinif.Main; 
   begin 
     Console.WriteLine('wwww.memikyanik.com'); 
     Console.Write('Çıkmak İçin Bir Tuşa Basın'); 
     Console.ReadKey(); 
   end;
end. 

Bu kodda method anahtar kelimesi yerine procedure’yi kullanabileceğinizi biliyorsunuz. Bir sonraki makalemizde Delphi Prism anlatmaya kaldığımız yerden devam edeceğiz.

Delphi Prism 10.10.2009 08:25:24

4 YORUM


YorumlarYorum Yaz
Ana Sayfa | Hakkımda | Kitap Önerileri | Fotoğraflarım | RSS | İletişim
Memik Yanık 2004-2009 © Tüm Hakları Saklıdır.
Hazırlayan www.semgoksu.com