img-dart
#dart #flutter

OOP (Object Oriented Programming)

Dart adalah bahasa pemrograman berorientasi objek yang mendukung semua konsep OOP utama. Berikut penjelasan lengkap dengan contoh praktis:

1. Class & Object

Class adalah blueprint untuk membuat object.

Blueprint adalah cetakan atau rancangan awal untuk membuat objek. Dalam OOP, class adalah blueprint yang mendefinisikan properti (data) dan method (perilaku) yang akan dimiliki oleh objek. Objek dibuat berdasarkan blueprint ini.


void main(){
  // membuat object dari class Mobil
  var mobil1 = Mobil();
  mobil1.brand = "Tesla";
  print(mobil1.brand); // Output: "Tesla"
  mobil1.klakson(); // Output: "tin tin
}

class Mobile {
  /** property (variabel dalam class)
    * property tidak bisa jika tanpa nilai,
      jika ingin tanpa nilai maka harus dibuat null-safe.
      atau bisa juga gunakan late String brand.
      namun jika gunakan late maka variabel wajib diisi.
   */
  String? brand;

  // method (fungsi dalam class)
  void klakson() {
    print("tin tin");
  }
}

2. Constructor

Constructor adalah method khusus yang otomatis dipanggil saat pembuatan objek (instance) dari sebuah class. Fungsinya untuk menginisialisasi nilai awal dari properti class.

Kapan Menggunakan Constructor?

a. Constrictor dasar

class Mobil {
  String merk;
  int tahun;

  // Constructor
  Mobil(String merk, int tahun) {
    this.merk = merk;
    this.tahun = tahun;
  }
}

void main() {
  var mobilSaya = Mobil('Toyota', 2020);
  print('${mobilSaya.merk} - ${mobilSaya.tahun}'); // Output: Toyota - 2020
}

b. Shortcut Constructor (Recommended)

class Mobil {
  String merk;
  int tahun;

  // Constructor pendek
  Mobil(this.merk, this.tahun);
}
void main() {
  var mobilSaya = Mobil('Toyota', 2020);
  print('${mobilSaya.merk} - ${mobilSaya.tahun}'); // Output: Toyota - 2020
}

c. Named Constructor

class Mobil {
  String merk;
  int tahun;
  int? berat;
  // Constructor utama
  Mobil(this.merk, this.tahun, [this.berat = 0 ]);
  // Named Constructor
  Mobil.berat(this.merk, this.tahun, this.berat);
}
void main() {
  var mobilSaya = Mobil('Toyota', 2020);
  print('${mobilSaya.merk}: tahun ${mobilSaya.tahun}, berat ${mobilSaya.berat}kg');
  // Output: Toyota: tahun 2020, berat 0kg

  var mobilBerat = Mobil.berat('Honda', 2019, 100);
  print(
    "${namedConstructorBerat.merk}: tahun ${namedConstructorBerat.tahun}, berat ${namedConstructorBerat.berat}kg",
  );
  // Output: Honda: tahun 2019, berat 100kg
}

d. Constructor dengan Parameter Opsional

class OptionalParameterWithNamed {
  String name;
  int age;

  /**
    * required: wajib diisi
    * age = 0: nilai default karena optional
   */
  OptionalParameterWithNamed({required this.name, this.age = 0});

  void greet() {
    print("hi aku $name, dan umurku $age");
  }
}

void main() {
  var optionalParameterWithNamed = OptionalParameterWithNamed(name: "budi");
  optionalParameterWithNamed.greet();
  // Output: hi aku budi, dan umurku 0
}

class OptionalParameterWithPositional {
  String name;
  int age;

  OptionalParameterWithPositional(this.name, [this.age = 0]);

  void greet() {
    print("hi aku $name, dan umurku $age");
  }
}
void main() {
  var optionalParameterWithPositional = OptionalParameterWithPositional("budi");
  optionalParameterWithPositional.greet();
  // Output: hi aku budi, dan umurku 0
}

3. Inheritance (Pewarisan)

Pewarisan adalah konsep dasar dalam pemrograman berorientasi objek (OOP) yang memungkinkan sebuah class mewarisi properti dan method dari class lain. Di Dart, kita bisa mengimplementasikan pewarisan menggunakan kata kunci extends.

Konsep Penting dalam Inheritance (Pewarisan)

Catatan

class InheritParent {
  String nama;
  int umur;
  InheritParent(this.nama, this.umur);
  void greet() {
    print("hi aku $nama, dan umurku $umur");
  }
}

class InheritChild extends InheritParent {
  InheritChild(String nama, int umur) : super(nama, umur);
  @override
  void greet() {
    super.greet();
  }
}

void main() {
  var inheritChild = InheritChild("budi", 20);
  inheritChild.greet();
  // Output: hi aku budi, dan umurku 20
}