Composition ile inheritance arasındaki fark nedir? Neden "composition over inheritance" denir?

Cevap

  • Inheritance (kalıtım): "is-a" ilişkisi. Car extends Vehicle. Alt sınıf üst sınıfın uygulamasını devralır.
  • Composition (bileşim): "has-a" ilişkisi. Car bir Engine nesnesine sahiptir ve işi ona devreder.

Kalıtımın sorunları

  • Sıkı bağlılık: üst sınıftaki değişiklik tüm alt sınıfları etkiler (fragile base class).
  • Sınıf patlaması: FlyingDuck, SwimmingDuck, FlyingSwimmingDuck, RubberDuck... Her davranış kombinasyonu için yeni sınıf.
  • Davranış derleme zamanında sabittir, çalışırken değiştirilemez.
  • Çoğu dilde tekli kalıtım vardır.

Composition ile

class FlyWithWings:
    def fly(self): return "Kanatlarla uçuyor"

class NoFly:
    def fly(self): return "Uçamıyor"

class Duck:
    def __init__(self, name, fly_behavior):
        self.name = name
        self.fly_behavior = fly_behavior    # davranış enjekte edilir

    def fly(self):
        return self.fly_behavior.fly()

mallard = Duck("Yaban ördeği", FlyWithWings())
rubber = Duck("Lastik ördek", NoFly())
rubber.fly_behavior = FlyWithWings()        # çalışma zamanında değişebilir

Faydaları: gevşek bağlılık, davranışların yeniden kullanımı, kolay test (mock bileşen verilebilir).

Kalıtım ne zaman doğru?

  • Gerçek bir "is-a" ilişkisi var ve Liskov prensibi sağlanıyorsa.
  • Çerçevenin beklediği genişletme noktalarında (ör. Exception sınıfından türetmek).
  • Hiyerarşi sığ ve kararlıysa.

Kural: kod tekrarını önlemek için kalıtımı ilk araç olarak seçmeyin; önce composition'ı düşünün.

  1. Clean code nedir? Yaygın code smell'ler nelerdir?OrtaOOP & Tasarım DesenleriYazılım Müh.
  2. Dependency Injection nedir? IoC container ne işe yarar?ZorOOP & Tasarım DesenleriYazılım Müh.
  3. Strategy deseni nedir? if/else zincirlerini nasıl ortadan kaldırır?OrtaOOP & Tasarım DesenleriYazılım Müh.
  4. Observer deseni nedir? Gerçek hayatta nerelerde karşımıza çıkar?OrtaOOP & Tasarım DesenleriYazılım Müh.
  5. Factory deseni nedir? Ne zaman kullanılır?OrtaOOP & Tasarım DesenleriYazılım Müh.
  6. Singleton deseni nedir? Neden bazen anti-pattern olarak görülür?ZorOOP & Tasarım DesenleriYazılım Müh.

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle