Dart'ta Arayüzler
Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 45 / 110.
Özel bir interface anahtar kelimesine sahip olan birçok dilin aksine, Dart farklı bir yaklaşım benimser. Dart'ta, her sınıf otomatik olarak bir arayüz tanımlar. Bu arayüz, sınıfın bildirdiği tüm genel üyelerden (metotlar ve özellikler) oluşur.
Bir sınıfın, uygulamayı miras almadan belirli bir işlevsellik sağlayacağına dair söz vermesini istediğinizde, implements anahtar kelimesini kullanırsınız:
class Printer {
void printDocument(String content) {
print('Printing: $content');
}
}
class Scanner {
void scan() {
print('Scanning document');
}
}
// MultiFunctionDevice her iki sınıftaki TÜM metotları uygulamalıdır
class MultiFunctionDevice implements Printer, Scanner {
@override
void printDocument(String content) {
print('MFD printing: $content');
}
@override
void scan() {
print('MFD scanning');
}
}extends ile arasındaki temel fark, implements anahtar kelimesinin herhangi bir kodu miras almamasıdır. Arayüzde tanımlanan her metot ve özellik için kendi uygulamanızı sağlamalısınız. Bu bir sözleşmedir; sınıfınızın bu yeteneklere sahip olacağına dair söz verirsiniz, ancak bunların tam olarak nasıl çalışacağına siz karar verirsiniz.
Bu yaklaşım Dart'a esneklik kazandırır. Herhangi bir uygulama içermeyen interface'ler tanımlamak istediğinizde abstract class'ları kullanabilir veya mantıklı olduğunda normal class'ları interface olarak kullanabilirsiniz. Bir sonraki ders, bu "implicit interface" kavramının nasıl çalıştığını daha ayrıntılı olarak inceliyor.
Görev
KolayDart'ta implements anahtar kelimesinin nasıl çalıştığını gösteren bir medya oynatıcı sistemi oluşturalım. Arayüz (interface) görevi gören sınıflar oluşturacak ve ardından bunları birden fazla yeteneği birleştiren tek bir cihazda uygulayacaksınız.
Kodunuzu iki dosya halinde düzenleyeceksiniz:
media.dart: Arayüz sınıflarınızı ve bunları uygulayan sınıfı burada tanımlayın:Playing audio: [track]çıktısını verenplayAudio(String track)metoduna sahip birAudioPlayersınıfıPlaying video: [title]çıktısını verenplayVideo(String title)metoduna sahip birVideoPlayersınıfı- Hem
AudioPlayerhem deVideoPlayersınıflarını uygulayan (implements) birSmartTVsınıfı.implementsherhangi bir kodu miras almadığı için, her iki metod için de kendi uygulamalarınızı sağlamalısınız.SmartTVsınıfınız ses içinSmartTV audio: [track]ve video içinSmartTV video: [title]çıktılarını vermelidir
main.dart: Medya dosyanızı içe aktarın ve tek bir sınıfın birden fazla arayüzü nasıl uygulayabileceğini gösterin:- Bir
SmartTVörneği oluşturun playAudio('Jazz Collection')metodunu çağırınplayVideo('Nature Documentary')metodunu çağırın
- Bir
SmartTV sınıfının her iki arayüzdeki her metod için kendi uygulamasını nasıl sağlaması gerektiğine dikkat edin - AudioPlayer veya VideoPlayer sınıflarındaki orijinal uygulamaları miras almaz. Bu, implements ve extends arasındaki temel farktır.
Beklenen çıktı:
SmartTV audio: Jazz Collection
SmartTV video: Nature DocumentaryKopya kağıdı
Dart'ta her sınıf, tüm genel üyelerinden oluşan bir arayüzü otomatik olarak tanımlar. Kod miras almadan bir arayüzü uygulamak için implements anahtar kelimesini kullanın:
class Printer {
void printDocument(String content) {
print('Printing: $content');
}
}
class Scanner {
void scan() {
print('Scanning document');
}
}
// Her iki sınıftaki TÜM metotlar uygulanmalıdır
class MultiFunctionDevice implements Printer, Scanner {
@override
void printDocument(String content) {
print('MFD printing: $content');
}
@override
void scan() {
print('MFD scanning');
}
}extends ile arasındaki temel farklar:
implementsherhangi bir kod uygulamasını miras almaz- Her metot ve özellik için kendi uygulamanızı sağlamalısınız
- Bir sınıf birden fazla arayüzü uygulayabilir
- Bu, sınıfınızın bu yeteneklere sahip olacağını vaat eden bir sözleşmedir
Kendin dene
import 'media.dart';
void main() {
// TODO: Bir SmartTV örneği oluşturun
// TODO: playAudio('Jazz Collection') metodunu çağırın
// TODO: playVideo('Nature Documentary') metodunu ç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ı