𝗔𝗯𝘀𝘁𝗿𝗮𝗸𝘀𝗶 𝗱𝗮𝗹𝗮𝗺 𝗢𝗢𝗣: 𝗠𝗲𝗻𝘆𝗲𝗺𝗯𝘂𝗻𝘆𝗶𝗸𝗮𝗻 𝗞𝗼𝗺𝗽𝗹𝗲𝗸𝘀𝗶𝘁𝗮𝘀

Anda mengendarai mobil dengan menginjak pedal dan memutar setir. Anda tidak perlu memahami injeksi bahan bakar atau pergerakan piston. Mobil menyembunyikan detail tersebut dari Anda. Anda hanya menggunakan antarmuka yang sederhana.

Perangkat lunak bekerja dengan cara yang sama.

Bayangkan saat mengirim email. Kode Anda kemungkinan besar terlihat seperti ini:

emailService.send(email);

Terlihat sederhana. Di balik layar, sistem melakukan banyak tugas:

Anda tidak perlu melihat langkah-langkah ini. Anda hanya peduli bahwa email tersebut terkirim.

Jika Anda mengekspos setiap langkah, Anda akan menciptakan masalah. Bayangkan jika setiap pengembang harus memanggil secara manual:

Ini membuat kode Anda rapuh. Jika Anda mengganti penyedia email, Anda harus memperbarui setiap bagian di aplikasi Anda. Kode Anda menjadi terikat erat (tightly coupled) dengan implementasinya.

Abstraksi menyelesaikan masalah ini.

Abstraksi mengekspos apa yang dilakukan sebuah objek. Ia menyembunyikan bagaimana cara melakukannya. Anda hanya menunjukkan kepada pengguna apa yang mereka butuhkan.

Pengguna berinteraksi dengan antarmuka yang stabil. Mereka tidak peduli dengan logika autentikasi atau strategi percobaan ulang Anda. Detail tersebut tetap tersembunyi.

Banyak orang bingung antara Abstraksi dengan Enkapsulasi. Berikut adalah perbedaannya:

Enkapsulasi bertanya: Siapa yang dapat mengubah status objek ini? Ia melindungi data.

Abstraksi bertanya: Detail apa yang harus dilihat pengguna? Ia menyembunyikan kompleksitas.

Keduanya bekerja sama untuk membangun sistem yang lebih baik.

Selanjutnya, kita akan membahas Pewarisan (Inheritance). Kita akan melihat cara menangani perilaku yang sama tanpa menulis kode yang sama dua kali.

Sumber: https://dev.to/ashay_tiwari_3658168ad5db/abstraction-in-oop-hiding-complexity-without-hiding