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
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
Siswaadalah cetakan (ditulis sekali) - Object
s1dans2adalah hasil cetakan (bisa banyak) - Property
nama,umurmenyimpan 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:
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:
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
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.