Studi Kasus Aplikasi OOP

"Membangun Sistem E-Commerce Mini"

Object-Oriented Programming (OOP) PHP

Pertemuan 14

Tujuan Pembelajaran

  • 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)
  1. Toko menjual 2 jenis produk: Produk Fisik (butuh biaya ongkir berdasarkan berat) dan Produk Digital (tidak butuh ongkir, butuh link download).
  2. Pelanggan memiliki sebuah Keranjang (Cart) untuk menampung banyak produk sekaligus.
  3. 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 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(); }

Tahap 2: Inheritance (Pewarisan)

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; } }

Tahap 3: Interface Pembayaran

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..."; } }

Tahap 4: Cart & Agregasi

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 } }

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."