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?
java
design-patterns
Roy James Schumacher
sumber
sumber
Jawaban:
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".
sumber
Dari artikel wikipedia tentang Pola Desain :
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!
sumber
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.
sumber
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.
sumber
Pola desain adalah batu bata yang dikenal sebagai solusi perangkat lunak apa pun. Mereka penting karena alasan berikut:
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).
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.
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.
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!
sumber
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.
sumber
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.
sumber
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
payahtidak memiliki fitur bawaan.Joe Gregorio berbicara tentang kurangnya pola desain Python
sumber
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.
sumber