Jadi, "Apakah Pola Desain Fitur Bahasa Hilang"? [Tutup]

12

Saya melihat, di sini di Programmer, jawaban untuk pertanyaan ini: Bagaimana cara berpikir tentang pola desain dan praktik OOP berubah dalam bahasa yang dinamis dan diketik dengan lemah? Di sana saya menemukan tautan ke artikel dengan judul yang blak-blakan: Are Pattern Patterns Missing Language Features . Tetapi di mana saya menemukan cuplikan yang bagi saya tampak sangat menarik dan yang mungkin dapat diverifikasi terhadap pengalaman mengingat ada insentif untuk itu, seperti:

PaulGraham berkata, "Peter Norvig menemukan bahwa 16 dari 23 pola dalam Pola Desain tidak terlihat atau lebih sederhana di Lisp."

atau kalimat lain yang mengonfirmasi apa yang baru-baru ini saya lihat dengan orang yang mencoba mensimulasikan kelas dalam JavaScript:

Tentu saja, tidak ada yang pernah berbicara tentang pola "fungsi", atau pola "kelas", atau banyak hal lain yang kita anggap remeh karena sebagian besar bahasa menyediakannya sebagai fitur bawaan. OTOH, programmer dalam bahasa PrototypeOriented murni? mungkin lebih mudah untuk mensimulasikan kelas dengan prototipe ...

Saya juga mempertimbangkan bahwa pola desain adalah alat komunikasi . Karena walaupun dengan pengalaman terbatas saya berpartisipasi dalam membangun aplikasi, saya dapat melihat sebagai anti-pola ( tidak efektif dan / atau kontraproduktif ) misalnya, memaksa tim PHP kecil untuk mempelajari pola GoF untuk aplikasi intranet kecil hingga menengah. Saya sadar bahwa skala, ruang lingkup, dan tujuan dapat menentukan apa yang efektif dan / atau produktif, tetapi saya masih belum berhasil menemukan gambaran teknis tentang hal itu.

Saya melihat aplikasi komersial kecil yang dicampur fungsional dengan OOP dan masih dapat dipertahankan, dan saya tidak tahu apakah banyak yang akan membutuhkan misalnya dalam python untuk menulis singleton, tetapi bagi saya modul sederhana melakukan hal yang sama.

Jadi, apakah ada studi, artikel lengkap atau bentuk eksposisi lain yang mempertimbangkan pola desain vs solusi atau cara yang lebih mudah untuk melakukannya, atau penggantian dengan fitur bahasa?

Eduard Florinescu
sumber
16
Merupakan kesalahan untuk menerima apa pun yang dikatakan oleh Paul Graham tentang masalah bahasa pemrograman sebagai "obyektif dan faktual."
Mason Wheeler
5
Saya tidak cenderung tidak setuju dengan Paul Graham, tetapi @MasonWheeler benar, penginjil itu hebat karena banyak alasan, tetapi tidak untuk objektivitas mereka.
Jimmy Hoffa
3
@JimmyHoffa: Ini bukan "penginjil" secara umum. Saya mempermasalahkan sejarah panjang Graham dalam memposting materi konyol yang sering bertentangan dengan dirinya atau sumbernya dan mencoba mengubah semuanya menjadi konsisten. Tidak peduli apa yang Anda anjurkan, itu cara yang mengerikan untuk melakukannya, dan agak mengerikan bagi saya bahwa orang-orang benar-benar mendengarkannya.
Mason Wheeler
5
Akan menyenangkan untuk melihat beberapa studi, tetapi jika Anda pernah menggunakan bahasa fungsional modern - Anda sudah tahu betapa usang pola desain GOF, dan tidak perlu nomor untuk membuktikannya lebih lanjut . (Padahal, mereka penting pada 1990, tidak diragukan lagi).
c69
3
@DanielB, setiap paradigma spesifik akan gagal, karena kenyataannya jauh lebih kompleks daripada paradigma apa pun. Oleh karena itu, masing-masing dan setiap masalah layak memiliki paradigma dan model spesifik domain sendiri.
SK-logic

Jawaban:

10

