CodeBlanks Logo Icon CodeBlanks

Özet - Mixin'ler

mixin, with ve on'u birleştirerek bir yetenek sistemi yazarsın.

Özet - Mixin'ler

Bu grupta mixin'lerin tüm araçlarını gördün: mixin, with, on, çoklu mixin ve mixin vs inheritance. Şimdi bunları bir yetenek sisteminde birleştireceğiz.

Bir yetenek sistemi, farklı sınıflara yeniden kullanılabilir davranışlar ekler. Örneğin bir Bird sınıfı hem Flyer hem Walker mixin'ini uygular; her iki yeteneği de örnek üzerinden çağrılabilir. İkinci adımda yeni bir yetenek daha ekleyip Duck sınıfını üç mixin ile donatacağız. Bu, mixin'lerin gücünü tek bir örnekte gösterir.

Uygulama Bird sınıfına iki yetenek ekle

Flyer ve Walker adında iki mixin tanımla. Flyer içinde void fly() { print('Uçuyor'); }, Walker içinde void walk() { print('Yürüyor'); } metotlarını ekle. Bird adında bir sınıf yaz: class Bird with Flyer, Walker { Bird(); }. main içinde var b = Bird(); ile örnek oluştur ve b.fly() ile b.walk() çağrılarını yap.

Başlangıç kodu

main.dart
// Flyer ve Walker mixin'lerini tanımla
// Bird sınıfını iki mixin ile uygula

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

Örnek çözüm

main.dart
// Flyer ve Walker mixin'lerini tanımla
mixin Flyer {
  void fly() {
    print('Uçuyor');
  }
}

mixin Walker {
  void walk() {
    print('Yürüyor');
  }
}

class Bird with Flyer, Walker {
  Bird();
}

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

Beklenen çıktı

Uçuyor
Yürüyor

Üçüncü yetenek: Swimmer

İkinci adımda yetenek sistemine üçüncü bir mixin ekleyeceğiz: Swimmer. Duck sınıfı üç mixin'i bir arada uygulayarak uçan, yürüyen ve yüzen bir yetenek setine sahip olacak.

Örnek: class Duck with Flyer, Walker, Swimmer { Duck(); }. Üç mixin virgülle ayrılır. Duck örneği fly(), walk() ve swim() metotlarının üçünü de çağırabilir. Bu, mixin'lerin gerçek gücünü gösterir: yetenekler tek tek tanımlanır, sınıfa bir arada uygulanır; kalıtım ağacı genişlemeden davranış çoğalır.

Uygulama Duck'a üçüncü mixin ekle

Var olan Flyer ve Walker mixin'lerini koru. Swimmer adında üçüncü bir mixin ekle; void swim() { print('Yüzüyor'); } metodunu yaz. Duck adında bir sınıf tanımla: class Duck with Flyer, Walker, Swimmer { Duck(); }. main içinde var d = Duck(); ile örnek oluştur ve d.fly(), d.walk() ve d.swim() çağrılarını yap.

Başlangıç kodu

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

mixin Walker {
  void walk() {
    print('Yürüyor');
  }
}

// Swimmer mixin'ini ekle ve Duck sınıfını üç mixin ile yaz

void main() {
  // Duck örneği oluştur ve fly, walk, swim çağır
}

Örnek çözüm

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

mixin Walker {
  void walk() {
    print('Yürüyor');
  }
}

mixin Swimmer {
  void swim() {
    print('Yüzüyor');
  }
}

class Duck with Flyer, Walker, Swimmer {
  Duck();
}

void main() {
  var d = Duck();
  d.fly();
  d.walk();
  d.swim();
}

Beklenen çıktı

Uçuyor
Yürüyor
Yüzüyor

Soru ve cevaplar

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

1 Bir yetenek sistemi için hangisi doğrudur?

  • Her yetenek için ayrı bir üst sınıf yazılır
  • Her yetenek için mixin yazılır; sınıflara with ile uygulanır Doğru cevap
  • Yetenekler yalnızca static alanlarla eklenir
  • Yetenekler yapıcı içine yazılır

Açıklama: Mixin + with, yetenek sisteminin temelidir.

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