Menu
Coddy logo textTech

Birden Çok Mixin Kullanımı

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

Birden fazla arayüz uygulayabildiğiniz gibi, tek bir sınıfa birden fazla mixin de uygulayabilirsiniz. Bunları with anahtar sözcüğünden sonra virgüllerle ayırarak listelemeniz yeterlidir.

mixin Swimming {
  void swim() => print('Swimming');
}

mixin Flying {
  void fly() => print('Flying');
}

mixin Walking {
  void walk() => print('Walking');
}

class Duck with Swimming, Flying, Walking {
  void quack() => print('Quack!');
}

void main() {
  var duck = Duck();
  duck.swim();   // Swimming mixin'inden
  duck.fly();    // Flying mixin'inden
  duck.walk();   // Walking mixin'inden
  duck.quack();  // Duck sınıfından
}

Aynı ada sahip yöntemleri olduğunda mixin'lerin sırası önemlidir. Listedeki son mixin önceliklidir:

mixin A {
  void greet() => print('Hello from A');
}

mixin B {
  void greet() => print('Hello from B');
}

class MyClass with A, B {}

void main() {
  MyClass().greet();  // Çıktı: Hello from B
}

B, A'dan sonra geldiği için, greet() metodu öncelik kazanır. Bu katmanlama davranışı, karmaşık kalıtım hiyerarşileri olmadan birden fazla kaynaktan gelen işlevselliği birleştirerek, tam olarak ihtiyacınız olan yeteneklere sahip sınıflar oluşturmanıza olanak tanır.

challenge icon

Görev

Kolay

Mixin'ler aracılığıyla birden fazla özelliği bir araya getiren akıllı ev cihazı sistemi oluşturalım. Çeşitli akıllı özellikleri temsil eden farklı mixin'ler oluşturacak, ardından bunların tümünü birlikte kullanan bir cihaz geliştireceksin.

Kodunu iki dosyada düzenleyeceksin:

  • smart_features.dart: Farklı akıllı ev özellikleri sağlayan üç mixin tanımla:
    • VoiceControl mixin'inde, voiceCommand(String command) adlı ve Voice: [command] yazdıran bir yöntem bulunur
    • WiFiEnabled mixin'inde, connectWiFi(String network) adlı ve Connected to [network] yazdıran bir yöntem bulunur
    • PowerSaver mixin'inde, enterSleepMode() yazdıran Entering sleep mode... adlı bir yöntem ve wakeUp() yazdıran Waking up! adlı bir yöntem bulunur
    Ardından üç mixin'in tümünü kullanan bir SmartSpeaker sınıfı oluştur. Yapıcıya sahip bir String name özelliği ekle ve playMusic(String song) yazdıran [name] playing: [song] adlı bir yöntem ekle
  • main.dart: Akıllı özellikler dosyanı içe aktar ve hoparlörün tüm özellikleri nasıl birleştirdiğini göster:
    • SmartSpeaker adlı bir 'Echo' oluştur
    • connectWiFi('HomeNetwork') çağrısını yap
    • voiceCommand('Play jazz') çağrısını yap
    • playMusic('Smooth Jazz Mix') çağrısını yap
    • enterSleepMode() çağrısını yap
    • wakeUp() çağrısını yap

SmartSpeaker, tek bir with yan tümcesiyle üç mixin'in tümünden yöntemler kazanır. Bu, birden fazla mixin'in karmaşık kalıtım olmadan tam olarak ihtiyacın olan özellikleri birleştirmene nasıl olanak sağladığını gösterir.

Beklenen çıktı:

Connected to HomeNetwork
Voice: Play jazz
Echo playing: Smooth Jazz Mix
Entering sleep mode...
Waking up!

Kendin dene

import 'smart_features.dart';

void main() {
  // TODO: 'Echo' adında bir SmartSpeaker oluşturun
  
  // TODO: connectWiFi('HomeNetwork') fonksiyonunu çağırın
  
  // TODO: voiceCommand('Play jazz') fonksiyonunu çağırın
  
  // TODO: playMusic('Smooth Jazz Mix') fonksiyonunu çağırın
  
  // TODO: enterSleepMode() fonksiyonunu çağırın
  
  // TODO: wakeUp() fonksiyonunu çağırın
}
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