Kalıtım

Kalıtım-Inheritance

Kalıtım nesne tabanlı programlama dünyasında kilit öneme sahip bir kavramdır. Nesne tabanlı programalamda gerçek dünya problemlerini bilgisayar uygulamaları yardımıyla çözmek için bu problemleri modellemek gerekir. Sınıflar, modellemenin yapı taşlarıdır. İlerleyen konularda söz edileceği gibi bir okul yönetim uygulaması geliştirileceği düşünülsün. Uygulamada müdür, öğrenci ve öğretmenleri modellemek için sınıflardan (Okuldaki sınıflarla karıştırmayalım.) yararlanılır. Ancak hem müdür hem öğretmen hem de öğrenciler ortak özelliklere sahiptir. Örneğin, hepsinin de birer adı vardır. Müdür, öğretmen ve öğrenci sınıflarının hepsinde de ad şeklinde bir özellik kullanılırsa kod tekrarından nasıl kaçınılabilir? Bu mümkün olmaz. Bu noktada devreye kalıtım girmektedir. Bu sınıfların üstünde insan adında bir sınıf oluşturup müdür, öğretmen ve öğrenci sınıflarını da insan türeterek bu problemin üstesinden gelinebilir. Hemen tüm problemleri modellerken benzer senaryolarla karşılaşılır ve kalıtımı yoğun bir şekilde kullanılır. Kod tekrarından kaçınmanın yegâne yolu kalıtımı kullanmaktır. Kalıtımı anladıktan sonra gerçek dünyada da aslında her şeyin kalıtımla ne kadar ilişkili olduğu görülür. Artık modellemeler kalıtım olmaksızın düşünemez hâle gelinir.

Temel sınıflar ve Türetilmiş Sınıflar

Nesne tabanlı programlama ile problemleri gerçek dünyadakine benzer tarzda nesneler şeklinde modelleyerek çözmeye çalışırız. İnşaat sektöründe bir bina nasıl inşa edilir? Önce projesi çizilir. Sorna bu proje gerçekleştirilir ve bina ortaya çıkar. Nesne tabanlı programlamada da önce sınıflar (bina örneğindeki projeye benzetilebilir.) tasarlanır. Bir uygulama çok sayıda sınıf yardımıyla modellenebilir. Bu sınıflardan bazıları temel sınıf, bazıları da türetilmiş sınıflardır. Temel sınıf “Ata” sınıf olarak işlev görür. Türetilmiş sınıf ise temel sınıfın özelliklerine sahip olmanın yanında kendisi temel sınıfta bulunmayan yeni özellikler de geliştirebilir. Örneğin, girişte de bahsedildiği gibi bir “okul yönetim uygulaması” geliştirileceği düşünülsün. İşe okuldaki her şey modellenerek başlanır. Okulumuzda değişik rollerde insanlar vardır. Müdür, müdür yardımcısı, öğretmen, memur, hizmetli, öğrenci rolleri sayılabilir. Her insan rolü için ayrı ayrı sınıf oluşturmak yerine “insan” sınıfı oluşturup sonra bu sınıftan “kalıtım” yoluyla “müdür, “müdür yardımcısı”, “öğretmen”, “memur”, ve “öğrenci” sınıfları türetilebilir. Bu örnekte “insan” sınıfı “temel sınıf”, diğerleri ise “türetilmiş sınıf” olarak adlandırılmaktadır.

class Insan
{
   // Temel Sınıf Üyeleri
}

class Ogrenci : Insan
{
   // Türetilmiş Sınıf Üyeleri
}

Örnekte görüldüğü gibi “Kalıtım yoluyla türetme” : (iki nokta üst üste) işlemci yardımıyla yapılmaktadır. İki noktanın solundaki sınıf (Ogrenci) türetilmiş, sağındaki ise (Insan) temel sınıftır. Burada Ogrenci sınıfı Insan sınıfından türetilmiş bulunmaktadır. Diğer bir ifadeyle Ogrenci sınıfı Insan sınıfının özel (private) olmayan tüm üyelerini kalıtım yoluyla almıştır. Türetme sonucunda Insan sınıfının özel (private) olmayan tüm alanlarını otomatik olarak Ogrenci sınıfı içermektedir.

Bir sınıf doğrudan en fazla bir sınıftan türetilebilir. İk iya da daha fazla sınıftan türetilemez. Eğer böyle bir ihtiyaç olursa arayüzleri kullanmak gerekir. Ancak tüm sınıflar dolaylı olarak System.Object sınıfından türetilmektedir. Bunun belirtilmesine de gerek yoktur. Örneğin üstte oluşturulan Insan sınıfına hiç üye eklenmese bile bazı üyelere otomatik olarak sahip olduğu görülür. Bunlardan bir tanesi ToString metodudur. Aslında bütün sınıflar bu metoda sahip olur. Bu da onların dolaylı olarak System.Object sınıfından türediğini kanıtlar.

Türetilmiş bir sınıftan başka sınıflar da türetilebilir. Ancak bunun bir şartı vardır. “Sealed” olarak tanımlanmış bir sınıftan başka bir sınıf türetilemez.

Diğer sınıflar da aynı şekilde,

class Mudur : Insan
{
   // Türetilmiş Sınıf Üyeleri
}

class MudurYardimcisi : Insan
{
   // Türetilmiş Sınıf üyeleri
}

class Ogretmen : Insan
{
   // Türetilmiş Sınıf Üyeleri
}

class Ogrenci : Insan
{
   // Türetilmiş Sınıf üyeleri
}

türetilebilir.

Bir Cevap Yazın

This site uses Akismet to reduce spam. Learn how your comment data is processed.