Menu
Coddy logo textTech

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.

challenge icon

Görev

Kolay

Farklı 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:
    • Connectable sınıfı, connect() yazdıran Connecting to network... metoduna sahip olmalı
    • Chargeable sınıfı, charge() yazdıran Charging battery... metoduna sahip olmalı
    • Displayable sınıfı, showScreen(String content) yazdıran Displaying: [content] metoduna sahip olmalı
    • Tablet sınıfı, üç arayüzün tümünü uygulamalı: Connectable, Chargeable ve Displayable. Yapıcıya sahip bir String brand özelliği ekle. Uygulamalarında connect için [brand] tablet connecting to WiFi, charge için [brand] tablet charging via USB-C ve 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:
    • Tablet markasına sahip bir 'Galaxy' oluştur
    • connect() metodunu çağır
    • charge() metodunu çağır
    • showScreen('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 Home

Kendin 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
  
}
quiz iconKendini test et

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

Kendi başına pratik yap: Online Dart derleyicisi