Seberapa penting pola desain dalam pemrograman?

19

Saya seorang mahasiswa dan saya baru saja mulai belajar tentang pola desain dan saya berjuang untuk memahami tujuan mereka. Saya telah mencoba meneliti mereka tetapi semua sumber yang saya temukan tampaknya berbicara tentang mereka secara akademis, bukan profesional.

Apa tujuan mereka dan apakah mereka penting untuk dipelajari?

Roy James Schumacher
sumber
7
Mereka baik untuk mengetahui wawancara kerja!
wim
5
Pola desain hanyalah cara pemecahan masalah yang diberi nama, yang biasa berulang. Biasanya mereka muncul dari kekurangan dalam bahasa.
Jon Purdy
7
Memahami tujuan dari pola desain membutuhkan memahami masalah yang mereka pecahkan. Memahami masalah ini memerlukan pengalaman melakukannya dengan cara yang sulit :)
MattDavey

Jawaban:

36

Pola desain sangat bagus untuk mengomunikasikan maksud Anda dengan sangat cepat - semua orang tahu apa itu Pabrik.

Apa yang benar-benar, sangat, sangat buruk untuk dilakukan adalah mulai mencoba menyesuaikan kode Anda dengan pola, atau memisahkan tanggung jawab sesuai dengan pola, atau sesuatu seperti itu. Adalah satu hal untuk mengatakan "Objek ini adalah Pabrik" dan yang lain mengatakan "Objek ini harus secara eksklusif Pabrik".

DeadMG
sumber
1
Jadi Anda semua hanya untuk pola tetapi sebenarnya bukan untuk kode Anda. Ya mereka bagus untuk mengomunikasikan ide, tetapi mereka lebih baik ketika Anda dapat melihat pola dalam kode aktual.
Newtopian
3
Mengapa memilih? Ini sebenarnya jawaban IMHO terbaik. Pengkodean adalah akal sehat, dan kadang-kadang Anda dapat dengan cepat menggunakan pola yang cocok untuk menyelesaikan masalah. Tapi begitu orang mulai melecehkan mereka di mana-mana, itu berubah menjadi kacau sekali.
Coder
1
Setiap kode berisi beberapa pola, bahkan jika Anda tidak menyadarinya. Pola Desain yang Anda bicarakan hanya berkumpul kembali dan beri nama satu set pola yang banyak digunakan dan bermanfaat. Ketika Anda mengenal mereka, Anda dapat memikirkannya dengan lebih sadar. Jika Anda memanggil salah satu kelas Anda "ControlDispenser", mungkin tidak ada yang akan tahu apa yang seharusnya dilakukan. Namun, jika Anda tahu pola pabrik, maka Anda akan menyebutnya "ControlFactory" dan yang lainnya akan segera mengerti.
Olivier Jacot-Descombes
4
Jika melayani tujuan lain, itu harus kelas lain ... pemisahan kekhawatiran.
Nate
2
@Nate: Satu tujuan mungkin beberapa pola. Tidak ada alasan bahwa satu kelas harus melibatkan hanya satu pola. Pola bukanlah tanggung jawab "atom". Tanggung jawab tunggal mungkin memerlukan beberapa pola.
DeadMG
26

Dari artikel wikipedia tentang Pola Desain :

Kegunaan berbicara tentang pola adalah memiliki terminologi umum untuk membahas situasi yang sudah sering dilihat oleh desainer.

Untuk waktu yang sangat lama, kami memiliki masalah serius dalam rekayasa perangkat lunak: Anda menyewa pendatang baru untuk sebuah proyek, dan tidak peduli seberapa baik mereka tahu bahasa pemrograman, perlu waktu berbulan-bulan untuk mengetahui bagaimana hal-hal dilakukan dalam komputer Anda. memproyeksikan sebelum mereka dapat menjadi produktif. Dalam rekayasa perangkat keras, mereka memecahkan masalah ini sejak lama: mereka memiliki istilah umum yang disebut 'diagram skematik'. Anda menyewa seorang insinyur perangkat keras, memberi mereka skema proyek perangkat keras Anda di pagi hari, biarkan mereka mempelajarinya, dan pada malam hari sebelum saatnya untuk menyebutnya sehari mereka dapat mengambil senjata solder dan menjadi produktif. Kami telah berusaha menemukan cara untuk menjadi lebih baik dalam hal itu; standardisasi bahasa pemrograman adalah satu cara; perpustakaan standar (perpustakaan kelas saat ini) telah menjadi cara lain; tetapi salah satu cara terpenting mungkin adalah pola desain. Jadi, apakah itu penting? Anda bertaruh!

