Abstraksi dalam OOP: Menyembunyikan Kerumitan
Anda memandu kereta menggunakan beberapa tindakan mudah. Anda menekan pedal minyak. Anda memusingkan stereng. Anda menekan brek.
Anda tidak perlu tahu bagaimana bahan api masuk ke dalam enjin. Anda tidak perlu memahami bagaimana omboh bergerak atau bagaimana gear bertukar. Kereta menyembunyikan butiran tersebut daripada anda. Anda menggunakan antara muka yang mudah untuk mengawal mesin yang kompleks.
Perisian berfungsi dengan cara yang sama.
Fikirkan tentang menghantar e-mel. Anda memanggil satu arahan: emailService.send().
Di sebalik tabir, banyak perkara berlaku:
- Sistem mengesahkan alamat tersebut.
- Ia mencipta sambungan SMTP.
- Ia melakukan pengesahan dengan penyedia.
- Ia membina mesej tersebut.
- Ia mengendalikan cubaan semula jika percubaan pertama gagal.
Anda tidak perlu melihat langkah-langkah ini. Anda hanya peduli bahawa e-mel tersebut dihantar.
Jika anda tidak menggunakan abstraksi, kod anda akan kelihatan seperti ini:
- connect()
- authenticate()
- buildMessage()
- sendMessage()
- disconnect()
Melakukan perkara ini setiap kali akan menimbulkan masalah. Setiap bahagian kod anda mengetahui terlalu banyak perkara. Jika anda menukar penyedia e-mel anda, anda mesti mengemas kini setiap baris kod yang menghantar e-mel. Sistem anda menjadi sukar untuk diubah.
Abstraksi menyelesaikan masalah ini. Ia menunjukkan apa yang dilakukan oleh sesuatu objek tetapi menyembunyikan cara ia berfungsi.
Anda mendedahkan antara muka yang mudah. Pemanggil kekal fokus pada tugas tersebut. Pelaksanaan (implementation) kekal tersembunyi. Ini memastikan kod anda tidak terikat (decoupled) dan mudah diselenggara.
Orang sering keliru antara Abstraksi dengan Enkapsulasi.
Enkapsulasi bertanya: Siapa yang boleh mengubah data ini? Ia melindungi keadaan dalaman (internal state). Abstraksi bertanya: Butiran apakah yang perlu dilihat oleh pengguna? Ia menyembunyikan kerumitan.
Kedua-duanya berfungsi bersama untuk membina sistem yang lebih baik.
Seterusnya, kita akan melihat Pewarisan (Inheritance). Kita akan menjawab satu soalan: Jika objek berkongsi tingkah laku, adakah anda perlu menulis kod yang sama dua kali?