Menu
Coddy logo textTech

Örtük Arayüzler

Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 46 / 110.

Her Dart sınıfı otomatik olarak bir arayüz tanımladığından, herhangi bir sınıfı bir arayüz olarak kullanabilirsiniz; tam uygulamalara sahip somut sınıfları bile. Buna örtük arayüz diyoruz.

Özellikleri ve metotları olan bir sınıfı düşünün:

class Logger {
  String prefix = '[LOG]';
  
  void log(String message) {
    print('$prefix $message');
  }
  
  void clear() {
    print('Clearing logs...');
  }
}

Başka bir sınıf Logger sınıfını uyguladığında, prefix özelliği de dahil olmak üzere her şey için kendi uygulamasını sağlamalıdır:

class FileLogger implements Logger {
  @override
  String prefix = '[FILE]';
  
  @override
  void log(String message) {
    print('$prefix Writing to file: $message');
  }
  
  @override
  void clear() {
    print('Deleting log file...');
  }
}

İşte temel içgörü: implements kullandığınızda, “sınıfım aynı şekle sahip olacak” diyorsunuz; yani aynı metotlara ve özelliklere sahip olacak. Herhangi bir kodu, kurucuyu veya varsayılan değeri miras almazsınız. Yalnızca arayüzün yapısıyla eşleşeceğinize söz veriyorsunuz.

Bu, örtük arayüzleri birbiriyle değiştirilebilir bileşenler oluşturmak için güçlü kılar. Bir Logger bekleyen kod, bu uygulamanın dahili olarak nasıl çalıştığından bağımsız olarak, arayüzünü uygulayan herhangi bir sınıfla çalışabilir.

challenge icon

Görev

Kolay

Somut sınıfların örtük arayüzler olarak nasıl kullanılabileceğini gösteren bir bildirim sistemi oluşturalım. Bir temel bildirim sınıfı oluşturacak ve ardından bunu tamamen farklı bir şekilde uygulayarak implements kullanımının tüm üyeleri kendiniz sağlamanızı gerektirdiğini göstereceksiniz.

Kodunuzu iki dosyada düzenleyeceksiniz:

  • notification.dart: Bildirim sınıflarınızı burada tanımlayın:
    • Notification olarak ayarlanmış bir String channel özelliğine, 'default' yazdıran bir send(String message) metoduna ve [channel]: [message] dizesini döndüren bir getStatus() metoduna sahip bir 'Notification ready' sınıfı
    • EmailNotification sınıfını implements eden bir Notification sınıfı. implements kullandığınız için kendi channel özelliğinizi sağlamalısınız ('email' olarak ayarlayın), send() yazdıran kendi Sending email: [message] metodunuzu ve getStatus() döndüren kendi 'Email service active' metodunuzu oluşturmalısınız
    • PushNotification sınıfını implements eden bir Notification sınıfı. channel değerini 'push' olarak ayarlayın, send() metodunun Push alert: [message] yazdırmasını sağlayın ve getStatus() metodunun 'Push service connected' döndürmesini sağlayın
  • main.dart: Bildirim dosyanızı içe aktarın ve farklı sınıfların aynı örtük arayüzü tamamen farklı davranışlarla nasıl uygulayabileceğini gösterin:
    • Bir EmailNotification ve bir PushNotification oluşturun
    • Her bildirim için getStatus() kullanarak durumunu yazdırın, ardından send() mesajıyla 'Hello World' metodunu çağırın
    • İki bildirim arasına boş bir satır yazdırın

Unutmayın: implements kullandığınızda Notification sınıfından herhangi bir kod devralmazsınız. Yalnızca sınıfınızın aynı şekle — aynı özelliklere ve metotlara — sahip olacağını taahhüt edersiniz. Uygulayan her sınıf kendi eksiksiz uygulamasını sağlar.

Beklenen çıktı:

Email service active
Sending email: Hello World

Push service connected
Push alert: Hello World

Kendin dene

import 'notification.dart';

void main() {
  // TODO: Bir EmailNotification örneği oluşturun
  
  // TODO: getStatus() kullanarak e-posta bildiriminin durumunu yazdırın
  
  // TODO: E-posta bildirimini kullanarak 'Hello World' mesajı gönderin
  
  // TODO: Boş bir satır yazdırın
  
  // TODO: Bir PushNotification örneği oluşturun
  
  // TODO: getStatus() kullanarak push bildiriminin durumunu yazdırın
  
  // TODO: Push bildirimini kullanarak 'Hello World' mesajı gönderin
  
}
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