Nesne Yönelimli Programlamanın ikinci temel prensibi olan inheritance, yani kalıtım konusuna bakacağız. Bir önceki prensipte olduğu gibi gerçek hayat ve kod örnekleri ile anlatmaya çalışacağım. Hemen konuya geçelim.
Gerçek hayat deyip, bir de"Neden böyle bir resim seçtim ben de bilmiyorum" gibi bir laf etsem saçma olurdu herhalde. OOP öğrenmeye çalıştığım ilk dönemleri hatırlıyorumda, kalıtımla ilgili kafamda bir sürü örneğim oluşuyorken nedense hep evrenle ilgili örneğim beni cezbediyordu. Garip bir şekilde bir tek beni cezbediyormuş ki internette benzer bir örneğe rastlamadım. 😎 Evren dediğimiz sonsuz boşluk içinde bir sürü gezegen, uydu, yıldız, gök cismi... Dahası bunların bağlı olduğu takım yıldızları, sistemler, galaksiler... Şu an bu yazıyı yazdığım yerküre; güneşe bağlı dönüşü ile kendi has geoid şeklini aldığı, bildiğimiz anlamda yaşamın olduğu tek gezegen. Bu şekilde tek tek saydıklarım birer property
, dünyanın gezegen olma gerekliliklerini yerine getiren özellikleri. Yani dönüş hızı, çapı gibi kavramlar onun özellikleri, bağlı olduğu sınıf ve/veya sınıflar ise kalıtımıdır. Evet dünyamız bir gezegen, ama aynı zamanda da bir gök cismidir. Gök cismi sınıfını kalıtım aldığı için onun da kütle, bilinen ömrü gibi özelliklerini de taşır. Aynı samanyolu galaksisinde yer almamıza rağmen güneşimiz, bir gezegen değil bir yıldız ve aynı zamanda bir gök cismidir.
Bir hususi aracı ele alalım; bu araç kullanım şekli ticari olmayan bir motorlu taşıttır ancak bu araç bir taksi ise kullanım şekli ticaridir. Ben, hususi ve ticari iki ayrı kullanım şeklinden bahsetsem de bunlar daha ayrıntılı olacaksa ayrı birer sınıf olarak ele alınmalıdır. Benzer şekilde, bir kamyonun kullanım şekli ticaridir ya da ticari sınıfa aittir. Ancak bir ağır vasıta olduğu düşünüldüğünde farklı geliştirmeler olacağı açıktır. O yüzden ayrı bir ağır vasıta sınıfı açılıp bu sınıfın da ticari sınıftan kalıtım alması sağlanır.
Aslında en gerçek hayat örneklerini Microsoft da bir sürü yerde kullanmıştır; bunlardan sadece bir tanesi .NET System.ComponentModel
namespace içinde yeralan System.Windows.Forms
için kullanılan Button
sınıfıdır. Button
sınıfı ButtonBase
sınıfından, ButtonBase
, Control
sınıfından kalıtım alır.
0 Yorum