"Membangun Sistem E-Commerce Mini"
Object-Oriented Programming (OOP) PHP
Pertemuan 14
Kita diminta membangun *backend logic* untuk sebuah toko online dengan spesifikasi berikut:
Konsep yang akan dipakai: Abstract Class (untuk Produk), Inheritance (Fisik & Digital), Aggregation (Cart memiliki Produk), dan Interface (Pembayaran).
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 langsung abstract class Product { protected $nama; protected $harga; public function __construct($nama, $harga) { $this->nama = $nama; $this->harga = $harga; } public function getNama() { return $this->nama; } // Abstract method: Setiap anak WAJIB menentukan cara hitung total harganya abstract public function hitungTotalHarga(); }
Kita wujudkan produk spesifiknya. Perhatikan penerapan Polymorphism pada metode hitungTotalHarga().
// Produk Fisik: Harga ditambah ongkir (Rp 10.000 / kg) class PhysicalProduct extends Product { private $beratKg; public function __construct($nama, $harga, $beratKg) { parent::__construct($nama, $harga); $this->beratKg = $beratKg; } public function hitungTotalHarga() { $ongkir = $this->beratKg * 10000; return $this->harga + $ongkir; } } // Produk Digital: Harga tetap, tidak ada ongkir class DigitalProduct extends Product { public function hitungTotalHarga() { return $this->harga; } }
Menerapkan prinsip OCP (Open/Closed) dan Dependency Inversion. Kita buat kontrak pembayaran.
interface PaymentGateway { public function prosesPembayaran($totalAmount); } class BankTransfer implements PaymentGateway { public function prosesPembayaran($amount) { echo "Memproses Rp {$amount} via Transfer Bank BCA..."; } } class EWallet implements PaymentGateway { public function prosesPembayaran($amount) { echo "Memproses Rp {$amount} via GoPay/OVO..."; } }
Keranjang belanja yang menampung produk (Agregasi) dan memanggil sistem pembayaran (Dependency).
class Cart { private $items = []; // Type Hinting Polymorphism: Terima produk jenis apa saja! public function tambahProduk(Product $produk) { $this->items[] = $produk; } public function checkout(PaymentGateway $paymentMethod) { $totalTagihan = 0; foreach ($this->items as $item) { $totalTagihan += $item->hitungTotalHarga(); } // Eksekusi antarmuka pembayaran $paymentMethod->prosesPembayaran($totalTagihan); $this->items = []; // Kosongkan keranjang } }
Klik tombol di bawah untuk melihat output "Console" jika kode PHP di atas kita jalankan.
// Inisialisasi Keranjang $cart = new Cart(); // Menambah Produk (Polymorphism) $cart->tambahProduk(new PhysicalProduct('Laptop', 5000000, 3)); $cart->tambahProduk(new DigitalProduct('E-Book', 150000)); // Checkout dengan metode berbeda (Dependency Injection) $cart->checkout(new BankTransfer()); // $cart->checkout(new EWallet());
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:
"Good architecture is about hiding details. OOP provides the tools to hide them."