Merhabalar,
Yazılım mühendisliği ile ilgili olarak; Nesne yönelimli programlama yazı dizimize devam ediyoruz. Bu yazımızda Kalıtım nedir, kalıtım nasıl yapılır, kalıtım ne işe yarar gibi sorulara cevap bulmaya çalışacağız.
Kalıtım; nesne tabanlı programlamada sıkça karşılaştığımız, algoritma ve programlama, algoritma analizi gibi konularda da işimize yarayacak olan bir alan. Kalıtım mantığını doğru öğrendiğimiz takdirde herhangi bir dile bağlı kalmaksızın türetme işlemlerimizi yürütebiliriz. Ben yine hem eğitimde kullanılması hemde sektör üzerinde yaygın olması nedeniyle C# ile ilgili örnekler vereceğim.
Kalıtım nesne tabanlı programlamanın en önemli özelliğidir. Kalıtım yolu ile sınıflar birbirinden türetebilir. Türeyen sınıflar; türedikleri sınıfların özelliklerini kalıtım aracılığı ile devralırlar ve kendisi de öz niteliklerini taşıyabilirler. Türetme sırasında sınıflar arasında hiyerarşik bir yapı kurulur.
Türetme Nedir?
Peki her şeyi anladık da nedir bu türetme, nasıl örneklendirebiliriz buna daha yakından bakalım. Türetmeye şöyle bir örnek verebiliriz:
Dünya üzerinde yaşayan canlıları sınıflandırmak mümkündür. Bu sınıfları genişletecek olursak bu sınıflardan biri örneğin hayvanlar sınıfı olabilir. Hayvanlar sınıfı için Kedi,Köpek,Kuş,Balık gibi bir çok hayvan türünden bahsedilebilir. Her türün kendine ait öznitelikleri olduğu gibi hayvanlar sınıfının genel özelliklerini de bünyelerinde barındırırlar. Dolayısıyla her bir tür için farklı sınıfların tasarlanması gerekebilir.
Fakat ortak bir takım özelliklerin (biraz önce de belirttiğimiz gibi..) olması da kaçınılmazdır. Her biri için bağımsız sınıflar tasarlandığında bu benzerlikler her birisi için tekrar tekrar yazılmak zorunda kalınacaktır. Bu yüzden önce tüm hayvanlar için “hayvanlar” sınıfı oluşturulup standart özelliklerini tanımlayıp ardından kedi,köpek,balık,kuş gibi sınıflar bu sınıfın devamı gibi tasarlanabilir. İşte temelde bir sınıftan türeyerek özelleştirme yolunda bu şekilde ilerlenir ve bu yapılan işleme türetme denir.
Türetme Nasıl Yapılır?
Türetme işlemini gerçekleştirebilmek için türeyecek olan sınıfın tanımlaması şu şekilde yapılmalıdır:
class Hayvan { public Hayvan() { } } class Kedi:Hayvan // Hayvan sınıfından türeyen Kedi sınıfı. { public Kedi() { } } class Kopek:Hayvan // Hayvan sınıfından türeyen Köpek sınıfı. { public Kopek() { } }
Türetme işleminden sonra türetilen sınıf temel sınıfın bütün özelliklerine sahip olur.
-Kalıtımda Kısıtlar ve Anahtar Sözcükler
Tip güvenliği olan dillerde farklı türdeki nesnelerin birbirine atanması istisna durumlar dışında yasaktır. Bu istisna durulardan biri de türemiş sınıfın referansının temel sınıfa ilişkin bir referansa atanabilmesidir. BU durumda temel sınıf türeyen sınıfın tüm özelliklerine erişemeyecek olmasına rağmen atama işlemi yapılabilmektedir.
Kalıtım yolu ile public ve protected elemanlar aktarılır. Diğer sınıfların kullanımına kapalı ancak türetme ile türemiş sınıfa geçebilen özellikler protected özelliği kullanır. Eğer türetme söz konusu değilse protected olarak bilinen elealarla private olanlar arasında bir fark olmayacaktır.
–private tanımlanan özelliklere türetilen sınıflardan erişim sağlanamaz.
–protected olarak tanımlanan özellikler türeyen sınıflara private olarak türetilir.
-Metotların türetilme işlemi
Türetme işlemi sırasında kalıtılan sınıfların içinde bulunan metod ve değişkenlerde aktarılır bundan bahsetmiştik. Peki bu işlem yapılırken hangi kurallar geçerlidir bunlardan bahsedelim. C# dili için geçerli olan istisnalar ile ilgili olarak:
-Yapıcı metotlar fiziksel olarak türetilmez.
-Türemiş sınıf türünden bir nesne yaratıldığında önce ana sınıfın parametre almayan yapıcı metodu, ardından türemiş sınıftaki imzaya uyan yapıcı metot çalıştırılır.
-Türemiş sınıf türünden nesne yaratımında daima türemiş sınıfın imzaya uyan bir yapıcı metodu olması gerekir.
-Türemiş sınıf türünden nesne yaratımında daima türemiş sınıfın imzaya uyan bir yapıcı metodu olması gerekir.
-Türemiş sınıf türünden nesne yaratımlarında, ana sınıfın parametre almayan yapıcı metodu yavru sınıfın üye elemanlarıyla işlem yapar.
Kalıtımda “base” Anahtar Sözcüğü
Yapıcı metotlar aşırı yüklenmişse türemiş sınıfın yapıcı metotları çağrılırken belli değerler ile temel sınıfında yapıcı metodunun çağrılması mümkündür ve bu işlem base anahtar sözcüğü ile yapılır.
-Türemiş sınıf türünden esne yaratımında, türemiş sınıftaki ilgili yapıcı metoda base takısı eklenmişse ana sınıfın parametre almayan yapıcı metodu çalıştırılmaz.
base anahtar sözcüğü ile parametre gönderimi yalnızca yapıcı metotlar yardımı ile kullanılabilir. Yani base anahtar sözcüğünü yalnızca türemiş sınıftaki yapıcı metoda ekleyebiliriz ve base anahtar sözcüğünün ana sınıfta var olan bir yapıcı metodu belirtmesi gerekir.
class T : A { public T(string s, int i, int a):base(int u,int y) { //... } }
Yukarıdaki örnekte türetilen bir sınıfın içerisinde base keywordunun kullanılması örnek gösterilmiştir.
Anlayamadığınız ya da eksik gördüğünüz kısımlar için yorumlar kısmını kullanabilirsiniz.
Teşekkürler!