mixin vs inheritance
- Dart kursu
- Orta seviye
- Ders 28/116
- 5 dk
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
// 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
// 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
class Bird extends Animal ____ Flyer {
Bird();
}
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 |