Kamis, 06 November 2008

OOP vs Prosedural


Membahas masalah konsep OOP, akan mudah dipahami kalau kita membandingkannya dengan konsep pemrograman yang sebelumnya sudah ada, yaitu pemrograman prosedural. Walaupun sebenarnya paling tidak enak kalau dibanding-bandingkan, mengingat pengalaman saya ketika ibu saya membanding-bandingkan antara saya dengan kakak sepupu saya, rasanya saya menjadi sangat tidak nyaman sekali, dan pasti jawaban saya adalah "saya ya saya, dia ya dia, jangan menyuruh saya seperti dia", tapi sebenarnya dibalik semua itu ibu saya memiliki maksud yang sangat mulia yaitu supaya saya selalu berevolusi untuk menjadi manusia yang lebih baik.

Konsep OOP atau Object Oriented Programming adalah konsep bahasa pemrogramman dengan pendekatan terhadap solusi permasalahan dimana seluruh perhitungan dilakukan di dalam konteks object. Dalam pemrogramman prosedural, programmer merancang program dalam konsep terpisah. Fungsi-fungsi yang didefinisikan merupakan bentuk abstrak yang berada diluar entitas / bagian yang saling terkait.

Untuk membuat aplikasi Perpustakaan misalnya, pemrogramman prosedural akan membawa programmer merancang program dalam fungsi-fungsi tertentu. Aplikasi untuk input data master, aplikasi untuk input data transaksi, aplikasi untuk laporan dan seterusnya. Tidak ada yang salah dalam konsep ini, hanya saja konsep OOP yang datang belakangan memberikan paradigma baru dalam memandang persoalan.

Alih-alih memandang suatu fungsi secara terpisah, Konsep OOP menekankan paradigma object dan class. Entitas dan suatu bagian dalam sistem dipandang sebagai satu object tertentu, yang punya kelakuan (behaviour) dan kondisi tertentu. Dengan demikian, sistem yang dibangun akan berupa gabungan object-object yang saling terkait satu dengan yang lain seperti halnya di dunia nyata.

Paradigma ini membawa keuntungan karena sistem yang dibangun bersifat modular. Bisa dibentuk dari gabungan banyak object atau bisa juga beberapa object atau hanya satu object. Jika ada masalah di satu object, object tersebut bisa dipisahkan agar tidak mengganggu object lain.

Bagaimana desain object oriented berbeda dengan kode prosedural yang lebih tradisional? Akan sangat mudah untuk mengatakan bahwa perbedaan utamanya adalah kode berorientasi obyek memiliki object di dalamnya. Ini tidak betul. Dalam PHP kita akan sering menemukan kode prosedural menggunakan obyek. Kita juga mungkin sering melihat class-class yang mengandung kode prosedural di dalamnya. Keberadaan class tidak menjamin adanya desain berorientasi obyek.

Satu perbedaan utama antara kode berorientasi obyek dengan kode prosedural dapat dilihat dari bagaimana tanggung jawab (responsibility) didistribusikan. Kode prosedural akan berupa urut-urutan perintah dan method calls. Kode pemanggil (controlling code) cenderung bertanggung jawab untuk meng-handle pengecekan kondisi (if, then, else dst). Kontrol top-down ini -dalam pengembangan aplikasi– dapat menghasilkan duplikasi kode dan saling ketergantungan lintas (antar) proyek. Kode berorientasi obyek mencoba untuk meminimalisasi ketergantungan ini dengan cara memindahakan responsibility untuk meng-handle tugas-tugas dari client code ke dalam obyek-obyek di dalam sistem.

Meskipun banyak yang berpendapat bahwa premis dasar OOP setiap program bisa dipecah menjadi objek - objek yang saling berinteraksi tidak terlalu baik untuk menyelesaikan masalah yang secara natural bersifat algoritmik, tapi harus kita akui bersama bahwa bagaimanapun juga kelemahan OOP tidak berarti jika dibandingkan dengan kelebihannya. lha ya iyalah masa ya iya dong ;)

Tidak ada komentar: