Mahasiswa memahami bahwa dalam dunia nyata, satu objek tunggal tidak bisa bekerja sendirian. Objek harus berinteraksi.
Mahasiswa dapat membedakan 4 jenis relasi utama: Dependency, Association, Aggregation, dan Composition.
Mahasiswa mampu mengimplementasikan relasi antar objek dalam kode PHP, terutama perbedaan antara "Has-A" (Agregasi) dan "Has-A" yang mutlak (Komposisi).
Analogi Dunia Nyata
Sejauh ini, kita hanya membuat objek yang berdiri sendiri (seperti $mahasiswa = new Mahasiswa()). Namun, sistem perangkat lunak yang kompleks adalah kumpulan objek yang saling mengobrol dan terhubung.
Contoh Kasus Sistem Kampus
Di sebuah Universitas, terdapat entitas: Mahasiswa, Dosen, Jurusan, Ruang Kelas, dan Mata Kuliah.
Apakah Mahasiswa adalah bagian dari Jurusan?
Apakah Dosen hanya berinteraksi dengan Mahasiswa?
Jika gedung Kampus digusur (dihancurkan), apakah Ruang Kelas ikut hancur? Bagaimana dengan Dosennya, apakah ikut hancur/mati?
Jawaban dari pertanyaan "Keterikatan Takdir" inilah yang mendefinisikan jenis Relasi OOP.
1. Dependency (Ketergantungan Sesaat)
Hubungan paling lemah. Objek A "menggunakan" Objek B (Uses-A) hanya untuk sementara waktu, biasanya dimasukkan lewat argumen/parameter fungsi.
// Class Printer bisa mencetak apapunclassPrinter {
public functioncetak($teks) { echo"Mencetak: " . $teks; }
}
// Class Karyawan 'Bergantung' pada Printer secara sesaatclassKaryawan {
// Printer hanya lewat sebagai parameter (Dependency)public functionbuatLaporan(Printer $mesin, $isiLaporan) {
$mesin->cetak($isiLaporan);
}
}
2. Association (Asosiasi)
Hubungan struktural antara dua class yang berdiri sejajar. Keduanya saling mengenal, tetapi memiliki siklus hidup sendiri-sendiri (tidak ada yang mengatur "hidup-matinya" objek lain).
classDokter {
public$nama;
public functionperiksa(Pasien $pasien) {
echo"Dokter " . $this->nama . " memeriksa " . $pasien->nama;
}
}
classPasien {
public$nama;
}
// Keduanya diciptakan terpisah. Jika Dokter berhenti bekerja, Pasien tetap hidup.$drAndi = new Dokter();
$pasienBudi = new Pasien();
3. Aggregation (Agregasi)
Hubungan "Has-A" (Memiliki) yang lemah. Objek B adalah bagian dari Objek A, TAPI jika Objek A dihancurkan, Objek B tetap bisa hidup dan dipindahkan ke tempat lain.
// Contoh: Perpustakaan MEMILIKI Buku.classPerpustakaan {
private$koleksiBuku = [];
// Buku dimasukkan DARI LUAR (Injection)public functiontambahBuku(Buku $bukuBaru) {
$this->koleksiBuku[] = $bukuBaru;
}
}
$bukuPHP = new Buku("Belajar OOP");
$perpusKota = new Perpustakaan();
$perpusKota->tambahBuku($bukuPHP);
// Jika $perpusKota bangkrut dan dihapus, $bukuPHP masih ada bentuk fisiknya!
4. Composition (Komposisi)
Hubungan "Has-A" yang KUAT (Takdir Kematian). Objek B adalah bagian dari Objek A, dan jika Objek A mati, Objek B WAJIB ikut mati/hancur.
// Contoh: Mobil MEMILIKI Mesin.classMobil {
private$mesin;
public function__construct() {
// Objek Mesin diciptakan DI DALAM objek Mobil$this->mesin = new Mesin();
}
public function__destruct() {
// Jika Mobil dihapus dari memori, Mesin otomatis musnah
}
}
$mobilSport = new Mobil();
// Kita tidak bisa meminjam atau mengeluarkan Mesin dari Mobil tersebut.
Simulasi: Agregasi vs Komposisi
Mari kita lihat bedanya perlakuan "Penghancuran Objek Induk" pada Agregasi (Perpustakaan & Buku) dan Komposisi (Mobil & Mesin).
Pilih simulasi untuk melihat siklus hidup objek...
Kesimpulan
Memahami Relasi Antar Objek membantu kita membuat sistem yang masuk akal dan efisien di memori.
Gunakan Dependency untuk objek sekali pakai (alat).
Gunakan Association untuk objek yang sederajat.
Gunakan Aggregation jika objek anak bisa dimasukkan dari luar dan tetap berguna jika dipindahkan.
Gunakan Composition hanya jika objek anak mutlak tercipta bersama dan mati bersama induknya.