Mike Nakis
sumber
3
Membandingkan pengembangan perangkat lunak dengan teknik listrik sama akuratnya dengan membandingkan roket saturn dengan sepeda. Kedua metode transportasi (pergi dari titik A ke titik B) tetapi pergi dengan cara yang sama sekali berbeda, dan tidak kompatibel.
jer
3
@ jer Hmmm, analogi Anda buruk. Keduanya adalah disiplin teknik. Bahkan jika kesamaan mereka berakhir di sana, mereka akan, menurut definisi, memiliki banyak kesamaan. Kami tidak berharap untuk menyamakan mereka, tetapi satu harus banyak belajar dari yang lain.
Mike Nakis
6
@ Mike: ada adalah perbedaan mendasar: rangkaian listrik dibatasi oleh batas-batas fisik yang keras. Sistem perangkat lunak dibatasi oleh batasan fuzzy kecerdasan manusia.
kevin cline
3
Pertama-tama, saya tidak mengatakan tidak ada perbedaan besar. Kedua, pernyataan Anda juga tidak benar. Perangkat lunak memang mematuhi batasan-batasan sulit, yang ditetapkan oleh sintaks bahasa. Dan jumlah permutasi di mana kecerdasan manusia dapat menghubungkan komponen elektronik juga tidak terbatas. Tetapi sekali lagi, saya tidak berusaha menyamakan keduanya, atau bahkan mengatakan bahwa ada banyak kesamaan. Saya hanya mengatakan bahwa satu harus banyak belajar dari yang lain .
Mike Nakis
3
Karena perangkat lunak adalah semua tentang desain, analogi teknik elektro yang sama akan menjadi pembahasan "cermin saat ini" dan "umpan balik negatif" dalam rangkaian penguat. Ini bukan komponen diskrit pada skema, melainkan susunan beberapa komponen yang memenuhi tujuan tertentu. Mengetahui cara menghubungkan komponen tanpa mengetahui tujuannya tidak akan memungkinkan orang baru untuk membuat desain baru. (Yaitu itu adalah langkah maju dalam pemahaman.)
rwong
9

Sebenarnya ada dua alasan yang berbeda dan substansial untuk keberadaan pola.

Yang pertama telah dijelaskan dengan cukup baik: penggunaan pola melumasi komunikasi antara pengembang. Jika Anda dan saya sama-sama mengerti bahwa ketika saya mengatakan 'Pengamat' saya berbicara tentang struktur kode yang sangat spesifik, maka saya dapat dengan cepat menggambarkan bagaimana sedikit kode yang menggunakan pola itu bekerja. Alternatifnya adalah dengan sepenuhnya menggambarkan solusi, yang memakan waktu dan rawan kesalahan. ("Ya, saya membuat kelas virtual murni ini yang menggambarkan dan antarmuka untuk objek konsumen, dan kemudian saya membuat kelas yang mengelola daftar konsumen aktif, yang ...")

Manfaat kedua dari pola adalah bahwa mereka merupakan solusi-bentuk yang tidak sesuai untuk bentuk-masalah umum. Jika Anda mengetahui pola Anda, dan, misalnya, Anda menghadapi masalah di mana Anda perlu menemukan cara yang baik untuk mendapatkan informasi dari (mungkin beberapa) objek produsen ke beberapa objek konsumen, tanpa memperkenalkan penggabungan yang tidak perlu antar kelas, Anda akan mengenali "ini adalah pekerjaan untuk Pengamat! " dan Anda akan segera tahu bagaimana menyelesaikan masalah Anda.

Manfaat ini juga sangat saling menguatkan. Mereka memungkinkan Anda untuk dengan cepat memecahkan kelas umum masalah tertentu, dan kemudian ketika Anda selesai, Anda dapat dengan cepat mengomunikasikan bagaimana Anda memecahkan masalah.

