Dart Interface Classes

Dalam Dart, untuk mebuat calss interface dalam dart kita bisa mengunakan kata kunci interface. Meskipun pada dart, setiap class secara implisit adalah sebuah interface. Ini berarti kita dapat menggunakan kata kunci implements pada sebuah class untuk mengimplementasikan interface dari class lain.

  • Ketika sebuah class mengimplementasikan sebuah interface, ia harus menyediakan implementasi (body) untuk semua properti dan method dari interface tersebut.
  • Ini berguna untuk memastikan sebuah class memenuhi “kontrak” tertentu, tanpa perlu mewarisi implementasinya.

Buat file dengan nama InterfaceClass.dart

interface class vehicle {
  void startEngine() {
    print("Engine started");
  }

  void stopEngine() {
    print("Engine stopped");
  }
}

// Extending the interface class
class Car extends vehicle {
  @override
  void startEngine() {
    super.startEngine();
  }

  @override
  void stopEngine() {
    super.stopEngine();
  }
}

// Another class implementing the interface class
class Bike implements vehicle {
  @override
  void startEngine() {
    print("Bike engine started");
  }

  @override
  void stopEngine() {
    print("Bike engine stopped");
  }
}

// Main function to demonstrate the usage
void main() {
  print("Interface Class Extends:");
  var myCar = Car();
  myCar.startEngine();
  myCar.stopEngine();

  print("Interface Class Implements:");
  var myBike = Bike();
  myBike.startEngine();
  myBike.stopEngine();
}

Contoh Output:

$ dart run InterfaceClass.dart
Interface Class Extends:
Engine started
Engine stopped
Interface Class Implements:
Bike engine started
Bike engine stopped

Penjelasan Kode: Interface Class di Dart

1. Interface Class vehicle

interface class vehicle {
  void startEngine() {
    print("Engine started");
  }

  void stopEngine() {
    print("Engine stopped");
  }
}
  • interface class adalah fitur baru di Dart yang memungkinkan sebuah class hanya bisa di-extend atau di-implement oleh class lain, tapi tidak bisa di-instansiasi langsung.
  • Pada contoh di atas, vehicle mendefinisikan dua method: startEngine() dan stopEngine(), yang masing-masing mencetak pesan ke konsol.

2. Extending Interface Class: Car

class Car extends vehicle {
  @override
  void startEngine() {
    super.startEngine();
  }

  @override
  void stopEngine() {
    super.stopEngine();
  }
}
  • Car adalah class yang mewarisi (extends) dari vehicle.
  • Method startEngine() dan stopEngine() di-override untuk menunjukkan bahwa class turunan bisa mengubah atau menambah perilaku dari method parent-nya.
  • Pada contoh ini, method hanya memanggil method dari parent (super.startEngine()), tapi bisa dikembangkan sesuai kebutuhan.

3. Implementasi Lain: Bike

class Bike extends vehicle {
  @override
  void startEngine() {
    super.startEngine();
  }

  @override
  void stopEngine() {
    super.stopEngine();
  }
}

Bike juga mewarisi dari vehicle dan meng-override kedua method dengan cara yang sama seperti Car.

4. Fungsi Main

void main() {
  var myCar = Car();
  myCar.startEngine();
  myCar.stopEngine();

  var myBike = Bike();
  myBike.startEngine();
  myBike.stopEngine();
}
  • Pada fungsi main, objek Car dan Bike dibuat.
  • Setiap objek memanggil method startEngine() dan stopEngine(), sehingga akan mencetak pesan ke konsol.

Kesimpulan

  • interface class di Dart sangat berguna untuk membuat kontrak perilaku yang harus diikuti oleh class turunan.
  • Tidak bisa membuat objek langsung dari vehicle, tapi bisa membuat objek dari class turunannya (CarBike).
  • Cocok digunakan untuk arsitektur aplikasi yang membutuhkan konsistensi perilaku pada beberapa class turunan.

Sample source code bisa di download di github pada link berikut dart-tutorial

hyvercode