1. Konsep Dasar Class & Object
Class adalah cetak biru (blueprint) yang mendefinisikan atribut (properties) dan perilaku (methods). Object adalah instance nyata yang dibentuk dari class tersebut.
class Server {
// Properties
String hostname;
String ipAddress;
int ramGb;
bool isOnline;
// Generative Constructor dengan Initializing Formals (this.prop)
Server({
required this.hostname,
required this.ipAddress,
this.ramGb = 16,
this.isOnline = false,
});
// Method
void nyalakan() {
isOnline = true;
print("Server $hostname ($ipAddress) BERHASIL dinyalakan!");
}
}
void main() {
// Membuat Object Instance
var srv1 = Server(hostname: "web-prod-01", ipAddress: "10.0.0.15", ramGb: 32);
srv1.nyalakan();
}
2. Named Constructor & Factory Constructor
Dart mendukung Named Constructor untuk membuat beberapa variasi pembuatan objek dalam satu kelas:
class Siswa {
String nama;
String kelas;
int nilai;
Siswa(this.nama, this.kelas, this.nilai);
// Named Constructor dari data Map (JSON)
Siswa.fromJson(Map<String, dynamic> json)
: nama = json['nama'],
kelas = json['kelas'],
nilai = json['nilai'];
}
3. Enkapsulasi (Private Properties _), Getter & Setter
Di Dart, variabel atau method yang diawali dengan tanda garis bawah (_) bersifat Private pada level library/file.
class AkunBank {
final String nomorRekening;
double _saldo = 0.0; // Private property
AkunBank(this.nomorRekening, double saldoAwal) {
_saldo = saldoAwal;
}
// Getter
double get saldo => _saldo;
// Setter dengan validasi
set saldo(double nilaiBaru) {
if (nilaiBaru >= 0) {
_saldo = nilaiBaru;
} else {
print("Error: Saldo tidak boleh bernilai negatif!");
}
}
}