Apakah pemrograman berorientasi aspek keliru?

8

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? "

glenviewjeff
sumber
Apakah Anda memiliki contoh metodologi pengembangan perangkat lunak yang sebenarnya?
back2dos

Jawaban:

3

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.

Rei Miyasaka
sumber
2
AOP jelas bukan kategori yang sama dengan OOP. Saya pikir yang terjadi adalah seseorang berkata "aspek adalah konstruksi bahasa; objek adalah konstruksi bahasa; jika Anda menggunakan objek yang Anda lakukan OOP; OLEH KARENA ITU jika Anda menggunakan aspek Anda sedang melakukan AOP". Ketika benar-benar, sebuah konstruksi yang sebanding dengan suatu aspek akan menjadi pengecualian, atau penunjuk fungsi atau sesuatu, dan tidak ada yang mengatakan "pemrograman berorientasi pengecualian".
Tom Anderson
@ Tom Itu cara yang sangat meyakinkan untuk melihatnya.
Rei Miyasaka
5

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.

Billy ONeal
sumber
1
+1. Noam Chomsky mengatakan bahwa bahasa adalah apa yang mendefinisikan kognisi, dan ia dibatasi dan didasarkan pada cara Anda merumuskan pikiran Anda. Dengan kata lain, Anda dapat mendekati segala sesuatu sebagai fitur bahasa, tetapi itu tidak akan berguna.
P Shved
Anda menggunakan frasa "metodologi pengembangan" dan kemudian mengatakan ini tentang mengatur kode. Itu tidak benar - metodologi pengembangan merujuk secara khusus pada proses. Contoh metodologi pengembangan adalah iteratif, inkremental, berurutan, gesit, dan sebagainya. AOP bukan metodologi pengembangan. Namun, ini adalah paradigma pemrograman.
Thomas Owens
@ Thomas: Saya kira kita bisa setuju untuk tidak setuju di sana. :)
Billy ONeal
Saya pikir masalahnya di sini adalah bahwa ada banyak sudut yang perlu dipertimbangkan selama pengembangan perangkat lunak: penanganan kesalahan, ruang lingkup, enkapsulasi, dll. Masing-masing dimensi yang difokuskan secara sempit tidak membentuk paradigma atau metodologi sendiri. Pertanyaan saya benar-benar mencoba mengungkap, "apakah aspek ruang lingkup sempit" seperti fitur ini? Jika demikian, AOP salah nama.
glenviewjeff
1

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.

Thomas Owens
sumber
Kamus American Heritage mendefinisikan paradigma sebagai "Seperangkat asumsi, konsep, nilai, dan praktik yang membentuk cara melihat realitas bagi komunitas yang berbagi, terutama dalam disiplin intelektual." Pemrograman berorientasi objek terasa jelas bagi saya seperti teknik untuk memodelkan realitas. Dalam pengalaman pengkodean saya, saya belum menemukan kasus penggunaan yang berlaku untuk dukungan bahasa AOP, dan seterbuka yang saya lihat sendiri, pada titik ini tampaknya bagi saya lompatan besar untuk menerapkan label paradigma pada aspek-aspek.
glenviewjeff
@glenviewjeff Bukan itu istilah "paradigma" yang didefinisikan ketika mengacu pada paradigma pemrograman. Dalam konteks ini, paradigma adalah metode penyelesaian masalah. Aspek-orientasi hanya itu - Anda menggunakan aspek untuk memecahkan masalah. Jika Anda mencari definisi paradigma pemrograman, beberapa halaman pertama pencarian Google setuju dengan definisi saya. Sangat umum, terutama dalam bidang teknis, bahwa kata-kata mengubah makna dari penggunaannya yang umum.
Thomas Owens
1
AOP bukan paradigma. Ini fasilitas yang bermanfaat, tetapi fitur dalam lanskap, bukan lanskap sendiri.
Tom Anderson
bukan bahwa kalimat Wikipedia tanpa sumber adalah referensi yang dapat diandalkan, tapi itu tentu saja setara dengan kumpulan hasil Google yang tidak bersumber. Kalimat pertama dalam artikel Wikipedia tentang "paradigma pemrograman" mengatakan "Paradigma pemrograman adalah gaya dasar pemrograman komputer." Saya percaya ini sepenuhnya konsisten dengan definisi paradigma kamus American Heritage.
glenviewjeff
1
@ Tom Anderson @glenviewjeff Alasan bahwa ini memang sebuah paradigma adalah bahwa hal itu mengubah cara Anda berpikir tentang suatu masalah. Sebuah fitur membuatnya lebih mudah untuk menyelesaikan masalah, tetapi tidak mengubah cara Anda berpikir. Contoh fitur adalah untuk-setiap loop - itu tidak mengubah cara Anda berpikir tentang masalah yang melibatkan iterasi pada koleksi, tetapi membuatnya lebih mudah untuk melakukannya. Paradigma secara drastis mengubah cara Anda mencapai solusi Anda, dan saya percaya bahwa AOP melakukan ini. Tanpa AOP, solusi Anda akan sangat, sangat berbeda daripada dengan AOP.
Thomas Owens