Menu
CoddyTech

Mixin vs. Pewarisan

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

Sekarang setelah kamu mempelajari cara kerja mixin, mari kita perjelas kapan menggunakannya alih-alih pewarisan. Perbedaan utamanya terletak pada hubungan yang dinyatakannya.

Inheritance menggambarkan hubungan "is-a". Dog adalah Animal. Subclass adalah versi khusus dari parent, dan kamu hanya dapat mewarisi satu class.

Mixin, di sisi lain, menggambarkan hubungan "bisa melakukan". Dog bisa berenang, tetapi berenang bukanlah hal yang mendefinisikan seekor anjing.

// Pewarisan: Dog ADALAH Animal
class Animal {
  String name;
  Animal(this.name);
}

class Dog extends Animal {
  Dog(String name) : super(name);
}

// Mixin: Dog BISA berenang (tetapi berenang bukan ciri yang mendefinisikannya)
mixin Swimming {
  void swim() => print('Swimming');
}

class Dog extends Animal with Swimming {
  Dog(String name) : super(name);
}

Gunakan pewarisan saat beberapa class memiliki identitas dasar yang sama dan kamu memerlukan konstruktor di parent. Gunakan mixin saat kamu ingin menambahkan kemampuan ke class yang tidak memiliki leluhur yang sama.

FiturPewarisanMixin
Hubunganadalahdapat melakukan
BatasanHanya satu indukBeberapa mixin
KonstruktorDiizinkanTidak diizinkan
Kasus penggunaanSpesialisasiPerilaku bersama

Bagian terbaiknya? Kamu bisa menggabungkan keduanya: mewarisi satu class dan mencampurkan beberapa kemampuan, sehingga class-mu memiliki fitur yang benar-benar dibutuhkan.

challenge icon

Tantangan

Mudah

Mari buat sistem pekerja yang menunjukkan kapan sebaiknya menggunakan inheritance dibandingkan mixin. Kamu akan membuat class dasar untuk hubungan "is-a" dan mixin untuk kemampuan "can-do", lalu menggabungkan keduanya untuk menunjukkan cara kedua pendekatan ini bekerja bersama.

Kamu akan mengatur kodemu ke dalam tiga file:

  • worker.dart: Definisikan class dasar yang menetapkan identitas inti semua pekerja:
    • Class Worker dengan property String name dan String department. Sertakan constructor yang menerima kedua nilai tersebut. Tambahkan method introduce() yang mencetak [name] works in [department]
  • skills.dart: Definisikan mixin yang mewakili kemampuan yang dapat dimiliki pekerja (hubungan "can-do"):
    • Mixin CanCode dengan method writeCode() yang mencetak Writing code...
    • Mixin CanDesign dengan method createDesign() yang mencetak Creating design...
    • Mixin CanManage dengan method leadTeam() yang mencetak Leading the team...
  • main.dart: Impor kedua file dan buat tipe pekerja khusus yang menggabungkan inheritance dengan mixin:
    • Class Developer yang memperluas Worker dan menggunakan mixin CanCode
    • Class TechLead yang memperluas Worker dan menggunakan mixin CanCode serta CanManage
    • Buat Developer bernama 'Alice' di departemen 'Engineering'
    • Buat TechLead bernama 'Bob' di departemen 'Engineering'
    • Untuk Alice: panggil introduce(), lalu writeCode()
    • Cetak satu baris kosong
    • Untuk Bob: panggil introduce(), lalu writeCode(), kemudian leadTeam()

Perhatikan bahwa Developer dan TechLead sama-sama merupakan pekerja (inheritance), tetapi mereka dapat melakukan hal yang berbeda (mixin). TechLead menggabungkan beberapa kemampuan tanpa memerlukan multiple inheritance.

Output yang diharapkan:

Alice works in Engineering
Writing code...

Bob works in Engineering
Writing code...
Leading the team...

Coba sendiri

import 'worker.dart';
import 'skills.dart';

// TODO: Buat class Developer yang mewarisi Worker dan menggunakan mixin CanCode

// TODO: Buat class TechLead yang mewarisi Worker dan menggunakan mixin CanCode serta CanManage

void main() {
  // TODO: Buat Developer bernama 'Alice' di departemen 'Engineering'
  
  // TODO: Panggil introduce(), lalu writeCode() untuk Alice
  
  // TODO: Cetak baris kosong
  
  // TODO: Buat TechLead bernama 'Bob' di departemen 'Engineering'
  
  // TODO: Panggil introduce(), writeCode(), lalu leadTeam() untuk Bob
}
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