Birden Çok Arayüz
Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 48 / 110.
Kalıtım yerine arayüzlerin en büyük avantajlarından biri, bir sınıfın birden çok arayüzü uygulayabilmesidir. Dart sizi yalnızca bir sınıfı genişletmekle sınırlandırırken, ihtiyacınız olduğu kadar çok arayüz uygulayabilirsiniz.
abstract class Printable {
void printContent();
}
abstract class Saveable {
void save();
}
abstract class Shareable {
void share(String recipient);
}
class Document implements Printable, Saveable, Shareable {
String content;
Document(this.content);
@override
void printContent() {
print('Printing: $content');
}
@override
void save() {
print('Saving document...');
}
@override
void share(String recipient) {
print('Sharing with $recipient');
}
}Birden fazla arayüzü uygularken, her bir arayüzdeki tüm metotlar için uygulamalar sağlamalısınız. Sınıf, desteklemeyi vaat ettiği tüm sözleşmeleri yerine getirmelidir.
Ayrıca extends anahtar kelimesini birden fazla implements ile birleştirebilirsiniz:
class Report extends Document implements Printable, Shareable {
Report(String content) : super(content);
// Tüm arayüz metotlarını hala uygulamalıdır
// (bu durumda zaten Document sınıfından miras alınmıştır)
}Bu esneklik, birden fazla role uyan sınıflar tasarlamanıza olanak tanır. Bir SmartPhone; Camera, Phone ve MusicPlayer arayüzlerini uygulayabilir; bu da onun, kendi benzersiz uygulamasını korurken her bir arayüzün gerektirdiği her şeyi yapabileceğini taahhüt etmesi anlamına gelir.
Görev
KolayFarklı yetenekleri bir araya getirmek için tek bir sınıfın birden çok arayüzü nasıl uygulayabileceğini gösteren akıllı bir cihaz sistemi oluşturalım. Farklı cihaz özellikleri için ayrı arayüz sınıfları oluşturacak, ardından her şeyi yapabilen bir cihaz geliştireceksin.
Kodunu iki dosyaya ayıracaksın:
devices.dart: Arayüzlerini ve bunları uygulayan sınıfı burada tanımla:Connectablesınıfı,connect()yazdıranConnecting to network...metoduna sahip olmalıChargeablesınıfı,charge()yazdıranCharging battery...metoduna sahip olmalıDisplayablesınıfı,showScreen(String content)yazdıranDisplaying: [content]metoduna sahip olmalıTabletsınıfı, üç arayüzün tümünü uygulamalı:Connectable,ChargeableveDisplayable. Yapıcıya sahip birString brandözelliği ekle. Uygulamalarında connect için[brand] tablet connecting to WiFi, charge için[brand] tablet charging via USB-Cve showScreen için[brand] screen: [content]yazdırılmalı
main.dart: Cihaz dosyanı içe aktar ve Tablet'in üç arayüz sözleşmesinin tümünü nasıl yerine getirdiğini göster:Tabletmarkasına sahip bir'Galaxy'oluşturconnect()metodunu çağırcharge()metodunu çağırshowScreen('Welcome Home')metodunu çağır
Tablet sınıfın, üç arayüzdeki her metodun kendi uygulamasını sağlamalıdır. Bu, birden çok arayüzü uygulamanın, tek bir sınıfın her uygulamayı cihaza özgü tutarken birden çok yetenek vaat etmesini nasıl sağladığını gösterir.
Beklenen çıktı:
Galaxy tablet connecting to WiFi
Galaxy tablet charging via USB-C
Galaxy screen: Welcome HomeKendin dene
import 'devices.dart';
void main() {
// TODO: 'Galaxy' markalı bir Tablet oluşturun
// TODO: connect() çağırın
// TODO: charge() çağırın
// TODO: showScreen('Welcome Home') ç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
1Nesne Tabanlı Programlamanın Temelleri
Harici DosyalarKütüphaneler ve İçe AktarmalarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar SözcüğüMetotlarÖrnek DeğişkenleriYapıcıların TemelleriTekrar - Basit Hesap Makinesi4Null Güvenliği
Null Güvenliğine GirişNullable ve Non-Nullable? ve ! OperatörleriLate Anahtar Sözcüğü ve Null GüvenliğiNull-Aware OperatörlerSınıflarda Null GüvenliğiTekrar - Kullanıcı Profili Sistemi7Soyut Sınıflar ve Arayüzler
Soyut SınıflarSoyut MetotlarDart'ta ArayüzlerÖrtük ArayüzlerUygulamak ve GenişletmekBirden Çok ArayüzTekrar - Şekil Hesaplayıcı10Koleksiyonlar ve Generics
List, Set, Map Genel BakışTür Güvenli KoleksiyonlarGeneric SınıflarGeneric MetotlarGeneric KısıtlamalarIterable ve IteratorTekrar - Generic Depolama2Dart'ta Yapıcılar
Varsayılan YapıcıAdlandırılmış YapıcılarBaşlatıcı ListeleriSabit YapıcılarFabrika YapıcılarıYönlendiren YapıcılarÖzet - Şekil Oluşturucu5Kapsülleme
Public ve Private Üyeler_ Ön Ek KuralıKütüphane Düzeyinde GizlilikGetter ve Setter DerinliğiBilgi GizlemeTekrar - Öğrenci Kayıtları8Mixin'ler
Mixin'lere GirişMixin OluşturmaBirden Çok Mixin KullanımıMixin'lerde on Anahtar SözcüğüMixin ve Kalıtım KarşılaştırmasıMixin ve Arayüz KarşılaştırmasıÖzet - Hayvan Sistemi11Özel Metotlar
toString() Geçersiz KılmahashCode & == Geçersiz KılmaComparable Arayüzücall() MetodunoSuchMethod Geçersiz KılmaÖzet - Özel Koleksiyon14Tasarım Desenleri Bölüm 1
Tasarım Desenlerine GirişSingleton DeseniFactory DeseniObserver DeseniStrategy Deseni3Sınıf Özellikleri
Örnek ve Static ÜyelerFinal ve Const AlanlarLate DeğişkenlerStatic Metotlar ve AlanlarGetter ve Setter'larÖzet - Banka Hesabı Yöneticisi6Kalıtım
Temel Kalıtımsuper Anahtar SözcüğüMetot Geçersiz Kılma@override Açıklamasıfinal Sınıf Anahtar SözcüğüKurucular ve KalıtımÖzet - Çalışan Hiyerarşisi9Çok Biçimlilik
Çok Biçimlilik TemelleriArayüzler Yoluyla Çok BiçimlilikÇalışma Zamanı Tür Denetimiis ve as OperatörleriCovariant Anahtar KelimesiTekrar - Ödeme İşlemcisi12Asenkron OOP
Future'ler ve async/awaitStream TemelleriStream DenetleyicileriAsenkron YapıcılarSınıf Metotlarında AsenkronlukÖzet - Veri Getirici15Tasarım Desenleri Bölüm 2
Komut DeseniAdaptör DeseniDekoratör DeseniŞablon Metot DeseniDurum DeseniBileşik DesenDepo DeseniKendi başına pratik yap: Online Dart derleyicisi