Temel olarak bir sınıf içindeki şu üyeleri taşıyan bir yapıdır;
-Alanlar (fields), ya da sınıf içinde tanımlanmış değişkenlerdir.
-Metotlar (methods), ya da sınıf içinde tanımlanmış prosedür veya fonksiyonlardır.
-Öznitelikler (properties), sınıf içinde tanımlanmış alanlara değer atamak veya bazı koşullara göre belli bir alandan ya da hesaplanmış bir değeri dışarı vermek için kullanılan yapıtaşıdırlar.
-Ve bunların dışında, daha sonraki yazılarda yer alacak farklı şeyler de söz konusudur.
type TMeyve = class(TObject) strict protected FAdi : string; FCekirdekMiktari : Integer; FAgirlik : Double; FRenk : string; FTat : string; FKoku : string; public property Adi : string read FAdi; property CekirdekMiktari : integer read FCekirdekMiktari; property Agirlik : Double read FAgirlik write FAgirlik; property Renk : string read FRenk write FRenk; property Tat : string read FTat write FTat; property Koku : string read FKoku write FKoku; procedure Ozellikler; virtual; end;
procedure TMeyve.Ozellikler;
begin
WriteLn('Adı '+Adi);
WriteLn('--------------------------------------------------');
WriteLn('Çekirdek miktarı (ortalama adet) : '+IntToStr(CekirdekMiktari));
WriteLn('Ağırlık (ortalama gram) : '+FloatToStr(Agirlik));
WriteLn('Renk (en bilinen) : '+Renk);
WriteLn('Tat : '+Tat);
WriteLn('Koku : '+Koku);
end;
Bir metot varsayılan olarak statik metotdur yani sanal (virtual) değildir.
Bu örnekte Ozellikler metodu kalıtım örneğidir ve sanaldır. TMeyve'den türeyen başka bir sınıf oluşturduğumuzda bu metodu ezebiliriz ya da bunu olduğu gibi kullanabiliriz. Örneğin;
TAyva = class(TMeyve) constructor Create; end; TChiquitaMuz = class(TMeyve) strict private FMensei : string; public property Mensei: string read FMensei write FMensei; constructor Create; procedure Ozellikler; override; end; { TAyva } constructor TAyva.Create; begin inherited; FAdi := 'Ayva'; // Adi alanını değiştiremiyorum. Çünkü //setter'i yok... FCekirdekMiktari := 20; // Aynı şekilde Agirlik := 235; Renk := 'Sarı'; Tat := 'Ekşi, boğaza yapışan'; Koku := 'Bilindik özellikli bir kokusu yok'; end; { TChiquitaMuz } constructor TChiquitaMuz.Create; begin FAdi := 'Çikita Muz'; // Adi alanını değiştiremiyorum. Çünkü setter'i yok... FCekirdekMiktari := 0; // Aynı şekilde Agirlik := 110; Renk := 'Sarı'; Tat := 'Tatlı'; Koku := 'Az koku vardır'; Mensei := 'Nikaragua'; end; procedure TChiquitaMuz.Ozellikler; begin inherited; Writeln('Menşei : '+Mensei); end;
TAyva'nın TMeyve'dekinden başka bir özniteliği yoktur, bu nedenle sadece constructor metodu bulunur. Constructor metodunun bulunması sebebi ise özniteliklerini tanımlamaktır. TChiquitaMuz'un fazladan Mensei özniteliği vardır. Bu nedenle Ozellikler metodunu ezmek ve onun içinde de Mensei'ni yazdırmak gereklidir. inherited ile TMeyve'de olan özellikler yazılır, hemen altında ise TChiquitaMuz'un özelliği, Mensei yazılır.
Ancak bu örnek tipik bir sanal (virtual) metot örneği değil. Neden değil, çünkü bu işi biraz farklı şekilde de olsa sanal metot kullanmadan da yapabiliriz. Ancak tipik örneklerde, yani nesneyi kullanırken sınıf olarak sadece TMeyve'den türediğini biliyorsak ve hangi meyve olduğunu bilmiyorsak, işte o zaman kalıtımın saf haliyle tipik örneğini uyguluyoruz demektir. Sonraki yazıda en tipik haliyle kalıtımı inceleyeceğiz.
Hiç yorum yok:
Yorum Gönder