🎯 📗 Bagian 1 (Fundamental & Dasar) • Modul 07 100% Standar Industri & Vokasi

OOP Lanjutan: Inheritance, Interface & Mixin

Modul pembelajaran OOP Lanjutan: Inheritance, Interface & Mixin.

⚡ Pemrograman DART

09. OOP Lanjutan: Inheritance, Interface & Mixin

1. Pewarisan (Inheritance: extends & super)

Pewarisan memungkinkan sebuah Subclass mewarisi properti dan method dari Superclass induknya:

class PerangkatJaringan {
  String merk;
  String model;

  PerangkatJaringan(this.merk, this.model);

  void reboot() {
    print("Mereset perangkat $merk $model...");
  }
}

// Subclass Router mewarisi PerangkatJaringan
class Router extends PerangkatJaringan {
  int jumlahPort;

  Router(String merk, String model, this.jumlahPort) : super(merk, model);

  @override
  void reboot() {
    print("Menyimpan tabel routing sebelum reboot...");
    super.reboot(); // Memanggil method induk
  }
}

2. Abstract Class & Implicit Interfaces (implements)

Setiap class di Dart secara implisit mendefinisikan sebuah Interface. Sebuah class dapat mengimplementasikan banyak interface sekaligus:

abstract class ProtokolKeamanan {
  void enkripsiData(String data);
  String dekripsiData(String hash);
}

class TLSProtokol implements ProtokolKeamanan {
  @override
  void enkripsiData(String data) {
    print("Mengenkripsi data dengan TLS 1.3...");
  }

  @override
  String dekripsiData(String hash) {
    return "Data Plaintext Terverifikasi";
  }
}

3. Mixin (Komposisi Logika Reusable dengan keyword 'with')

Mixin adalah cara untuk mendefinisikan kode dan fungsi yang dapat digunakan kembali oleh banyak kelas tanpa perlu membuat hierarki pewarisan bertingkat yang kaku:

mixin LoggerMixin {
  void logInfo(String pesan) {
    print("[LOG - ${DateTime.now()}]: $pesan");
  }
}

mixin ValidasiInputMixin {
  bool isValidEmail(String email) => email.contains('@');
}

// Menggabungkan Mixin ke dalam Class
class UserService with LoggerMixin, ValidasiInputMixin {
  void daftarkanUser(String email) {
    if (isValidEmail(email)) {
      logInfo("User $email berhasil didaftarkan.");
    } else {
      logInfo("Pendaftaran gagal: Format email salah!");
    }
  }
}