CodeBlanks Logo Icon CodeBlanks

mixin vs inheritance

mixin ve inheritance farkını öğrenirsin.

mixin ve inheritance farkı

Kalıtım (inheritance) bir is-a ilişkisi kurar: Dog extends Animal derken Dog bir Animal'dır. Mixin ise bir can-do ilişkisi kurar: class Bird with Flyer derken Bird uçabilir.

Kalıtım tek bir üst sınıftan alınır; alt sınıf üst sınıfın tüm davranışını miras alır ve onu genişletir. Mixin ise davranış bloklarını birleştirir; sınıf hiyerarşisini bozmaz. Kalıtım, tür ilişkisi kurmak için; mixin, davranış eklemek için uygundur. İkisi yan yana kullanılabilir: class Bird extends Animal with Flyer.

Hangi durumda hangisi?

Mixin mi kalıtım mı seçileceği, ilişkinin doğasına bağlıdır. Is-a ilişkisi varsa kalıtım; can-do ilişkisi varsa mixin uygundur.

Örnek: Dog extends Animal kalıtımı doğrudur çünkü köpek bir hayvandır. Bird with Flyer mixin'i doğrudur çünkü kuş uçabilir; ama kuş bir Flyer türü değildir. Yanlış seçim kod tasarımını bozar: her uçuş yeteneği için ayrı bir alt sınıf zinciri kurmak yerine Flyer mixin'i paylaşılarak farklı sınıflara uygulanır. Bu, kod tekrarını önler ve hiyerarşiyi sade tutar.

Uygulama Kalıtım ve mixin'i birleştir

Animal adında bir sınıf tanımla; void breathe() { print('Nefes alıyor'); } metodunu ekle. Flyer adında bir mixin tanımla; void fly() { print('Uçuyor'); } metodunu ekle. Bird adında bir sınıf yaz: class Bird extends Animal with Flyer { Bird(); }. main içinde var b = Bird(); ile örnek oluştur ve b.breathe() ile b.fly() çağrılarını yap.

Başlangıç kodu

main.dart
// Animal sınıfını ve Flyer mixin'ini tanımla
// Bird sınıfını Animal + Flyer ile yaz

void main() {
  // Bird örneği oluştur ve breathe() ile fly() çağır
}

Örnek çözüm

main.dart
// Animal sınıfını ve Flyer mixin'ini tanımla
class Animal {
  void breathe() {
    print('Nefes alıyor');
  }
}

mixin Flyer {
  void fly() {
    print('Uçuyor');
  }
}

class Bird extends Animal with Flyer {
  Bird();
}

void main() {
  var b = Bird();
  b.breathe();
  b.fly();
}

Beklenen çıktı

Nefes alıyor
Uçuyor

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Kalıtım ve mixin'i birleştir

Soru
class Bird extends Animal ____ Flyer {
  Bird();
}
Cevap
class Bird extends Animal with Flyer {
  Bird();
}

Açıklama: with, mixin'i kalıtım zincirine ekler.

2 Hangisi doğrudur?

  • Kalıtım is-a, mixin can-do ilişkisi kurar Doğru cevap
  • Kalıtım can-do, mixin is-a ilişkisi kurar
  • Mixin yalnızca soyut sınıflarda kullanılır
  • İkisi de aynıdır

Açıklama: Kalıtım tür, mixin davranış ilişkisi kurar; ikisi farklı amaçlara hizmet eder.

3 İlişki türlerini eşle

Kavram Anlamı
extends Is-a ilişkisi
with Can-do ilişkisi
Animal Üst sınıf

Orta seviye bölümündeki tüm dersler