Menu
CoddyTech

Mengimplementasikan vs Memperluas

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

Sekarang setelah kamu memahami extends dan implements, mari kita perjelas kapan harus menggunakan masing-masing.

Gunakan extends saat kamu ingin mewarisi perilaku. Subclass-mu mendapatkan semua kode dari class induknya secara gratis dan dapat mengembangkannya:

class Animal {
  void breathe() {
    print('Breathing...');
  }
}

class Dog extends Animal {
  void bark() {
    print('Woof!');
  }
}

void main() {
  var dog = Dog();
  dog.breathe();  // Diwarisi, berfungsi secara otomatis
  dog.bark();
}

Gunakan implements saat kamu ingin menjamin sebuah struktur tanpa mewarisi kode. Kamu harus menulis setiap method sendiri:

class Robot implements Animal {
  @override
  void breathe() {
    print('Ventilating circuits...');  // Implementasi yang sepenuhnya dibuat khusus
  }
}

Perbedaan utamanya: extends berarti "Aku adalah jenis dari ini", sedangkan implements berarti "Aku bisa melakukan hal yang dilakukan ini." Dog adalah Animal dan bernapas dengan cara yang sama. Robot bukan hewan, tetapi bisa memenuhi kontrak yang sama dengan logikanya sendiri.

Ingat: kamu hanya dapat mewarisi satu class, tetapi dapat mengimplementasikan banyak interface. Pilih extends untuk hubungan pewarisan yang sebenarnya, dan implements saat kamu membutuhkan fleksibilitas atau ingin menerapkan kontrak tanpa berbagi detail implementasi.

challenge icon

Tantangan

Mudah

Mari kita buat sistem pekerja yang menunjukkan kapan harus menggunakan extends dibandingkan dengan implements. Kamu akan membuat class pekerja dasar, lalu menunjukkan kedua pendekatan: satu class yang benar-benar merupakan pekerja dan mewarisi perilaku, serta class lain yang hanya bisa melakukan hal yang dilakukan pekerja, tetapi dengan logika khusus sepenuhnya.

Kamu akan mengatur kodemu ke dalam dua file:

  • worker.dart: Definisikan hierarki pekerjamu di sini:
    • Class Worker dengan property String name dan sebuah konstruktor. Sertakan method work() yang mencetak [name] is working... dan method takeBreak() yang mencetak [name] takes a coffee break
    • Class OfficeWorker yang extends Worker. Tambahkan property String department. Override work() agar mencetak [name] is typing reports in [department], tetapi pertahankan perilaku takeBreak() yang diwarisi
    • Class RobotWorker yang implements Worker. Tambahkan property String model. Karena robot sebenarnya bukan pekerja, tetapi bisa melakukan hal yang dilakukan pekerja, berikan implementasi khusus sepenuhnya: work() harus mencetak Robot [model] is assembling parts dan takeBreak() harus mencetak Robot [model] is recharging
  • main.dart: Impor file pekerjamu dan tunjukkan kedua pendekatan:
    • Buat OfficeWorker bernama 'Alice' di departemen 'Marketing'
    • Buat RobotWorker dengan model 'RX-7'
    • Untuk pekerja kantor, panggil work(), lalu takeBreak()
    • Cetak baris kosong
    • Untuk pekerja robot, panggil work(), lalu takeBreak()

Perhatikan bagaimana OfficeWorker mewarisi takeBreak() secara otomatis karena class ini me-extends Worker. Class ini benar-benar merupakan pekerja. Sementara itu, RobotWorker harus menyediakan implementasinya sendiri untuk semuanya karena class ini hanya meng-implements antarmuka. Class ini bisa melakukan hal yang dilakukan pekerja, tetapi dengan caranya sendiri sebagai robot.

Output yang diharapkan:

Alice is typing reports in Marketing
Alice takes a coffee break

Robot RX-7 is assembling parts
Robot RX-7 is recharging

Coba sendiri

import 'worker.dart';

void main() {
  // TODO: Buat OfficeWorker bernama 'Alice' di departemen 'Marketing'
  
  // TODO: Buat RobotWorker dengan model 'RX-7'
  
  // TODO: Untuk pekerja kantor, panggil work() lalu takeBreak()
  
  // TODO: Cetak baris kosong
  
  // TODO: Untuk pekerja robot, panggil work() lalu takeBreak()
}
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