Relasi Antar Objek

"Membangun Sistem Lewat Kolaborasi Class"

Object-Oriented Programming (OOP) PHP

Pertemuan 12

Tujuan Pembelajaran

  • 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 apapun class Printer { public function cetak($teks) { echo "Mencetak: " . $teks; } } // Class Karyawan 'Bergantung' pada Printer secara sesaat class Karyawan { // Printer hanya lewat sebagai parameter (Dependency) public function buatLaporan(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).

class Dokter { public $nama; public function periksa(Pasien $pasien) { echo "Dokter " . $this->nama . " memeriksa " . $pasien->nama; } } class Pasien { 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. class Perpustakaan { private $koleksiBuku = []; // Buku dimasukkan DARI LUAR (Injection) public function tambahBuku(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. class Mobil { 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.