Ana içeriğe geç

Kalıtım

İngilizcesi
Inheritance
Türkçe karşılığı
miras alma
Okunuşu
inheritıns
Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/inheritance

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

Python'da ebeveynini genişleten ve geçersiz kılan bir alt sınıfpython
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))  # True

Sı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

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar