Menu
Coddy logo textTech

Mixin'lere Giriş

Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 50 / 110.

Dart'ın yalnızca bir sınıfı genişletmeye izin verdiğini ve birden çok arayüzü uygulayabilseniz de tüm kodu kendiniz yazmanız gerektiğini öğrendiniz. Peki, gerçek uygulama kodunu birbiriyle ilişkili olmayan birden çok sınıf arasında paylaşmak isterseniz ne olacak? İşte mixin'ler burada devreye girer.

Mixin, kodu birden fazla sınıf hiyerarşisinde yeniden kullanmanın bir yoludur. Bunu, herhangi bir sınıfa "karıştırabileceğiniz" ve kalıtım kullanmadan sınıfa yeni yetenekler kazandıran bir yöntem ve özellik paketi olarak düşünebilirsiniz.

mixin Swimming {
  void swim() {
    print('Swimming through the water');
  }
}

class Duck with Swimming {
  void quack() {
    print('Quack!');
  }
}

class Fish with Swimming {
  void blowBubbles() {
    print('Blub blub');
  }
}

void main() {
  var duck = Duck();
  duck.quack();
  duck.swim();  // Mixin'den
  
  var fish = Fish();
  fish.swim();  // Aynı uygulama, farklı sınıf
}

with anahtar sözcüğüne dikkat edin - bir mixin'i sınıfa bu şekilde uygularsınız. implements'ten farklı olarak yöntemi kendiniz yazmanız gerekmez. Mixin gerçek kodu sağlar ve sınıfınız bu işlevselliği otomatik olarak kazanır.

Mixin'ler gerçek bir sorunu çözer: Duck ve Fish kalıtım yoluyla ilişkili değildir, ancak her ikisinin de yüzme davranışına ihtiyacı vardır. Mixin'lerle kodu bir kez yazar ve gerektiği her yerde paylaşırsın.

challenge icon

Görev

Kolay

İlişkisiz sınıflar arasında davranışı paylaşmak için mixin'lerin nasıl kullanılabileceğini gösteren bir müzik aleti sistemi oluşturalım. Akort işlevselliği sağlayan bir mixin oluşturacak, ardından bunu kalıtım yoluyla ilişkili olmayan farklı müzik aletlerine uygulayacaksın.

Kodunu iki dosyaya ayıracaksın:

  • instruments.dart: Mixin'ini ve müzik aleti sınıflarını burada tanımla:
    • Tunable mixin'i; tune() yazdıran Tuning the instrument... metoduna ve checkTuning() yazdıran Tuning is perfect! metoduna sahip olmalı.
    • Guitar mixin'ini kullanan bir Tunable sınıfı. Yapıcıya sahip bir String brand özelliği ekle. strum() yazdıran bir [brand] guitar strumming chords metodu ekle.
    • Aynı zamanda Piano mixin'ini kullanan bir Tunable sınıfı. Yapıcıya sahip bir int keys özelliği ekle. play() yazdıran bir Playing [keys]-key piano metodu ekle.
  • main.dart: Müzik aletleri dosyanı içe aktar ve birbiriyle ilişkili olmayan iki müzik aletinin aynı mixin'den akort yeteneklerini nasıl kazandığını göster:
    • Guitar markasına sahip bir 'Fender' oluştur.
    • Piano tuşlu bir 88 oluştur.
    • Gitar için: önce tune(), ardından strum(), sonra da checkTuning() çağır.
    • Boş bir satır yazdır.
    • Piyano için: önce tune(), ardından play(), sonra da checkTuning() çağır.

Guitar ve Piano'nun kalıtım ilişkisi olmayan, tamamen farklı müzik aletleri olduğuna; buna rağmen ikisinin de Tunable mixin'inden tamamen aynı akort metotlarını kazandığına dikkat et. Akort kodunu bir kez yazarsın ve her iki sınıf da bunu with anahtar sözcüğüyle kullanabilir.

Beklenen çıktı:

Tuning the instrument...
Fender guitar strumming chords
Tuning is perfect!

Tuning the instrument...
Playing 88-key piano
Tuning is perfect!

Kendin dene

import 'instruments.dart';

void main() {
  // TODO: 'Fender' markalı bir Guitar oluştur
  
  // TODO: 88 tuşlu bir Piano oluştur
  
  // TODO: Gitar için: tune(), ardından strum() ve sonra checkTuning() fonksiyonlarını çağır
  
  // TODO: Boş bir satır yazdır
  
  // TODO: Piyano için: tune(), ardından play() ve sonra checkTuning() fonksiyonlarını çağır
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Dart derleyicisi