Yazılımda Kalıtım nedir?

Merhaba,

Bugün kalıtım hakkında yazılımda kullanım amacından bahsedeceğiz. Yazılımda kalıtım kavramından önce TDK’de ne anlama geldiğine bakalım.

Çevre etkileriyle köklü olarak değiştirilemeyen özelliklerin, döllenme sırasında, dişi ve erkeğin kromozomları aracılığıyla bir kuşaktan ötekine geçmesi, soya çekim, irs, irsiyet, veraset

Şeklinde tanımlanan kalıtım yazılımda nasıl tanımlanmaktadır?

Kalıtım (inheritance) bir sınıfın başka bir sınıftan özelliklerini (attribute) ve metodlarını miras almasıdır. Ana Sınıfın(Base Class, Super Class, Parent Class vs.) kalıtım ile türeyebilen sınıflara aktarabilmesidir. Nesneye Yönelik Programlama dillerinde çokça karşımıza çıkan bu terimi en iyi öğrenme yolu pratikten geçiyor 🙂 . Gelin biraz örneklere bakalım.

Kalıtım ile ilgili örnekler

Öncelikle Kalıtım kavramı neredeyse tüm Nesneye Yönelik Programlama dillerinde aynıdır. Aralarındaki fark bazılarında (örneğin C++’ta) çoklu kalıtım kavramı desteklenmektedir. Günümüze daha yakın dillerde (Java, C# gibi) bu kavram kaldırıldı. Interface (arayüz) kullanılarak bu durumu çözebiliyoruz.

Sonuç olarak aşağıdaki yapacağımız örnek tüm Nesneye Yönelik Programlama dillerinde geçerli olup, yalnızca diller arası syntax (Söz dizimi) ve tanımlamaları fark edecektir. Ben örneği C# üzerinde yaparken siz kendi bildiğiniz herhangi bir dile uyarlayabilirsiniz.

Daha fazla uzatmadan geçelim 🙂

Örneğin kafamızda bir hikaye yazalım. Bir yapay zeka ile savaş robotu üreten bir şirketin yazılımını yaptığımızı varsayalım. XC1321 kodlu bir robotumuzun

  • Uçabilme
  • Gözlerinden Ateş Etme
  • Uzayabilen Kol ve Bacaklar

gibi özellikleri olduğunu varsayalım. Bunu Kodlama kısmında yapacak olursak.

public class XC1321
{
    public void UcabilmeMod()
    {
    }
    public void GozlerdenAtesMod()
    {
    }
    public void UzayanKolBacakMod()
    {
    }
}

Bu firma bize XC2321 ve XC3321 isimli iki yeni robot tasarladıklarını fakat bu iki robotta yeni gelecek özelliklerin yanı sıra ilk sürüm olan XC1321 kodlu robotta bulunan özelliklerinde bulunmasını istiyorlar, bu durumda aklımıza gelecek ilk özellik tabii ki de Kalıtım olacaktır. XC2321 kodlu sürüm için istedikleri özellik Görünmezlik iken; XC3321 kodlu sürüm içinse denizin altında gidebilmek olduğunu varsayalım ve bunları ekleyelim.

public class XC2321 : XC1321
{
    public void GorunmezlikMod()
    {
    }
}
public class XC3321 : XC1321
{
    public void DenizaltiMod()
    {
    }
}

Son olarak firma bizden bugüne kadar üretimde olan robotların birleşimi XC4321 kodlu bir robot üretmemizi istedi. Bu durumda herkesin aklına aşağıdaki gibi bir kod yazmak gelebilir.

public class XC4321 : XC1321,XC2321,XC3321
{
}

Fakat bu kullanım benim gibi C# veya C++ dışında güncel bir Nesne yönelimli programlama dilinde kullanıyorsanız HATA alacaksınız. Çünkü C++’tan sonra çoklu kalıtıma izin verilmemektedir. İzin verilmemesinin sebebi ise anlatmış olduğum C++’ta ki meşhur “Diamond Problem” dir.

E peki şimdi n’olacak?

Bize verilen işi nasıl yapacağız? İşte burada devreye Interface(Arayüz) kavramı girmektedir. Bu problemimizin çözümüne o yazımızdan devam edebiliriz. Hatta acaba programlama dili geliştiricilerinin Arayüz kavramına geçmesindeki tek etken Diamond Problem midir? Bunları da orada konuştuk.

Bu yazımızda ise Kalıtım nedir? Ne gibi zamanlarda kullanmalıyız. C# için kalıtımın tanımlanması gibi kavramlar hakkında fikir sahibi olduk ve tekli kalıtımı tamamen öğrenmiş olduk.

Kendinize iyi bakın sağlıklı günler. C354