Object Oriented Programming Inheritance (Kalıtım) Ders 3
Merhaba,
Nesne tabanlı programlama derslerimize tam gaz devam etmekteyiz. Artık ufaktan eğlenci konulara gelmeye başladık. Bu dersteki konumuz Inheritance yani Kalıtım.
Kalıtım diyince bir çoğunuzun aklına genetik de bulunan kalıtım gelmektedir .Aslında doğru. Yani genetikteki kadar karışık değil ancak işlem neredeyse aynı. Hafifçe bir kaç örnek ile başlayalım.
Şöyle bir durum vardır. Eğer ki anneniz mavi gözlü ise göz rengi kalıtsal olarak çocuğuna da geçebilir. Dikkat ettiyseniz “geçebilir” dedim. İşte karışıklık burada başlıyor. Genetikte bu işlerin hesapları vs bulunmakta ve herhangi bir kesinliği bulunmamaktadır. Ancak bu durum yazılımda öyle değildir. Biz kalıtımı yaparsak o mavi göz oraya geçer J
Peki niye böyle bir şey yapalım. Inheritanceyi kullanmamızın nedeni birbiri ile tam olarak değilde neredeyse aynı özelliklere sahip farklı class ları tekrar tekrar yazmak yerine bir adet ana yani mail class oluşturup diğer alt classların bu mail classtan türetilmesini sağlamak. Bunu güzel bir örnek ile açıklayalım.
Bir site düşünelim. Sitede evler var dükkanlar var. Açıkçası dükkan ile ev arasında fark olarak sadece aklıma müşteri otoparkı ile kapalı garajda için araç sayısı geldi. Neyse bu site de bir daireyi class olarak tasarlamaya başlayalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
public class SitedeDaire { double metrekare; string binaadi; int kat; public double Metrekare { get { return metrekare; } set { metrekare = value; } } public string Binaadi { get { return binaadi; } set { binaadi = value; } } public int Kat { get { return kat; } set { kat = value; } } } |
Bu sitede daire veya dükkanların ortak özelliklerini ana olarak tanımladım. Dairenin hangi binada olduğu, metrekaresi, katı. Bunlar dairede de var, dükkanda da var. Şimdi Dükkan için bir class tanımlaması yapalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class Dukkan : SitedeDaire { bool musteriotoparkvarmi; public bool Musteriotoparkvarmi { get { return musteriotoparkvarmi; } set { musteriotoparkvarmi = value; } } } |
Gördüğünüz üzere public class Dukkan : SitedeDaire şöyle bir cümle bulunmaktadır. Anlamı şu : Sağdaki sınıftan soldaki sınıfa tüm özellikleri geçir. Sonrasında tanımlamalarıma devam ediyorum ve diyorum ki bu sınıfın içerisinde müşteriotoparkı var mı yok mu bunu anlayabileceğim bir değişkenim olsun.
Şimdide bir ev için tanımlama yapalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class Ev : SitedeDaire { int kapaliotoparkaracsayisi; public int Kapaliotoparkaracsayisi { get { return kapaliotoparkaracsayisi; } set { kapaliotoparkaracsayisi = value; } } } |
Bu sınıf içinde kapalı otopark araç sayısı için bir tanımlama yapalım.
Türetilmiş sınıflarımız dan yeni birer nesne oluşturduğumuzda ana sınıfta ki özelliklerin ve sonradan tanımladığımız o sınıfa ait özelliklerin önümüze geldiğini alttaki ekran görüntüsünde görebilirsiniz.
Şimdiye kadar olan kısımda bir sınıftan başka bir sınıfa kalıtım yapmayı gördük. Ancak örneğimizde sadece değişkenleri işledik. Methodlara henüz bir giriş yapmadım. Bunun nedenini bir sonraki yazım olacak olan Polymorphism de açıklayacağım.
İyi Günler Dilerim,