Pengantar Mixin
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 50 dari 110.
Kamu telah belajar bahwa Dart hanya mengizinkan perluasan satu class, dan meskipun kamu bisa mengimplementasikan beberapa antarmuka, kamu harus menulis semua kodenya sendiri. Namun, bagaimana jika kamu ingin berbagi kode implementasi yang sebenarnya di antara beberapa class yang tidak saling terkait? Di sinilah mixin berperan.
Mixin adalah cara untuk menggunakan kembali kode di beberapa hierarki class. Anggap saja sebagai kumpulan method dan property yang bisa kamu "campurkan" ke class apa pun, sehingga class tersebut mendapat kemampuan baru tanpa menggunakan pewarisan.
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(); // Dari mixin
var fish = Fish();
fish.swim(); // Implementasi sama, class berbeda
}Perhatikan kata kunci with. Inilah cara menerapkan mixin ke class. Berbeda dengan implements, kamu tidak perlu menulis method-nya sendiri. Mixin menyediakan kode yang sebenarnya, dan class-mu mendapatkan fungsionalitas itu secara otomatis.
Mixin mengatasi masalah nyata: Duck dan Fish tidak berhubungan melalui pewarisan, tetapi keduanya membutuhkan perilaku berenang. Dengan mixin, kamu menulis kode sekali dan membagikannya di mana pun diperlukan.
Tantangan
MudahMari buat sistem alat musik yang menunjukkan cara mixin memungkinkan kamu berbagi perilaku di antara class yang tidak saling berhubungan. Kamu akan membuat mixin yang menyediakan fungsi penyeteman, lalu menerapkannya pada berbagai alat musik yang tidak berhubungan melalui pewarisan.
Kamu akan mengatur kodemu ke dalam dua file:
instruments.dart: Definisikan mixin dan class alat musikmu di sini:- Mixin
Tunabledengan methodtune()yang mencetakTuning the instrument...dan methodcheckTuning()yang mencetakTuning is perfect! - Class
Guitaryang menggunakan mixinTunable. Tambahkan propertyString branddengan constructor. Sertakan methodstrum()yang mencetak[brand] guitar strumming chords - Class
Pianoyang juga menggunakan mixinTunable. Tambahkan propertyint keysdengan constructor. Sertakan methodplay()yang mencetakPlaying [keys]-key piano
- Mixin
main.dart: Impor file alat musikmu dan tunjukkan cara kedua alat musik yang tidak saling berhubungan mendapatkan kemampuan menyetem dari mixin yang sama:- Buat
Guitardengan merek'Fender' - Buat
Pianodengan88tuts - Untuk gitar: panggil
tune(), lalustrum(), kemudiancheckTuning() - Cetak satu baris kosong
- Untuk piano: panggil
tune(), laluplay(), kemudiancheckTuning()
- Buat
Perhatikan bahwa Guitar dan Piano adalah alat musik yang sangat berbeda dan tidak memiliki hubungan pewarisan, tetapi keduanya mendapatkan method penyeteman yang sama persis dari mixin Tunable. Kamu menulis kode penyeteman satu kali, lalu kedua class dapat menggunakannya dengan kata kunci with.
Output yang diharapkan:
Tuning the instrument...
Fender guitar strumming chords
Tuning is perfect!
Tuning the instrument...
Playing 88-key piano
Tuning is perfect!Coba sendiri
import 'instruments.dart';
void main() {
// TODO: Buat Guitar dengan merek 'Fender'
// TODO: Buat Piano dengan 88 tuts
// TODO: Untuk gitarmu, panggil tune(), lalu strum(), lalu checkTuning()
// TODO: Cetak satu baris kosong
// TODO: Untuk pianomu, panggil tune(), lalu play(), lalu checkTuning()
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
file Eksternallibrary dan ImporPengantar OOPClass dan ObjectKata kunci thismethodVariabel InstanceDasar-Dasar ConstructorRingkasan: Kalkulator Sederhana4Keamanan Null
Pengantar Keamanan NullBisa Null vs Tidak Bisa NullOperator ? dan !Kata Kunci late dan Keamanan NullOperator Penanganan NullKeamanan Null dalam classRangkuman: Sistem Profil Pengguna7class Abstrak & Antarmuka
class AbstrakMethod abstrakAntarmuka di DartAntarmuka ImplisitMengimplementasikan vs MemperluasBeberapa AntarmukaRingkasan: Kalkulator Bentuk10Koleksi dan Generik
Gambaran Umum list, set, dan MapKoleksi dengan Tipe AmanKelas GenerikMetode GenerikBatasan GenerikIterable dan IteratorUlasan: Penyimpanan Generik2Konstruktor dalam Dart
Konstruktor DefaultKonstruktor BernamaInitializer ListsKonstruktor KonstanKonstruktor FactoryKonstruktor RedirectingRangkuman, Pembuat Bentuk5Enkapsulasi
Member Publik vs PrivatKonvensi Prefiks _Privasi Tingkat libraryPendalaman Getter & SetterPenyembunyian InformasiRingkasan: Catatan Siswa8Mixin
Pengantar MixinMembuat MixinMenggunakan Beberapa MixinKata Kunci on pada MixinMixin vs. PewarisanMixin vs. InterfaceRangkuman: Sistem Hewan3Property Class
Anggota Instance vs StaticField Final dan ConstVariabel LateMethod dan Field StaticGetter dan SetterRangkuman: Pengelola Rekening Bank6Pewarisan
Pewarisan DasarKata Kunci superPenimpaan methodAnotasi @overrideKata Kunci class finalKonstruktor dan PewarisanRangkuman, Hierarki Karyawan9Polimorfisme
Dasar-Dasar PolimorfismePolimorfisme melalui AntarmukaPemeriksaan Tipe saat RuntimeOperator is & asKata Kunci KovarianRangkuman: Pemroses PembayaranLatihan sendiri: Compiler Dart online