Menu
CoddyTech

Antarmuka di Dart

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

Berbeda dari banyak bahasa yang memiliki kata kunci interface khusus, Dart menggunakan pendekatan yang berbeda. Di Dart, setiap class secara otomatis mendefinisikan interface. Interface ini terdiri dari semua member publik (method dan property) yang dideklarasikan oleh class tersebut.

Jika kamu ingin sebuah class berjanji akan menyediakan fungsionalitas tertentu tanpa mewarisi implementasi, gunakan kata kunci implements:

class Printer {
  void printDocument(String content) {
    print('Printing: $content');
  }
}

class Scanner {
  void scan() {
    print('Scanning document');
  }
}

// MultiFunctionDevice harus mengimplementasikan SEMUA method dari kedua class
class MultiFunctionDevice implements Printer, Scanner {
  @override
  void printDocument(String content) {
    print('MFD printing: $content');
  }
  
  @override
  void scan() {
    print('MFD scanning');
  }
}

Perbedaan utama dari extends adalah implements tidak mewarisi kode apa pun. Kamu harus menyediakan implementasimu sendiri untuk setiap method dan property yang ditentukan dalam interface. Ini adalah kontrak: kamu berjanji bahwa class-mu akan memiliki kemampuan ini, tetapi kamu menentukan sendiri cara kerjanya.

Pendekatan ini memberi Dart fleksibilitas. Kamu bisa menggunakan class abstrak saat ingin mendefinisikan antarmuka tanpa implementasi, atau menggunakan class biasa sebagai antarmuka saat itu masuk akal. Pelajaran berikutnya membahas lebih lanjut cara kerja konsep "antarmuka implisit" ini.

challenge icon

Tantangan

Mudah

Mari kita buat sistem pemutar media yang menunjukkan cara kerja kata kunci implements di Dart. Kamu akan membuat class yang berfungsi sebagai antarmuka, lalu mengimplementasikannya dalam satu perangkat yang menggabungkan beberapa kemampuan.

Kamu akan mengatur kodemu ke dalam dua file:

  • media.dart: Definisikan class antarmuka dan class yang mengimplementasikannya di sini:
    • Class AudioPlayer dengan method playAudio(String track) yang mencetak Playing audio: [track]
    • Class VideoPlayer dengan method playVideo(String title) yang mencetak Playing video: [title]
    • Class SmartTV yang mengimplementasikan AudioPlayer dan VideoPlayer. Karena implements tidak mewarisi kode apa pun, kamu harus menyediakan implementasimu sendiri untuk kedua method. SmartTV milikmu harus mencetak SmartTV audio: [track] untuk audio dan SmartTV video: [title] untuk video
  • main.dart: Impor file media-mu dan tunjukkan bagaimana satu class dapat mengimplementasikan beberapa antarmuka:
    • Buat instance SmartTV
    • Panggil playAudio('Jazz Collection')
    • Panggil playVideo('Nature Documentary')

Perhatikan bahwa SmartTV harus menyediakan implementasinya sendiri untuk setiap method dari kedua antarmuka. Class ini tidak mewarisi implementasi asli dari AudioPlayer atau VideoPlayer. Inilah perbedaan utama antara implements dan extends.

Output yang diharapkan:

SmartTV audio: Jazz Collection
SmartTV video: Nature Documentary

Coba sendiri

import 'media.dart';

void main() {
  // TODO: Buat instance SmartTV
  
  // TODO: Panggil playAudio('Jazz Collection')
  
  // TODO: Panggil playVideo('Nature Documentary')
  
}
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