Dari semua yang saya pelajari tentang "Pemrograman Berorientasi Aspek" atau "Pengembangan Perangkat Lunak Berorientasi Aspek", menandainya sebagai paradigma atau metodologi pemrograman tampaknya tidak akurat. Dari apa yang saya tahu itu bukan teknik dasar untuk pemrograman.
Untuk memahami apa yang dimaksud dengan "paradigma" dan "metodologi," silakan merujuk definisi berikut dari Kamus Warisan Amerika. Bandingkan seberapa baik atau buruk "Pemrograman Berorientasi Objek" berlaku untuk masing-masing vs. seberapa cocok AOP.
Paradigma: Seperangkat asumsi, konsep, nilai, dan praktik yang membentuk cara melihat kenyataan bagi komunitas yang berbagi, terutama dalam disiplin intelektual.
Metodologi: Suatu badan praktik, prosedur, dan aturan yang digunakan oleh mereka yang bekerja dalam disiplin ilmu atau terlibat dalam penyelidikan; satu set metode kerja.
"Kedokteran berbasis bukti" memenuhi definisi paradigma, tetapi "kedokteran berbasis histerektomi" akan keliru karena ruang masalahnya terlalu sempit.
Saya mendapat kesan bahwa AOP mungkin salah nama karena berdasarkan akhiran "berorientasi pemrograman", AOP menuduh baik paradigma dan metodologi dengan cara yang sama "Pemrograman Berorientasi Objek".
Kedua istilah ini (paradigma dan metodologi) menunjukkan teknik mendasar, di mana apa yang saya pahami tentang aspek adalah teknologi untuk memecahkan ruang lingkup masalah yang sempit, mungkin sebanding dalam besarnya dengan fitur variabel statis Java.
Jika benar bahwa aspek memecahkan serangkaian masalah yang sempit, dan AOP bukanlah kesalahan, maka mengapa semua teknik pemrograman tidak boleh diberi akhiran "berorientasi-pemrograman", seperti "pemrograman berorientasi-warisan," "dependensi- pemrograman berorientasi, "atau" pemrograman berorientasi lingkup? "
sumber
Jawaban:
Saya pikir ini adalah masalah yang sangat meragukan karena definisi dari "metodologi" dan "paradigma" dan "pemrograman berorientasi" berpotensi agak longgar dalam konteks ini, tapi saya akan bermain advokat iblis dan pergi dengan " ya, itu keliru ".
Bahkan jika Anda tidak menggunakan fitur AOP atau AOP untuk menyelesaikan masalah, Anda masih akan memikirkan aspek-aspek tersebut - Anda mungkin membuatnya ditulis sebagai dokumentasi di suatu tempat, atau Anda mungkin menggunakan pembuat kode - baik cara, konsep aspeknya masih ada. Itu juga bisa berjalan dengan paradigma apa pun; meskipun akan sangat jelek, Anda masih bisa melakukan OOP di C.
Jadi bukankah itu berarti bahwa AOP adalah metodologi dan OOP? Saya pikir ada lebih dari itu.
Alasannya adalah bahwa metodologi menawarkan solusi untuk jenis masalah tertentu . Anda tidak menggunakan lebih dari satu metodologi untuk menyelesaikan masalah konseptual, meskipun Anda mungkin menggunakan dua atau lebih dalam skema yang lebih besar. Anda mungkin menggunakan OOP dan prosedural untuk menulis entri data UI, tetapi Anda hanya menggunakan OOP untuk menggambarkan struktur abstrak UI, dan Anda hanya menggunakan prosedur (lebih akurat, metode) untuk menggambarkan perilakunya. Pada unsur utama dari suatu masalah, metodologi adalah saling eksklusif - dan AOP masih dapat mengambil bagian dalam memecahkan masalah dengan kode fungsional, OOP, atau prosedural.
AOP memecahkan masalah dalam arti mengurangi jumlah kode yang diulang, tapi itu masih dalam deskripsi pekerjaan fitur bahasa. Anda belum benar-benar menyelesaikan masalah aktual secara konseptual dengan mengatakan bahwa Anda akan mendapatkan kompiler atau runtime untuk menyuntikkan beberapa kode yang tidak harus Anda tulis secara eksplisit; Anda baru saja membuat kode Anda sedikit lebih teratur. Menyatakan bahwa "semua fungsi saya akan mencatat waktu mulai dan selesai" bukan solusi untuk masalah; itu hanya pernyataan masalah.
Saya pikir akan lebih tepat bagi mereka untuk sekadar disebut "Aspek", sebagai fitur bahasa.
sumber
Semua metodologi pengembangan hanyalah cara berpikir tentang pengaturan kode. Setiap metodologi pengembangan dapat menghasilkan kode tampak sangat berbeda, atau mereka dapat menghasilkan kode serupa. Mereka mungkin juga memerlukan perpustakaan atau fitur bahasa untuk dukungan.
Dalam C ++ misalnya, AOP biasanya diimplementasikan menggunakan kelas sifat dan kompilasi waktu polimorfisme. Itu sama sekali bukan "fitur" bahasa - Anda membangun berbagai aspek dari jenis Anda, dan menggabungkannya sesuka Anda dengan templat.
Dalam bahasa seperti Java yang tidak memiliki sesuatu seperti templat, Anda akhirnya harus menggunakan fitur bahasa khusus yang disediakan oleh preprosesor (misalnya
AspectJ
) untuk memprogram dengan cara yang berorientasi aspek, hanya karena bahasa asli tidak memiliki kemampuan menerapkan AOP sejati itu sendiri.Akibatnya, program AOP akan terlihat sangat berbeda dalam C ++ dibandingkan dengan Java - tetapi yang paling penting adalah bagaimana programmer berpikir tentang desainnya, bukan tentang bagaimana kode terlihat.
Oleh karena itu, AOP tentu merupakan metodologi pengembangan.
sumber
Ada dua hal yang berperan di sini - paradigma pemrograman versus metodologi pengembangan perangkat lunak .
Ya, Pemrograman Berorientasi Aspek adalah paradigma pemrograman. Ini memanfaatkan fitur bahasa tertentu untuk mewakili konstruksi yang diperlukan untuk melakukan tugas atau membuat kode lebih mudah dibaca. Ini adalah teknik yang dapat digunakan oleh seorang programmer. Sering kali, Anda melihat AOP digunakan bersama Pemrograman Berorientasi Objek untuk menghilangkan masalah lintas sektoral. Namun, Anda dapat mengimplementasikan pemrograman berorientasi aspek di atas bahasa fungsional juga. Ini tidak selalu merupakan paradigma yang sepenuhnya baru, tetapi merupakan perpanjangan untuk OOP dan pemrograman fungsional untuk mengatasi masalah yang diketahui. Alasan utama mengapa saya percaya bahwa itu harus dianggap sebagai paradigma adalah bahwa itu mengubah cara Anda berpikir untuk mencapai solusi untuk masalah tersebut. Sama seperti pemrograman fungsional, pemrograman prosedural, pemrograman logika, dan pemrograman berorientasi objek semua memiliki solusi yang berbeda secara drastis untuk masalah yang sama, pemrograman berorientasi aspek menambah solusi lain untuk set masalah.
Tidak, Pemrograman Berorientasi Aspek bukanlah metodologi pengembangan. Metodologi pengembangan adalah kerangka kerja yang dapat Anda gunakan untuk membuat sistem perangkat lunak. Ini menentukan tugas apa yang Anda laksanakan dan bagaimana Anda melakukannya, mulai dari persyaratan sampai akhir hayat. AOP tidak mengatakan apa-apa tentang ini. Namun, beberapa paradigma pemrograman mengarah pada pendekatan metodologi pengembangan untuk siklus hidup perangkat lunak. Ada pendekatan yang disebut Rekayasa Perangkat Lunak Berorientasi Objek, yang dikembangkan oleh Ivar Jacobsonyang menentukan siklus hidup lengkap untuk merancang dan mengembangkan sistem berorientasi objek, tetapi tidak disukai dan telah digantikan oleh UML dan Rational Unified Process. Sejujurnya saya tidak melihat AOP memengaruhi metodologi seperti halnya OOP. Faktanya, hanya melihat tren nampaknya mengindikasikan bahwa metodologi harus melampaui bahasa dan paradigma yang digunakan untuk membangun perangkat lunak. Mungkin ada teknik pemodelan yang berfokus pada AOP dan kosakata yang digunakan selama desain dan pengembangan, tetapi saya tidak melihat metodologi yang sepenuhnya terpusat pada AOP.
sumber