โ Kembali ke Konsep OOP
๐ญ
Pilar
Abstraction (Abstraksi)
Menyembunyikan detail implementasi yang rumit di balik interface yang sederhana dan jelas, hanya menampilkan yang dibutuhkan pemanggil.
Masalahnya
Tanpa abstraksi, pemanggil harus memahami dan bergantung pada setiap detail implementasi sebuah sistem. Kode jadi lebih sulit dipakai, diubah, dan dites, serta implementasinya tidak mungkin ditukar.
Cara Kerja
- โบAbstract class/protocol/interface menjelaskan *apa* yang dilakukan objek, bukan *bagaimana*
- โบImplementasi konkret mengisi bagian "bagaimana" di balik abstraksi
- โบPemanggil memprogram terhadap abstraksi, sehingga implementasinya bisa ditukar
- โบMengurangi beban pikiran dengan hanya menampilkan operasi yang relevan
Kapan Digunakan
โMerancang API publik atau library
โMendukung beberapa implementasi di balik satu interface (misalnya penyedia pembayaran)
โMengisolasi subsistem yang sering berubah di balik batas yang stabil
Contoh di Dunia Nyata
๐
iOS
Protocol seperti Codable dan Equatable menyembunyikan detail conformance dari pemanggil
๐ค
Android
Interface Repository menyembunyikan apakah data berasal dari Room atau panggilan jaringan
๐
Web
Interface Storage yang mengabstraksi localStorage, sessionStorage, atau IndexedDB
Contoh Kode
Swift
protocol PaymentProcessor {
func pay(amount: Double)
}
class CreditCardProcessor: PaymentProcessor {
func pay(amount: Double) {
print("Charging $\(amount) to credit card")
}
}
class PayPalProcessor: PaymentProcessor {
func pay(amount: Double) {
print("Sending $\(amount) via PayPal")
}
}
func checkout(amount: Double, processor: PaymentProcessor) {
processor.pay(amount: amount)
}
checkout(amount: 49.99, processor: PayPalProcessor())