Bandingkan ini dengan dunia di mana pola "tidak ada". Anda mengalami salah satu dari kelas-kelas masalah ini, yang umumnya bukan masalah desain sepele, dan Anda menghabiskan cukup banyak waktu untuk menghasilkan solusi yang baik (yang, kebetulan, akan sangat mirip dengan pola yang sesuai). Kemudian, rekan kerja Anda datang dan ingin tahu bagaimana Anda menyelesaikannya, dan Anda menghabiskan waktu satu jam untuk membahas bagaimana dan mengapa.

Ini semua terkait dengan peringatan yang seharusnya terlihat cukup jelas: jangan mencoba memaksakan masalah ke dalam pola yang tidak sesuai. Jika polanya tidak sesuai dengan masalahnya, maka solusinya akan menjadi berbelit-belit dan Anda akan kehilangan upaya pengurangan manfaat dari polanya. Selain itu, karena pekerjaan Anda tidak lagi sesuai dengan pemahaman rekan kerja Anda tentang makna pola, Anda akan kehilangan biaya manfaat komunikasi. Bahkan, Anda kemungkinan akan meningkatkan biaya komunikasi di luar biaya tanpa pola, karena penyalahgunaan pola tersebut akan membuat rekan kerja Anda memiliki pemahaman yang salah tentang solusi, yang lebih buruk daripada tidak memahami sama sekali.

ipeet
sumber
2
Ini adalah kesalahpahaman bahwa pola desain adalah solusi yang tidak tepat. Mereka adalah "POLA" ini tidak selalu diterjemahkan ke dalam kode.
Martin York
Erm, sebuah pola selalu diterjemahkan menjadi kode, itu cukup banyak - yang menjadi masalah adalah bahwa mereka mungkin tidak selalu cocok dengan kode yang Anda miliki atau arsitektur yang Anda miliki atau kendala yang sedang Anda kerjakan. yaitu hanya karena suatu pola mungkin cocok yang tidak selalu berarti Anda dapat menggunakannya. Orang mungkin berasumsi itu yang Anda maksudkan (tapi saya tidak suka membuat asumsi).
Murph
5

Pola adalah tentang penggunaan kembali ide dan konsep dan tentang membangun platform yang sama / konsisten untuk komunikasi yang sama.

Kita semua sepakat (!) Bahwa dalam teori penggunaan kembali kode adalah hal yang baik - tetapi ternyata lebih sulit daripada yang ingin kita lakukan secara praktis (dalam beberapa hal ini berubah, tetapi itu akan selalu menjadi tantangan ). Tetapi dalam kenyataannya banyak hal yang ingin kita gunakan kembali adalah cara melakukan sesuatu, menggunakan semacam templat untuk membangun solusi untuk masalah tertentu - ini adalah Pola. Jadi Anda sampai pada kasus di mana Anda mengatakan bahwa pendekatan yang baik untuk menyelesaikan masalah X adalah dengan menggunakan Pola Y dan kita tahu bahwa elemen-elemen dari pola Y adalah a, b dan c dan kita pergi. Karena polanya dipahami secara luas, Anda tidak perlu menjelaskan secara mendalam yang merupakan manfaat komunikasi.

Apa yang menghibur tentang pola adalah bahwa bahasa dan kerangka kerja berkembang untuk memberikan dukungan yang lebih baik untuk pola umum dengan efek bersih bahwa kita mendapatkan lebih banyak dan lebih baik penggunaan kembali kode (semakin banyak batu bata lego!) Karena cara kita membangun aplikasi (dengan menerapkan pola ) memfasilitasi penggunaan kembali.

Murph
sumber
4

