Kalıtım
- İngilizcesi
- Inheritance
- Türkçe karşılığı
- miras alma
- Okunuşu
- inheritıns
Kısaca
Kalıtım, yeni bir sınıfın mevcut bir sınıfın alanlarını ve metotlarını yeniden kullanmasını, genişletmesini ve geçersiz kılmasını sağlayan OOP özelliğidir.
Programlamada kalıtım nedir?
Kalıtım, mevcut bir sınıfa dayanan yeni bir sınıf oluşturmanızı sağlar. Alt sınıf (child class ya da subclass) adı verilen yeni sınıf, taban sınıf ya da üst sınıf (superclass) olarak da bilinen ebeveyn sınıfın alanlarını ve metotlarını otomatik olarak alır, kendi üyelerini ekleyebilir veya mevcut olanları değiştirebilir. Bir “-dir” ilişkisini modeller: bir Dog bir Animal'dır, dolayısıyla Dog, Animal'dan kalıtım alabilir.
Bir nesnede bir metot çağırdığınızda dil önce onu nesnenin kendi sınıfında arar, ardından bulana dek ebeveyn sınıflar zincirinde yukarı çıkar. Alt sınıf bir metodu geçersiz kılabilir (override); yani aynı adla kendi sürümünü sağlar ve super gibi bir anahtar sözcükle ebeveynin sürümünü yine de çağırabilir. Java, C# ve JavaScript yalnızca tek bir ebeveyn sınıfa izin verir; C++ ve Python ise bir sınıfın birden çok ebeveyni olmasına izin verir.
Nesilden nesile aktarılan bir aile tarifini düşünün: her aşçı aslını devralır, ancak bir malzemeyi değiştirebilir ya da bir adım ekleyebilir. Kalıtım kullanıcı arayüzü framework'lerinde, oyun motorlarında ve standart kütüphanelerde yaygındır; örneğin yerleşik bir Error ya da Exception sınıfını genişleten özel bir hata türü oluşturduğunuzda olduğu gibi.
Kalıtım sıklıkla, bir sınıfın ebeveyni genişletmek yerine başka nesneleri tutup işi onlara devrettiği bileşimle (composition) karşılaştırılır. Derin kalıtım ağaçları sıkı bağlılık yaratır, çünkü ebeveyndeki bir değişiklik her alt sınıfı bozabilir; bu yüzden yaygın bir kılavuz, kalıtım yerine bileşimi tercih etmek ve kalıtımı gerçek “-dir” ilişkilerine saklamaktır. Kalıtım, bir sözleşmeyi paylaşan ama kod paylaşmayan interface uygulamaktan da farklıdır.
Önemli noktalar
- Alt sınıf, ebeveyn sınıfının alanlarını ve metotlarını kalıtım yoluyla alır.
- Alt sınıflar yeni üyeler ekleyebilir ve miras alınan metotları geçersiz kılabilir.
super, ebeveynin kurucusunu ya da bir metodun ebeveyndeki sürümünü çağırır.- Gerçek “-dir” ilişkileri için kullanın; “-sahiptir” ilişkileri için bileşimi tercih edin.
- Çoğu dil yalnızca tek bir ebeveyn sınıfa izin verir; C++ ve Python birden çoğuna izin verir.
Örnek
class Animal:
def __init__(self, name):
self.name = name
def describe(self):
return f"{self.name} is an animal"
class Dog(Animal): # Dog inherits from Animal
def __init__(self, name, breed):
super().__init__(name) # run the parent's constructor
self.breed = breed
def describe(self): # override the parent's method
return super().describe() + f" ({self.breed})"
print(Dog("Rex", "beagle").describe()) # Rex is an animal (beagle)
print(isinstance(Dog("Rex", "beagle"), Animal)) # TrueSık sorulan sorular
Kalıtım ile bileşim (composition) arasındaki fark nedir?
Kalıtım, bir sınıfın ebeveyni genişletip kodunu yeniden kullandığı bir “-dir” ilişkisi kurar. Bileşim ise bir sınıfın başka nesneleri içerip işi onlara devrettiği bir “-sahiptir” ilişkisi kurar; bu genellikle daha esnek ve daha az sıkı bağlıdır.
Çoklu kalıtım (multiple inheritance) nedir?
Çoklu kalıtım, bir sınıfın birden fazla ebeveyn sınıfa sahip olması demektir. C++ ve Python bunu destekler; Java ve C# ise yalnızca tek bir ebeveyn sınıfa izin verir ama bir sınıfın birçok interface uygulamasına olanak tanır.
Metot geçersiz kılma (method overriding) nedir?
Geçersiz kılma, bir alt sınıfın ebeveynindeki bir metotla aynı ada ve parametrelere sahip bir metot tanımlayarak alt sınıf nesneleri için ebeveynin davranışını değiştirmesidir. Alt sınıf, özgün sürümü super aracılığıyla yine de çağırabilir.
İlgili sayfalar
- SınıfProgramlamanın Temelleri, s. 49Sınıf, nesne yönelimli programlamada bir grup nesnenin paylaştığı veri ve davranışı tanımlayan, nesnelerin örnek olarak ondan oluşturulduğu bir plandır.
- OOPProgramlamanın Temelleri, s. 41OOP, yani nesne yönelimli programlama, kodu ilişkili verileri onlar üzerinde işlem yapan fonksiyonlarla birleştiren nesneler etrafında düzenleme yöntemidir.
- Çok biçimlilikProgramlamanın Temelleri, s. 8Çok biçimlilik, kodun farklı türlerdeki değerlerle ortak bir arayüz üzerinden çalışabilmesidir; her tür kendi davranışını sağlar.
- InterfaceProgramlamanın Temelleri, s. 26Interface, bir türün sağlamayı vaat ettiği metot ve özellik imzalarından oluşan adlandırılmış bir kümedir; bu üyelerin nasıl gerçekleştirildiğini söylemez.
- KapsüllemeProgramlamanın Temelleri, s. 33Kapsülleme, verileri onları kullanan metotlarla paketleyip iç ayrıntıları gizlemektir; dışarıdaki kod yalnızca herkese açık bir arayüz üzerinden çalışır.
- ConstructorProgramlamanın Temelleri, s. 7Constructor, bir sınıftan yeni bir nesne oluşturulduğunda çalışan ve nesnenin başlangıç değerlerini ayarlayarak onu kullanıma hazırlayan özel bir metottur.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin