oopclassobjectMenengah5 mnt baca

OOP: Class dan Object

Memahami class sebagai cetakan dan object sebagai hasilnya, plus method dan property.

Dari data ke object

Sejauh ini data kita tersebar: nama, umur, kota sebagai variabel lepas atau map. OOP (Object-Oriented Programming) menggabungkan data dan perilaku jadi satu kesatuan bernama object, yang dibuat dari class (cetakan).

Class pertama

dart
class Siswa {
  String nama = '';
  int umur = 0;

  void perkenalkan() {
    print('Halo, saya $nama, umur $umur tahun.');
  }
}

void main() {
  var s1 = Siswa();
  s1.nama = 'Rizky';
  s1.umur = 17;
  s1.perkenalkan(); // Halo, saya Rizky, umur 17 tahun.

  var s2 = Siswa();
  s2.nama = 'Sinta';
  s2.umur = 20;
  s2.perkenalkan();
}
  • Class Siswa adalah cetakan (ditulis sekali)
  • Object s1 dan s2 adalah hasil cetakan (bisa banyak)
  • Property nama, umur menyimpan data tiap object
  • Method perkenalkan() adalah fungsi milik class

Setiap object punya salinan datanya sendiri: mengubah s1.nama tidak memengaruhi s2.nama.

Property dengan getter dan setter

Kadang kita ingin kontrol saat property dibaca atau diubah:

dart
class Lingkaran {
  double _jariJari = 0; // underscore = private

  double get jariJari => _jariJari;

  set jariJari(double nilai) {
    if (nilai > 0) {
      _jariJari = nilai;
    } else {
      print('Jari-jari harus positif!');
    }
  }

  double get luas => 3.14 * _jariJari * _jariJari;
}

void main() {
  var l = Lingkaran();
  l.jariJari = 10;      // pakai setter
  print(l.luas);        // 314.0, pakai getter
  l.jariJari = -5;      // ditolak setter
}

Property yang diawali underscore (_jariJari) bersifat private: hanya bisa diakses dari file yang sama. Ini namanya encapsulation, melindungi data dari diubah sembarangan.

Catatan teknis: Di Dart, private itu per file (library), bukan per class. Artinya kode lain di file yang sama tetap bisa akses _jariJari. Kalau mau benar-benar terisolasi, taruh class di file tersendiri. Ini beda dengan Java/C# yang privatenya per class.

Method bisa pakai this

Kata kunci this merujuk ke object yang sedang berjalan:

dart
class Akun {
  String nama = '';

  void gantiNama(String nama) {
    this.nama = nama; // this.nama = property, nama = parameter
  }
}

void main() {
  var a = Akun();
  a.gantiNama('Rizky');
  print(a.nama);
}

Tanpa this, parameter nama akan menutupi (shadowing) property nama.

Kenapa OOP penting buat Flutter?

Hampir semua di Flutter adalah object: setiap widget adalah instance dari class Widget, setiap tombol adalah object. Memahami class, property, dan method di Dart murni membuat transisi ke Flutter jauh lebih mulus, karena polanya persis sama.

Latihan: class Buku

dart
class Buku {
  String judul = '';
  String penulis = '';
  int halaman = 0;

  void info() {
    print('"$judul" oleh $penulis ($halaman hlm)');
  }

  bool isTebal() => halaman > 300;
}

void main() {
  var b = Buku();
  b.judul = 'Dart untuk Pemula';
  b.penulis = 'Anonim';
  b.halaman = 450;
  b.info();
  print('Tebal? ${b.isTebal()}');
}

Coba tambah property tahunTerbit dan method umurBuku() yang menghitung selisih dengan tahun sekarang.