Mahasiswa mampu menggabungkan seluruh konsep OOP yang telah dipelajari (Class, Inheritance, Polymorphism, Encapsulation, Interface) ke dalam satu arsitektur sistem yang utuh.
Mahasiswa memahami alur pemikiran System Design sederhana dari requirement menjadi bentuk kode.
Mahasiswa mampu menerapkan prinsip SOLID dalam skala project nyata.
Skenario: "TechStore E-Commerce"
Kita diminta membangun *backend logic* untuk sebuah toko online dengan spesifikasi berikut:
Requirement (Kebutuhan Sistem)
Toko menjual 2 jenis produk: Produk Fisik (butuh biaya ongkir berdasarkan berat) dan Produk Digital (tidak butuh ongkir, butuh link download).
Pelanggan memiliki sebuah Keranjang (Cart) untuk menampung banyak produk sekaligus.
Sistem harus mendukung berbagai Metode Pembayaran (Transfer Bank, E-Wallet) tanpa perlu merombak class Cart jika ada metode pembayaran baru di masa depan.
Konsep yang akan dipakai: Abstract Class (untuk Produk), Inheritance (Fisik & Digital), Aggregation (Cart memiliki Produk), dan Interface (Pembayaran).
Tahap 1: Abstraksi Produk
Karena Produk Fisik dan Digital memiliki kesamaan (nama dan harga pokok), kita buat sebuah Abstract Class sebagai fondasi.
// Class induk yang tidak bisa di-instansiasi langsungabstract classProduct {
protected$nama;
protected$harga;
public function__construct($nama, $harga) {
$this->nama = $nama;
$this->harga = $harga;
}
public functiongetNama() { return$this->nama; }
// Abstract method: Setiap anak WAJIB menentukan cara hitung total harganyaabstract public functionhitungTotalHarga();
}
Tahap 2: Inheritance (Pewarisan)
Kita wujudkan produk spesifiknya. Perhatikan penerapan Polymorphism pada metode hitungTotalHarga().
// Produk Fisik: Harga ditambah ongkir (Rp 10.000 / kg)classPhysicalProductextendsProduct {
private$beratKg;
public function__construct($nama, $harga, $beratKg) {
parent::__construct($nama, $harga);
$this->beratKg = $beratKg;
}
public functionhitungTotalHarga() {
$ongkir = $this->beratKg * 10000;
return$this->harga + $ongkir;
}
}
// Produk Digital: Harga tetap, tidak ada ongkirclassDigitalProductextendsProduct {
public functionhitungTotalHarga() {
return$this->harga;
}
}
Tahap 3: Interface Pembayaran
Menerapkan prinsip OCP (Open/Closed) dan Dependency Inversion. Kita buat kontrak pembayaran.
interfacePaymentGateway {
public functionprosesPembayaran($totalAmount);
}
classBankTransferimplementsPaymentGateway {
public functionprosesPembayaran($amount) {
echo"Memproses Rp {$amount} via Transfer Bank BCA...";
}
}
classEWalletimplementsPaymentGateway {
public functionprosesPembayaran($amount) {
echo"Memproses Rp {$amount} via GoPay/OVO...";
}
}
Tahap 4: Cart & Agregasi
Keranjang belanja yang menampung produk (Agregasi) dan memanggil sistem pembayaran (Dependency).
classCart {
private$items = [];
// Type Hinting Polymorphism: Terima produk jenis apa saja!public functiontambahProduk(Product $produk) {
$this->items[] = $produk;
}
public functioncheckout(PaymentGateway $paymentMethod) {
$totalTagihan = 0;
foreach ($this->items as$item) {
$totalTagihan += $item->hitungTotalHarga();
}
// Eksekusi antarmuka pembayaran$paymentMethod->prosesPembayaran($totalTagihan);
$this->items = []; // Kosongkan keranjang
}
}
Simulasi: TechStore Beraksi
Klik tombol di bawah untuk melihat output "Console" jika kode PHP di atas kita jalankan.
$php techstore_app.php [Menunggu aksi user...]
Kesimpulan & Penutup OOP
Selamat! Anda telah menyelesaikan seluruh materi dasar Object-Oriented Programming (OOP) menggunakan PHP. Melalui studi kasus ini, kita melihat bahwa OOP bukan sekadar menulis "Class", melainkan:
Membagi sistem besar menjadi objek-objek kecil yang cerdas.
Menyembunyikan kerumitan di dalam method (Encapsulation).
Mendaur ulang kode yang sama (Inheritance).
Berkomunikasi fleksibel menggunakan kontrak (Polymorphism & Interfaces).
"Good architecture is about hiding details. OOP provides the tools to hide them."