Menu
CoddyTech

Antarmuka Implisit

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 46 dari 110.

Karena setiap class Dart secara otomatis mendefinisikan interface, kamu dapat menggunakan class apa pun sebagai interface, bahkan class konkret dengan implementasi lengkap. Inilah yang kami sebut interface implisit.

Pertimbangkan sebuah class dengan property dan method:

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

Saat class lain mengimplementasikan Logger, class tersebut harus menyediakan implementasinya sendiri untuk semuanya, termasuk property prefix:

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...');
  }
}

Inilah wawasan utamanya: saat kamu menggunakan implements, kamu mengatakan, "class-ku akan memiliki bentuk yang sama", yaitu method dan property yang sama. Kamu tidak mewarisi kode, constructor, atau nilai default apa pun. Kamu hanya berjanji untuk mengikuti struktur interface.

Hal ini membuat interface implisit sangat berguna untuk membuat komponen yang dapat saling dipertukarkan. Kode yang mengharapkan Logger dapat bekerja dengan class apa pun yang mengimplementasikan interfacenya, terlepas dari cara kerja implementasi tersebut secara internal.

challenge icon

Tantangan

Mudah

Mari buat sistem notifikasi yang menunjukkan bagaimana class konkret dapat berfungsi sebagai interface implisit. Kamu akan membuat class notifikasi dasar, lalu mengimplementasikannya dengan cara yang benar-benar berbeda, untuk menunjukkan bahwa implements mengharuskan kamu menyediakan semua anggotanya sendiri.

Kamu akan mengatur kodemu dalam dua file:

  • notification.dart: Definisikan class notifikasimu di sini:
    • Class Notification dengan property String channel yang nilainya ditetapkan ke 'default', method send(String message) yang mencetak [channel]: [message], dan method getStatus() yang mengembalikan string 'Notification ready'
    • Class EmailNotification yang mengimplementasikan Notification. Karena kamu menggunakan implements, kamu harus menyediakan property channel sendiri (tetapkan nilainya ke 'email'), method send() sendiri yang mencetak Sending email: [message], dan method getStatus() sendiri yang mengembalikan 'Email service active'
    • Class PushNotification yang mengimplementasikan Notification. Tetapkan channel-nya ke 'push', buat send() mencetak Push alert: [message], dan buat getStatus() mengembalikan 'Push service connected'
  • main.dart: Impor file notifikasimu dan tunjukkan bagaimana class yang berbeda dapat mengimplementasikan interface implisit yang sama dengan perilaku yang benar-benar berbeda:
    • Buat sebuah EmailNotification dan sebuah PushNotification
    • Untuk setiap notifikasi, cetak statusnya menggunakan getStatus(), lalu panggil send() dengan pesan 'Hello World'
    • Cetak satu baris kosong di antara kedua notifikasi

Ingat: saat menggunakan implements, kamu tidak mewarisi kode apa pun dari Notification. Kamu hanya menjanjikan bahwa class-mu akan memiliki bentuk yang sama, yaitu property dan method yang sama. Setiap class yang mengimplementasikannya menyediakan implementasi lengkapnya sendiri.

Output yang diharapkan:

Email service active
Sending email: Hello World

Push service connected
Push alert: Hello World

Coba sendiri

import 'notification.dart';

void main() {
  // TODO: Buat instance EmailNotification
  
  // TODO: Cetak status notifikasi email menggunakan getStatus()
  
  // TODO: Kirim pesan 'Hello World' menggunakan notifikasi email
  
  // TODO: Cetak baris kosong
  
  // TODO: Buat instance PushNotification
  
  // TODO: Cetak status notifikasi push menggunakan getStatus()
  
  // TODO: Kirim pesan 'Hello World' menggunakan notifikasi push
  
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Dart online