1. Pengantar Abstraction
Dalam Pemrograman Berorientasi Objek (Object Oriented Programming / OOP), Abstraction adalah salah satu dari empat pilar utama OOP, yaitu:
- Encapsulation
- Inheritance
- Polymorphism
- Abstraction
Abstraction berfokus pada:
- Menampilkan hal-hal penting saja kepada pengguna
- Menyembunyikan detail implementasi yang tidak perlu diketahui
π Dengan abstraction, pengguna class tahu apa yang bisa dilakukan, tetapi tidak perlu tahu bagaimana cara kerjanya.
2. Analogi Sederhana Abstraction
Bayangkan kita mengendarai mobil:
- Kita hanya tahu pedal gas, rem, dan setir
- Kita tidak perlu tahu detail mesin, pembakaran, atau sistem transmisi
π Inilah konsep abstraction: pengguna fokus pada fungsi, bukan mekanisme internal.
3. Abstraction dalam PHP
Dalam PHP, abstraction dapat diterapkan menggunakan:
- Abstract Class
- Interface
Perbedaan utamanya:
- Abstract class: bisa memiliki method dengan isi dan tanpa isi
- Interface: hanya berisi deklarasi method (tanpa isi)
4. Abstract Class dalam PHP
4.1 Pengertian Abstract Class
Abstract class adalah class yang:
- Tidak dapat diinstansiasi secara langsung
- Digunakan sebagai kerangka (template) bagi class turunan
π Abstract class biasanya berisi:
- Abstract method (tanpa isi)
- Method biasa (dengan isi)
4.2 Contoh Abstract Class
abstract class Kendaraan {
protected $merk;
public function setMerk($merk) {
$this->merk = $merk;
}
abstract public function bergerak();
}
4.3 Class Turunan dari Abstract Class
class Mobil extends Kendaraan {
public function bergerak() {
return “Mobil bergerak di jalan”;
}
}
class Motor extends Kendaraan {
public function bergerak() {
return “Motor bergerak dengan dua roda”;
}
}
4.4 Penggunaan Abstract Class
$mobil = new Mobil();
$mobil->setMerk(“Toyota”);
echo $mobil->bergerak();
$motor = new Motor();
$motor->setMerk(“Honda”);
echo $motor->bergerak();
β
Setiap class turunan wajib mengimplementasikan method bergerak().
5. Interface dalam PHP
5.1 Pengertian Interface
Interface adalah kontrak yang menyatakan apa saja method yang harus dimiliki oleh class yang mengimplementasikannya.
π Interface:
- Tidak memiliki property
- Semua method bersifat abstract dan public
5.2 Contoh Interface
interface Pembayaran {
public function prosesPembayaran();
}
5.3 Implementasi Interface
class TransferBank implements Pembayaran {
public function prosesPembayaran() {
return “Pembayaran melalui transfer bank”;
}
}
class EWallet implements Pembayaran {
public function prosesPembayaran() {
return “Pembayaran melalui e-wallet”;
}
}
5.4 Penggunaan Interface
function bayar(Pembayaran $pembayaran) {
echo $pembayaran->prosesPembayaran();
}
bayar(new TransferBank());
bayar(new EWallet());
π Pengguna fungsi tidak perlu tahu jenis pembayaran, cukup tahu method yang tersedia.
6. Perbedaan Abstract Class dan Interface
| Abstract Class | Interface |
|---|---|
| Bisa punya property | Tidak punya property |
| Bisa punya method dengan isi | Method tanpa isi |
| Satu class hanya bisa extend satu abstract class | Bisa implement banyak interface |
7. Hubungan Abstraction dengan Polymorphism
Abstraction sering digunakan bersama polymorphism:
- Abstract class / interface sebagai tipe data
- Class konkret sebagai implementasi
π Ini membuat program fleksibel dan mudah dikembangkan.
8. Manfaat Abstraction
- Menyederhanakan kompleksitas
- Kode lebih rapi dan terstruktur
- Mudah dikembangkan
- Mendukung prinsip SOLID (Dependency Inversion)
- Memudahkan kerja tim
9. Kesalahan Umum Mahasiswa
β Mengira abstract class bisa diinstansiasi β Tidak mengimplementasikan semua abstract method β Bingung membedakan abstract class dan interface
10. Studi Kasus Sederhana
Kasus: Sistem Login
abstract class Login {
abstract public function autentikasi();
}
class LoginAdmin extends Login {
public function autentikasi() {
return “Login sebagai Admin”;
}
}
class LoginUser extends Login {
public function autentikasi() {
return “Login sebagai User”;
}
}
function prosesLogin(Login $login) {
echo $login->autentikasi();
}
prosesLogin(new LoginAdmin());
prosesLogin(new LoginUser());
11. Ringkasan Materi
- Abstraction menyembunyikan detail implementasi
- Menggunakan abstract class dan interface
- Fokus pada apa yang dilakukan, bukan bagaimana caranya
12. Pertanyaan Diskusi
- Mengapa abstraction penting dalam pengembangan software?
- Kapan sebaiknya menggunakan interface dibanding abstract class?
- Apa hubungan abstraction dengan maintainability kode?