17 Kasım 2012 Cumartesi

KALITIM (INHERITANCE)


Kalıtım konusunun önce mantığını kavramaya çalışalım.Bunun içinde en iyi örnek sanırım ebeveyn ve çocuk ilişkisi olacaktır.Çocuk anne ve babanın genetik özelliklerini taşır(saç rengi,göz rengi...) ayrıca annesi ya da babasından farklı özelliklerde olacaktır(kilo,boy...).Yani çocuk hem ebeveyninin  hemde kendi özellikleriyle ayrı bir bireydir.

Şimdi konumuza dönelim.Verdiğim örnekte ebeveyn dediğim ana sınıfımız(base class),çocuk ise
türetilmiş sınıfımız(derived class) olacaktır.Ebeveyn sınıfı özelliklerini alt sınıfa(çocuk) aktarır,üyelerinin kullanılmasına izin verir.

Peki neden kalıtıma ihtiyaç duyulur?Oluşturduğumuz projelerde aynı kodları tekrarlamamak ,zaman kazanmak , hata oranını azaltmak için kullanılır.
Şimdi de Kalıtım(inheritance) konusunu bir örnekle açıklayalım.



Base_class önünde public ya da private yazılması neyi ifade eder?

  1. public yazıyorsa mainde oluşturulan  Derived_class  nesnesi  Base_class ın sadece public üyelerine erişebilir demektir.
  2. private yazıyorsa mainde oluşturulan  Derived_class  nesnesi  Base_class ın hiçbir üyesine erişemez demektir.

Base class'ın private üyelerine direk erişim olamaz.Ancak fonksiyonlar ile ulaşılabilir.Protected üyelerine sadece türetilmiş sınıf tarafından erişilebilir.Public üyelere erişim kısıtlaması yoktur.



Yapılandırıcımızı yaparken dikkate edilirse base clasımızında yapılandırıcısını yazdık.Base classımızın yapılandırıcısı default olmadığı için (yani parametre almıştır)alt sınıfta bu sınıfın yapılandırıcısı tanımlanırken base sınıfımız da parametre istemektedir.Eğer default olsaydı base class parametre almayacağından bu kullanıma gerek kalmazdı.

carpim() fonksiyonunda geri dönüş değerinde geta() fonksiyonun kullanılmasının nedeni a değişkeni private olduğu için ona ancak fonksiyon aracılığıyla ulaşılabilir.

yazdır() fonksiyonu override edilmiştir yani fonksiyonun üzerine yapılmıştır.Kısaca override'dan söz edelim.
Override, bir fonksiyonun adı, parametre adı-tipi ve  fonksiyonun dönüş tipi  değiştirilmeden sadece body kısmında değişiklikler yapılarak kullanılmasına denir.

Base_class::yazdır() ifadesiyle önce base sınıfımızdaki yazdır() fonksiyonunu çağırdık ve ufak bir ekleme yaparak üzerine yazmış olduk.

Kalıtımda yapılandırıcılar (contructors) yukarıdan aşağıya doğru çalışır.Yani ilk önce base sınıfın sonra da türetilmiş sınıfın yapılandırıcısı çağrılır.
Yıkıcılarda  ise tam tersi durum geçerlidir.İlk önce türetilmiş sınıfın nesnesi yok edilir daha sonra base sınıfın nesnesi yok edilir.
İşte programımızın tamamı ve çıktısı
(Resimleri büyütmek için üzerine tıklayın)

















Hiç yorum yok:

Yorum Gönder