Pola desain adalah batu bata yang dikenal sebagai solusi perangkat lunak apa pun. Mereka penting karena alasan berikut:

  1. Mereka adalah agnostik bahasa. Setelah Anda tahu pola desain apa yang sesuai untuk masalah / arsitektur / tugas yang diberikan, Anda dapat menerapkannya dalam bahasa multi-paradigma - biarkan C #, Java atau Python - solusinya dalam banyak kasus akan sama, Anda hanya perlu untuk mengadaptasi sintaks. Ini berarti bahwa Anda dapat mentransfer pengalaman Anda dari pemrograman dalam satu bahasa ke bahasa lain selama Anda tetap berada dalam domain masalah yang sama (dan mungkin bahkan lintas domain).

  2. Terlepas dari kenyataan bahwa pola desain memiliki ikatan dengan paradigma pemrograman , yang berarti bahwa pola desain untuk pemrograman berorientasi objek (yang paling terkenal, juga dikenal sebagai pola "Geng Empat" ). Pola memungkinkan Anda memahami paradigma apa yang terbaik dan membantu Anda melampaui sintaksis saja. Sebagai contoh, saya telah melihat banyak implementasi dalam C # dan Java di mana orang hanya memprogram cara mereka melakukannya di Basic atau Fortran - mereka memiliki pikiran imperatif sempurna untuk menyelesaikan masalah dan mereka menggunakan OOP hanya untuk memberikan solusi ini - tidak ada warisan, tidak ada polimorfisme, semua metode bersifat publik dll. Pola desain membantu Anda untuk melihat di belakang konsep-konsep ini dan melihat bagaimana mereka bekerja dalam kehidupan nyata. Hal yang sama berlaku untuk pola desain dalam paradigma lain, seperti pemrograman fungsional.

  3. Pola umumnya merupakan cara praktis untuk merepresentasikan ide dan datang ke Ilmu Komputer dari arsitektur. Setelah Anda memahami ide di balik "pola" tertentu, Anda dapat dengan mudah mengenali pola ini di beberapa masalah lain dan menyelesaikannya menggunakan pola ini (mungkin sedikit dimodifikasi untuk mengatasi masalah Anda dengan lebih baik). Ada banyak pola yang berbeda: dalam Integrasi Perangkat Lunak Perusahaan , dalam Pengujian Kode Sumber dll. Cukup cari pola dalam buku untuk Ilmu Komputer.

  4. Selain memperoleh praktik yang baik dengan mempelajari pola, Anda dapat dengan mudah mempelajari cara menghindari kesalahan konyol dalam kode Anda dengan mempelajari anti-pola . Ada banyak buku yang menampilkan kesalahan umum dalam domain yang berbeda dalam bentuk anti-pola yang sangat menghibur dan sekaligus mendidik. Ngomong-ngomong, aku suka nama-nama anti-pola ini!

Alexander Galkin
sumber
2

Anda dapat menganggap suatu pola sebagai cara yang terbukti untuk menyelesaikan masalah yang Anda dan pengembang lainnya pahami. Misalnya, masalahnya adalah membuat daftar data yang diurutkan, maka Anda dapat memilih untuk menggunakan daftar yang ditautkan, atau memasukkan data ke dalam vektor dan mengurutkan. Anda mungkin memahami kedua opsi ini karena Anda mungkin sudah tahu pola daftar tertaut atau memuat dan mengurutkan pola vektor. Anda mungkin mengetahui pro dan kontra dari masing-masing dan tidak perlu melihat implementasinya untuk memahami apa yang sedang terjadi.

adam f
sumber
1

Saya pikir Anda adalah pemula untuk pemrograman, saya tidak menyarankan Anda belajar pola desain lebih awal. Pola desain Belajar dan Memahami perlu didasarkan pada pengalaman pengembangan perangkat lunak. Anda harus lebih banyak berlatih kode dan menemukan gaya kode mana yang buruk dan kemudian mempelajari pola desain untuk meningkatkan desain.

Tandai xie
sumber
1

Kegunaan pola desain tergantung dari bahasa yang Anda pilih. Bahasa yang lebih kuat yang Anda pilih semakin sedikit Anda perlu memahami dan menerapkan desain patters. Pola desain mungkin merupakan sinyal bahwa bahasa Anda payah tidak memiliki fitur bawaan.

Joe Gregorio berbicara tentang kurangnya pola desain Python

Cesar Canassa
sumber
Terima kasih atas tautan tentang kurangnya pola desain di Python. Edit: Ups !! Video telah dihapus dari lokasi itu !! :(
Saurabh Patil
0

Pola desain adalah solusi untuk masalah umum yang dihadapi dalam pengembangan perangkat lunak. Selalu ada lebih dari satu solusi untuk beberapa masalah, dan pola desain membantu Anda untuk memutuskan solusi mana yang terbaik dengan memberikan Anda serangkaian solusi yang baik untuk masalah-masalah umum ini.

Mansuro
sumber