anti-keseronokan (old)
Fun Stuff for Anti-Fun People
Friday, February 03, 2006
Konsep Modularity
Kau biasa dengar perkataan 'modular' dlm perbincangan programming dan software design? "Cara ni lebih modular, dowh", atau "Aku dah buat modular habis ni beb, senang nak reuse nanti kau tahu..". Oh, ok.. mungkin tak pernah dlm slang begitu :) Tapi yg aku cuba terangkan kat sini ialah apa sebenarnya 'modular' atau 'modularity' ni?
Utk memahami konsep modularity ni, mari aku bawakan satu contoh. Contoh ni memerlukan sedikit pengetahuan dlm elektronik (kalau kau pernah belajar Kemahiran Manipulatif Tambahan dulu sudah cukup bagus). Ok, komponen-komponen elektronik ada seperti kapasitor, perintang, diod, transistor dan sebagainya. Ini adalah komponen asas, setiap satu menjalankan satu tugas yg atomic. Komponen-kompenen ini digabung-gabungkan menjadi litar elektronik. Lama kelamaan, sang engineer melihat ada beberapa pattern yg berulang-ulang dalam litar yg direkanya. Pattern ni kemudiannya dikeluarkan sebagai satu sub-litar dan dibentuk menjadi satu Intergrated Circuit (IC). IC lebih mudah digunakan, sang engineer sudah tahu apa di dalamnya, dan boleh dipasangkan kemana-mana litar yg menggunakan sub-litar di dalam IC ni.
Seperti merekacipta litar, pengaturcaraan juga pada asasnya adalah kerja yang kompleks. Seperti litar juga, kadangkala kita dapat lihat bahawa ada bahagian yang boleh dipecahkan kepada bahagian-bahagian kecil. Bahagian kecil ini dipanggil 'module'. Jadi, program yang modular adalah program yang dipecahkan kepada module-module.
Bagaimana modularity dicapai dalam bahasa pengaturcaraan? Kita ikut susur galur sejarah. Bahasa sequential awal seperti BASIC adalah sukar utk di'modular'kan, tapi kita dapat 'lompat' kepada arahan-arahan berulang melalui arahan GOTO. Bahasa lebih maju seperti Pascal dan C membenarkan kita memecah arahan-arahan kepada function atau subroutine. Bila datangnya OOP, modularity dapat dicapai pada satu tahap lagi iaitu melalui class dan object, seperti dlm C++, Java, Ruby dan sebagainya. Sesetengah bahasa menyediakan satu tahap modularity lagi melalui penggunaan namespace atau package.
Sebagai manusia biasa kita hanya dpt berdepan dgn kompleksiti sehingga sesuatu tahap tertentu sahaja. Lebih dari itu akan membuatkan kita keliru, pening, dan muntah-muntah darah (ok, over-acting di situ). Memecahkan pada bahagian kecil bermakna kita memecahkan kompleksiti menjadikannya lebih mudah dikawal dan difahami. Dengan memecahkan kepada module, kita mencipta abstraction, yg dapat digunakan utk memerangi kompleksiti. Abstraction membalut sesuatu kompleksiti membuatkan kita tidak perlu hirau pada kompleksiti tersebut. Macam contoh tadi, di dalam IC (satu module) mungkin terdapat litar yang kompleks. Tapi sang engineer tak perlu tahu rupa bentuk litar di dalam IC tu. Dia cuma perlu tahu bagaimana nak gunakan IC tu. Kaki mana yg perlu dimasukkan arus, dan kaki mana yg digunakan utk dapatkan output. Dia mengelakkan kompleksiti melalui abstraction. Begitu juga function atau class, ia membalut arahan-arahan aturcara di dalamnya. Kita hanya perlu tahu cara utk menggunakan function atau class itu, seperti contohnya apa parameter yg perlu dihantar pada function, dan apa yang dipulangkan.
Memecahkan sesuatu aturcara kepada module nampak mcm senang je. Masukkan je lah dalam function! Buat class je dah jadi la beb! Ya, kerja memecah bukan susah. Yang susah ialah memecah dgn bergaya mutu keunggulan! Bagaimana utk jadikan module-module itu mudah utk diguna-semula? Bagaimana utk mengurangkan pergantungan satu module dgn module lain, supaya mudah dialih-alihkan? Bagaimana utk membuatkan module tu senang digunakan oleh orang lain di dalam program mereka? Ini perlu ilmu dan pengalaman.
Design dan architecture yang baik secara umumnya memodularkan sesuatu aturcara sambil cuba mencapai satu objectif, iaitu keinginan utk mendapatkan 'high cohesion' dan 'low coupling'. Kalau semangat aku masih kuat, aku akan cuba tulis pasal ini nanti.
Tag: Kejuruteraan+Perisian Software+Engineering
Disclaimer: Aku mungkin bukan org yg layak utk berbicara topik ni. Tapi aku mahu berkongsi, dan mahu menguji kefahaman sendiri. Tolong gunakan dgn waspada, dan betulkan aku di mana silap.

4 Comments:
Aku pun selalu duk paham class/module ni terbahagi kepada komponen-komponen kecik jugak yang mudah digunakan semula.
Bagus penerangan ni, panjang dan lebar. Menggunakan pendekatan analogi yang mudah difahami. Senang sikit bagi link ni kat org utk paham konsep reusability dlm oop ni
Kalau cerita pasal class, abstraction, dan encapsulation, mesti aku teringat pasal IC, takde modal utk analogi lain.
Kalau nak cerita reusability dlm OOP kena cerita sekali encapsulation. Aku ada teringin nak tulis pasal pillars of OOP (encapsulation, inheritence, polymorphism, abstraction).. nantilah kalau lapang.
Tambah sikit, kadang2 org kalau cakap "modular", dia cakap maksud bukan setakat "dibahagikan kpd module2", tapi jugak bermaksud "dibahagikan kpd module2 dgn baik"..
artikel yang baik. terima kasih kerana berkongsi.
Terima kasih kembali. Sebenarnya, aku rasa mcm membesar2kan perkara yg kecil je :)
Post a Comment
<< Home