Saya tidak mengetahui adanya diskusi atau studi mendalam yang memperhitungkan semua hal itu.

Yang mengatakan, seluruh argumen "pola desain hanya menambal fitur yang hilang dalam bahasa OO" agak tipis, menurut pendapat saya. Ya, beberapa pola desain persis seperti itu, mereka mengisi beberapa celah umum bahkan tidak ada dalam bahasa X lainnya. Ini biasanya pola desain tingkat rendah dan lebih sederhana, seperti beberapa / banyak yang asli dalam buku GoF.

Tapi pola desain jauh melampaui yang sederhana, dan menyebut mereka fitur bahasa yang hilang memperluas imajinasi. Lihat sekilas katalog pola aplikasi perusahaan Fowler , dan pikirkan seperti apa jadinya jika itu semua adalah bagian dari definisi inti suatu bahasa. Saya kira Anda akan berakhir dengan bahasa khusus domain ( DSL ) untuk aplikasi perusahaan (dan yang sangat kompleks, pada saat itu).

Jadi inilah masalahnya - pola desain adalah cara untuk menghasilkan solusi yang dapat digunakan kembali untuk masalah-masalah tertentu (yang sering diterapkan dalam bahasa generik, semua-tujuan). Di sinilah komunikasi juga masuk. Jika Anda memberi tahu saya "kami menggunakan Rekaman Aktif", saya sudah tahu banyak tentang aplikasi Anda, tanpa menghabiskan menit membahas berbagai pendekatan. Jadi ya, pola desain tidak menambal lubang dalam spesifikasi bahasa. Apakah hanya itu yang mereka lakukan? Tidak - tidak dengan tembakan panjang.

Edit:

Di satu sisi, apa yang saya katakan adalah bahwa pola memungkinkan praktisi OO untuk berpikir pada tingkat yang lebih tinggi, dan hampir membangun jenis DSL untuk lingkungan mereka, sambil tetap dalam sintaksis bahasa mereka. Dan ya, saya telah melihat apa yang terjadi ketika Anda menerapkannya di mana-mana (lihat: AbstractSingletonProxyFactoryBean , ya, itu ada), atau berpikir itu semacam peluru perak. Intinya adalah bahwa meskipun mereka membutuhkan waktu lama untuk benar-benar merasa nyaman, mereka seharusnya benar-benar menurunkan kompleksitas dengan membuat hal-hal yang dapat diprediksi / dipahami pada tingkat tinggi. Ini sangat berbeda dengan menjadi tambalan untuk kegagalan bahasa Anda.

Sunting 2 - menambahkan contoh counter AbstractSingletonProxyFactoryBean untuk mengolok-olok pola. Agar benar-benar adil, bila dilihat dari lampu AOP, bahkan contoh tandingan ini dapat dipertahankan.

Daniel B
sumber
(+1) dan terima karena Anda mempersempit pencarian saya pada DSL dan pola aplikasi. Sangat bijaksana, dan dapatkah Anda memperluas atau menautkan untuk pembaca mungkin dalam kurung setidaknya satu dari singkatan DSL Saya kira itu berarti Domain-Bahasa Khusus.
Eduard Florinescu
@EduardFlorinescu terima kasih, saya telah memperbarui dengan tautan untuk DSL.
Daniel B
Saya juga menemukan artikel ini mengkonfirmasikan bagian dari jawaban Anda dalam kasus ini dengan Groovy ibm.com/developerworks/java/library/j-eaed7/index.html
Eduard Florinescu
1
@EduardFlorinescu itu sangat menarik, meskipun saya tidak hanya merujuk pada pola juru bahasa secara khusus; alih-alih, saya maksudkan bahwa banyak pola bisa sangat spesifik untuk domain, dan menjadi hampir idiomatis untuk pengembang di domain itu. Dalam hal itu, mereka menjadi semacam DSL, dan tidak perlu banyak upaya untuk memahami dan menggunakannya. Misal ketika saya membaca pola perintah (contoh non-domain spesifik), saya tahu kode boilerplate mana yang bisa saya abaikan dengan aman, dan tidak butuh banyak usaha. Tapi terima kasih untuk tautannya yang menarik.
Daniel B