Saya bekerja di Jawa jadi pada dasarnya saya menggunakan paradigma OOP selama pengkodean. Saya akan mulai bekerja di Perl dan saya bertanya-tanya apa paradigma yang diikuti pengembang Perl. Dalam wiki disebutkan bahwa ini mendukung banyak paradigma tetapi saya tidak yakin saya mengerti karena ini adalah bahasa scripting.
Jadi pertanyaan saya adalah: Apakah pola berorientasi objek yang saya kenal di Jawa idiomatik dalam Perl, atau akankah saya perlu perubahan signifikan pada gaya desain saya untuk menulis Perl efektif?
Catatan: Ini bukan pertanyaan untuk mengkritik Perl. Saya sebenarnya harus bekerja di Perl dan ingin memahami bagaimana cara saya saat ini program akan berubah.
java
design-patterns
object-oriented
perl
pengguna10326
sumber
sumber
Jawaban:
Filsafat Perl cenderung "melakukan apa yang praktis sekarang." Jika Anda perlu menggunakan OOP, itu ada di sana. Itu tidak perlu dalam semua solusi dan memaksa seseorang untuk menulis kode OOP ketika itu sederhana "lakukan ini maka ini maka ini" masalah tipe sering kontra produktif.
Sifat multi-paradigma perl dapat dilihat dalam hal-hal seperti transformasi Schwartzian yang memiliki aspek yang sangat fungsional untuk itu (dalam Lisp itu dikenal sebagai "menghias-semacam-undecorate"). OOP ada, seperti halnya prosedural (pemrograman C like) dan imperatif (bash like "do this then this").
Pola Desain adalah solusi berulang untuk masalah umum. Mereka ada dalam setiap bahasa. Terkadang pola-pola ini disebut idiom, meskipun ini mungkin juga merujuk pada hal-hal yang jauh lebih sederhana daripada sebuah pola.
Bila perlu, banyak Pola Desain GOF klasik dapat diimplementasikan dalam perl. Pola Desain Perl akan memiliki banyak nama umum yang orang kenal dengan GOF. Tidak perlu jika mereka semua perl idiomatik.
Saat menjelajahi pola desain dalam perl, harap perhatikan "Pola Desain" Bukan oleh Mark Dominus .
Banyak yang menganggap bahwa Pola Desain adalah kekurangan dalam bahasa . Dalam perspektif itu, Pola Desain seperti Iterator seringkali tidak perlu dalam perl. Tidak selalu - tetapi sering.
Pertama, tulis perl idiomatik. Jangan mencoba menulis C di perl, atau lisp di perl, atau java di perl. Perl adalah perl. Jika ada masalah yang menjadi lebih besar daripada perl perl idiomatik dapat menangani dan Anda mulai membutuhkan struktur kelas yang lebih kompleks, kemudian tulis mereka. Ketahui pola desain untuk dapat mengenali "masalah ini sekarang telah berkembang ke titik membutuhkan pabrik abstrak" - tetapi jangan mulai mencoba membuat pabrik abstrak dalam perl jika Anda tidak membutuhkannya.
Beberapa perpustakaan ada dalam bentuk OOP dan lebih tradisional. Lihat Haruskah saya menggunakan antarmuka CGI yang berorientasi fungsi atau berorientasi objek? untuk pertanyaan SO lama di mana orang bertanya ke mana harus menggunakan perpustakaan.
sumber
Sikap Perl pada paradigma adalah TMTOWTDI (ada lebih dari satu cara untuk melakukannya). Ini adalah salah satu alasan banyak orang bercanda menyebut Perl bahasa hanya tulis . Menulisnya lebih mudah daripada membacanya, karena gaya orang lain mungkin sama sekali berbeda dengan gaya Anda.
Yang sedang berkata, OOP tentu didukung di Perl. Jika Anda menggunakan banyak kode pihak ketiga, itu mungkin atau mungkin bukan OOP, tetapi untuk kode Anda sendiri, Anda dapat melakukan OOP sesuai isi hati Anda. Saya sebenarnya pertama kali belajar OOP di Perl. Saya mencoba C ++ terlebih dahulu dan itu tidak "klik" untuk beberapa alasan.
sumber
Saya dalam situasi yang sama, saya telah menggunakan Java untuk waktu yang lama,
Setelah pindah ke Perl adalah kejutan dan melegakan tetapi, saya menggunakan buku berjudul 'Perl Best Practices' Sangat membantu dan jika Anda memahami konsep dasar bahasa pemrograman, semuanya mudah mengalir begitu saja.
Hanya ingat dengan perl ada lebih dari satu cara untuk melakukannya, saya telah menghabiskan waktu berjam-jam melihat kode tertentu dan memodifikasinya, tetapi pada akhirnya menyelesaikan pekerjaan dengan kesalahan sintaksis sederhana.
sumber
Ada beberapa cara untuk menangani penggunaan kembali kode di Perl. Banyak contoh tidak memperjelas perbedaan antara pendekatan dan banyak kelas menggunakan setidaknya dua.
Saya menyarankan menggunakan gaya OO sebanyak mungkin dan hanya menggunakan EXPORTER ketika Anda memiliki setidaknya tiga kelas atau lebih yang membutuhkan sekelompok fungsi utilitas yang relatif kecil.
Begitu:
Saya lebih suka memvisualisasikan pendekatan OO dan
EXPORTER
pendekatan sebagai dua dimensi yang berbeda dari ketersediaan kode, seolah-olah fungsi-fungsi itu datang ke paket saat ini dari sumbu x atau y.Dalam contoh di atas:
Foo::Bar
berasalfoo()
dari metode kelasFoo
Foo::Bar
mendefinisikanbar()
metode sehingga metode polimorfikbar()
tidak diturunkan dari kelasFoo
Kedua kelas
Foo
danFoo::Bar
menerimaEXPORTED
fungsi ( bukan metode )util()
dari paket ( bukan kelas )Foo::Util
Kedua sistem tersebut tampak rumit tetapi memiliki utilitas yang sangat praktis. Melacak banyak pewarisan bisa menjadi rumit dengan cepat. Jadi memiliki dimensi kedua ketersediaan kode, memungkinkan Anda untuk menjaga pohon warisan Anda kecil dan mudah dikelola.
Umumnya jika suatu fungsi bersifat monolitik dan relatif bodoh, gunakan EXPORTER, jika tidak gunakan pewarisan. Tapi jangan repot-repot menggunakan
EXPORTER
sama sekali kecuali apa yang akan Anda lakukan kemungkinan akan melibatkan lebih dari 3 atau 4 paket.sumber