Birden Fazla Mixin Kullanımı
Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 52 / 110.
Tıpkı birden fazla arayüz uygulayabildiğiniz gibi, tek bir sınıfa birden fazla mixin de uygulayabilirsiniz. Bunları with anahtar kelimesinden sonra virgülle 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ı isme sahip metotları olduğunda mixin'lerin sırası önemlidir. Listedeki son mixin kazanır:
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.
Görev
KolayMixin'ler aracılığıyla birden fazla yeteneği birleştiren akıllı bir ev cihazı sistemi kuralım. Çeşitli akıllı özellikleri temsil eden farklı mixin'ler oluşturacak, ardından hepsini bir arada kullanan bir cihaz inşa edeceksiniz.
Kodunuzu iki dosya halinde düzenleyeceksiniz:
smart_features.dart: Farklı akıllı ev yetenekleri sağlayan üç mixin tanımlayın:Voice: [command]yazdıranvoiceCommand(String command)metoduna sahip birVoiceControlmixin'iConnected to [network]yazdıranconnectWiFi(String network)metoduna sahip birWiFiEnabledmixin'iEntering sleep mode...yazdıranenterSleepMode()metodu ileWaking up!yazdıranwakeUp()metoduna sahip birPowerSavermixin'i
SmartSpeakersınıfı oluşturun. Bir yapıcı (constructor) ile birlikte birString nameözelliği ekleyin ve[name] playing: [song]yazdıran birplayMusic(String song)metodu dahil edin.main.dart: Akıllı özellikler dosyanızı içe aktarın ve hoparlörün tüm yetenekleri nasıl birleştirdiğini gösterin:'Echo'adında birSmartSpeakeroluşturunconnectWiFi('HomeNetwork')metodunu çağırınvoiceCommand('Play jazz')metodunu çağırınplayMusic('Smooth Jazz Mix')metodunu çağırınenterSleepMode()metodunu çağırınwakeUp()metodunu çağırın
SmartSpeaker sınıfınız, tek bir with ifadesiyle her üç mixin'den de metodlar kazanarak, birden fazla mixin'in karmaşık kalıtım süreçlerine girmeden tam olarak ihtiyacınız olan yetenekleri oluşturmanıza nasıl olanak tanıdığını gösterir.
Beklenen çıktı:
Connected to HomeNetwork
Voice: Play jazz
Echo playing: Smooth Jazz Mix
Entering sleep mode...
Waking up!Kopya kağıdı
Bir sınıf, with anahtar kelimesinden sonra virgülle ayırarak listeleyerek birden fazla mixin uygulayabilir:
mixin Swimming {
void swim() => print('Swimming');
}
mixin Flying {
void fly() => print('Flying');
}
class Duck with Swimming, Flying {
void quack() => print('Quack!');
}
void main() {
var duck = Duck();
duck.swim(); // Swimming mixin'inden
duck.fly(); // Flying mixin'inden
duck.quack(); // Duck sınıfından
}Birden fazla mixin aynı ada sahip metotlara sahip olduğunda, listedeki son mixin öncelik kazanır:
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
}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
}
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
1OOP Temelleri
Harici DosyalarKütüphaneler ve ImportlarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar KelimesiMetotlarÖrnek DeğişkenleriConstructor TemelleriÖzet - Basit Hesap Makinesi4Null Safety
Null Safety'ye GirişNullable ve Non-Nullable? ve ! OperatörleriLate Anahtar Kelimesi ve Null SafetyNull-Aware OperatörleriSınıflarda Null SafetyÖzet - Kullanıcı Profili Sistemi7Soyut Sınıflar ve Arayüzler
Soyut SınıflarSoyut MetotlarDart'ta ArayüzlerÖrtük ArayüzlerUygulama vs. GenişletmeÇoklu ArayüzlerÖzet - Şekil Hesaplayıcı10Koleksiyonlar ve Generic'ler
List, Set, Map Genel BakışTip Güvenli KoleksiyonlarGeneric SınıflarGeneric MetotlarGeneric KısıtlamalarIterable ve IteratorÖzet - Generic Depolama2Dart'ta Yapıcılar
Varsayılan Yapıcıİsimlendirilmiş Yapıcılarİlklendirme ListeleriSabit YapıcılarFabrika YapıcılarıYönlendiren YapıcılarÖzet - Şekil Oluşturucu5Kapsülleme
Public ve Private Üyeler_ Öneki KuralıKütüphane Düzeyinde GizlilikGetter ve Setter DetaylarıBilgi GizlemeÖzet - Öğrenci Kayıtları8Mixin'ler
Mixin'lere GirişMixin OluşturmaBirden Fazla Mixin KullanımıMixin'lerde on Anahtar KelimesiMixin vs KalıtımMixin vs ArayüzÖzet - Hayvan Sistemi11Özel Metotlar
toString() OverridehashCode ve == OverrideComparable Arayüzücall() MetodunoSuchMethod OverrideÖzet - Özel Koleksiyon14Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıObserver KalıbıStrategy Kalıbı17Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakter SistemiAraç Kiralama Servisi3Sınıf Özellikleri
Instance ve Statik ÜyelerFinal ve Const AlanlarLate DeğişkenlerStatik Metotlar ve AlanlarGetters ve SettersÖzet - Banka Hesabı Yöneticisi6Kalıtım
Temel Kalıtımsuper Anahtar KelimesiMetot Ezme@override Anotasyonufinal Sınıf Anahtar KelimesiYapıcı Metotlar ve KalıtımÖzet - Çalışan Hiyerarşisi9Çok Biçimlilik
Çok Biçimlilik TemelleriInterface'ler ile Çok BiçimlilikÇalışma Zamanı Tip Kontrolüis ve as OperatörleriCovariant Anahtar KelimesiÖzet - Ödeme İşlemcisi12Asenkron OOP
Futures ve async/awaitStream TemelleriStream Controller'larAsenkron KurucularSınıf Metotlarında Asenkron KullanımıÖzet - Data Fetcher15Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıRepository Kalıbı