Antarmuka di Dart
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 45 dari 110.
Berbeda dari banyak bahasa yang memiliki kata kunci interface khusus, Dart menggunakan pendekatan yang berbeda. Di Dart, setiap class secara otomatis mendefinisikan interface. Interface ini terdiri dari semua member publik (method dan property) yang dideklarasikan oleh class tersebut.
Jika kamu ingin sebuah class berjanji akan menyediakan fungsionalitas tertentu tanpa mewarisi implementasi, gunakan kata kunci implements:
class Printer {
void printDocument(String content) {
print('Printing: $content');
}
}
class Scanner {
void scan() {
print('Scanning document');
}
}
// MultiFunctionDevice harus mengimplementasikan SEMUA method dari kedua class
class MultiFunctionDevice implements Printer, Scanner {
@override
void printDocument(String content) {
print('MFD printing: $content');
}
@override
void scan() {
print('MFD scanning');
}
}Perbedaan utama dari extends adalah implements tidak mewarisi kode apa pun. Kamu harus menyediakan implementasimu sendiri untuk setiap method dan property yang ditentukan dalam interface. Ini adalah kontrak: kamu berjanji bahwa class-mu akan memiliki kemampuan ini, tetapi kamu menentukan sendiri cara kerjanya.
Pendekatan ini memberi Dart fleksibilitas. Kamu bisa menggunakan class abstrak saat ingin mendefinisikan antarmuka tanpa implementasi, atau menggunakan class biasa sebagai antarmuka saat itu masuk akal. Pelajaran berikutnya membahas lebih lanjut cara kerja konsep "antarmuka implisit" ini.
Tantangan
MudahMari kita buat sistem pemutar media yang menunjukkan cara kerja kata kunci implements di Dart. Kamu akan membuat class yang berfungsi sebagai antarmuka, lalu mengimplementasikannya dalam satu perangkat yang menggabungkan beberapa kemampuan.
Kamu akan mengatur kodemu ke dalam dua file:
media.dart: Definisikan class antarmuka dan class yang mengimplementasikannya di sini:- Class
AudioPlayerdengan methodplayAudio(String track)yang mencetakPlaying audio: [track] - Class
VideoPlayerdengan methodplayVideo(String title)yang mencetakPlaying video: [title] - Class
SmartTVyang mengimplementasikanAudioPlayerdanVideoPlayer. Karenaimplementstidak mewarisi kode apa pun, kamu harus menyediakan implementasimu sendiri untuk kedua method.SmartTVmilikmu harus mencetakSmartTV audio: [track]untuk audio danSmartTV video: [title]untuk video
- Class
main.dart: Impor file media-mu dan tunjukkan bagaimana satu class dapat mengimplementasikan beberapa antarmuka:- Buat instance
SmartTV - Panggil
playAudio('Jazz Collection') - Panggil
playVideo('Nature Documentary')
- Buat instance
Perhatikan bahwa SmartTV harus menyediakan implementasinya sendiri untuk setiap method dari kedua antarmuka. Class ini tidak mewarisi implementasi asli dari AudioPlayer atau VideoPlayer. Inilah perbedaan utama antara implements dan extends.
Output yang diharapkan:
SmartTV audio: Jazz Collection
SmartTV video: Nature DocumentaryCoba sendiri
import 'media.dart';
void main() {
// TODO: Buat instance SmartTV
// TODO: Panggil playAudio('Jazz Collection')
// TODO: Panggil playVideo('Nature Documentary')
}
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