Apakah ada buku kanonik tentang pola desain? [Tutup]

49

Saya tertarik mempelajari pola desain dan ingin tahu apa yang dianggap buku tingkat atas dalam mempelajari subjek ini.

Apakah ada buku di luar sana yang merupakan standar de-facto untuk menggambarkan praktik terbaik, metodologi desain, dan informasi bermanfaat lainnya tentang pola desain? Bagaimana dengan buku itu yang membuatnya istimewa?

mW00t
sumber
Saya tidak yakin apakah ini yang Anda pikirkan, tetapi saya menemukan banyak hal pengembangan pintar di Forrst .
Trey Piepmeier
2
Bagaimana dengan judul "Sumber referensi untuk pola desain" atau "Sumber daya pola desain" (karena saya tidak bermaksud "referensi" hanya sebagai "melihat permintaan") dan memindahkan semua daftar barang ke dalam tubuh (atau menghapusnya )?
Untuk beberapa implementasi yang layak, saya biasanya melihat yang ada di dofactory (tidak membeli buku).
Steven Evers
4
Mengingat pertanyaan ini menerima jawaban yang lengkap dan komprehensif, saya telah menutup pertanyaan pola desain lainnya sebagai duplikat dari pertanyaan ini untuk memilihnya sebagai Tanya Jawab kanonik dan pasangan jawaban untuk topik ini.

Jawaban:

58

Pola Desain: Elemen-elemen Perangkat Lunak Berorientasi Objek yang Dapat Digunakan Kembali datang sangat dekat dengan definisi saya tentang sebuah buku kanonik tentang pola desain. Menurut artikel wikipedia-nya (penekanan pada saya):

Tanggal penerbitan asli buku itu adalah 21 Oktober 1994 dengan hak cipta 1995, dan pada Juli 2010, buku itu berada dalam cetakan ke - 38 . Buku ini pertama kali tersedia untuk umum pada pertemuan OOPSLA yang diadakan di Portland, Oregon, pada Oktober 1994. Buku ini sangat berpengaruh pada bidang rekayasa perangkat lunak dan dianggap sebagai sumber penting bagi teori dan praktik desain berorientasi objek. Lebih dari 500.000 eksemplar telah terjual dalam bahasa Inggris dan 13 bahasa lainnya .

Ward Cunningham , pelopor pola desain, mengelola katalog online pola-pola buku di WikiWikiWeb . Dan menurut artikel Wikipedia tentang pola desain (sekali lagi, beri penekanan pada saya):

Pola desain memperoleh popularitas dalam ilmu komputer setelah buku Pola Desain: Unsur-unsur Perangkat Lunak Berorientasi Objek yang Dapat Digunakan Kembali diterbitkan pada tahun 1994 oleh apa yang disebut "Geng Empat" (Gamma et al.).

Ada beberapa buku lain yang dirujuk dalam artikel yang sama dengan yang terkenal dalam genre:

Dari semua yang saya baca buku Fowler, itu sangat berpengaruh dan bacaan yang bagus. Pada titik-titik tertentu rasanya sedikit tidak jelas untuk seleraku, tetapi secara keseluruhan itu adalah buku yang menyenangkan. Ada katalog online dari pola-pola yang disertakan dalam buku ini, dengan deskripsi minimal.

Saya juga membaca sekilas Pola Desain Kepala Pertama, dan jika Anda telah membaca buku lain dari seri Kepala Pertama, kualitasnya sama dan menyenangkan seperti kebanyakan buku dalam seri ini :

Head First adalah serangkaian buku instruksional pengantar untuk banyak topik, yang diterbitkan oleh O'Reilly Media. Ini menekankan kombinasi teka-teki, lelucon, desain dan tata letak yang tidak standar, intensif secara visual, melibatkan pembaca, dan gaya percakapan yang menarik untuk membenamkan pembaca dalam topik yang diberikan.

Istilah "pola desain" agak kabur, karena setiap solusi umum yang dapat digunakan kembali dapat dianggap sebagai pola desain. Saya selalu memperhatikan kecenderungan untuk menerapkan label pada solusi yang dijelaskan dalam salah satu buku terkenal yang saya daftarkan di atas, dan lebih khusus lagi buku Gang Empat dan Fowler. Pola desain tidak mengikuti proses pengembangan yang unik, mereka adalah solusi perangkat lunak normal yang kebetulan sangat dapat digunakan kembali dan mereka sangat sulit untuk diidentifikasi .

Tetapi jika Anda membandingkan katalog online untuk kedua buku dengan isi buku khusus bahasa Anda akan melihat bahwa mereka sering digunakan sebagai templat. Jadi saya akan mengatakan bahwa kedua buku sangat dekat menjadi referensi kanonik, dengan buku GoF menjadi yang lebih penting dari perspektif sejarah, meskipun kedua buku terbatas pada pemrograman berorientasi objek .

yannis
sumber
2
+1. Sebenarnya saya ingin memberi Anda +5 tetapi sayangnya itu tidak diizinkan.
Dipan Mehta
Seluruh seri Arsitektur Perangkat Lunak Berorientasi Pola adalah tentang pola dalam berbagai jenis sistem - Volume 1 adalah tentang pola dan pola arsitektur yang lintas domain, Volume 2 adalah tentang sistem bersamaan, Volume 3 adalah tentang manajemen sumber daya dalam sistem jaringan / terdistribusi, Volume 4 adalah tentang sistem terdistribusi, dan Volume 5 adalah tentang bahasa pola serta referensi untuk 4 volume lainnya. Mengingat pertanyaan itu, saya pikir Volume 5 mungkin juga berlaku, tetapi saya belum menghabiskan terlalu banyak waktu dengannya ... belum.
Thomas Owens
@Yannis yang satu ini dan kepala pertama umumnya didasarkan pada bahasa yang diketik statis. Apakah ada buku bagus untuk bahasa dinamis seperti python.
ravi404
@ ravi404 norvig.com/design-patterns
whytheq
27

Buku Geng Empat - Pola Desain: Elemen-elemen Perangkat Lunak Berorientasi Objek yang Dapat Digunakan Kembali mungkin adalah hal terdekat yang kita miliki dengan standar industri tentang pola desain.

Untuk pengantar yang lebih mudah diakses, Head First: Pola Desain juga bagus. Jangan tertunda oleh sampul 'trendi', karena ini adalah bacaan yang baik dan mungkin akan membantu Anda memahami konsep-konsep dalam buku GoF jauh lebih mudah jika Anda membacanya terlebih dahulu.

richeym
sumber
23

Pola Desain Kepala Pertama

Pada saat tertentu, di suatu tempat di dunia seseorang berjuang dengan masalah desain perangkat lunak yang sama yang Anda miliki. Anda tahu Anda tidak ingin menemukan kembali roda (atau lebih buruk, ban kempes), jadi Anda melihat Pola Desain - pelajaran yang dipetik oleh mereka yang pernah menghadapi masalah yang sama. Dengan Pola Desain, Anda dapat memanfaatkan praktik terbaik dan pengalaman orang lain, sehingga Anda dapat menghabiskan waktu Anda untuk ... sesuatu yang lain. Sesuatu yang lebih menantang. Sesuatu yang lebih kompleks. Sesuatu yang lebih menyenangkan.

Anda ingin belajar tentang pola-pola yang penting - mengapa menggunakannya, kapan menggunakannya, bagaimana menggunakannya (dan kapan TIDAK menggunakannya). Tetapi Anda tidak hanya ingin melihat bagaimana pola terlihat dalam sebuah buku, Anda ingin tahu bagaimana mereka terlihat "di alam liar". Di lingkungan asalnya. Dengan kata lain, dalam aplikasi dunia nyata. Anda juga ingin mempelajari bagaimana pola digunakan dalam Java API, dan bagaimana cara mengeksploitasi dukungan pola bawaan Java dalam kode Anda sendiri.

Anda ingin mempelajari prinsip-prinsip desain OO yang sebenarnya dan mengapa segala sesuatu yang bos Anda katakan tentang warisan mungkin salah (dan apa yang harus dilakukan sebagai gantinya). Anda ingin belajar bagaimana prinsip-prinsip itu akan membantu saat Anda berada di sungai tanpa pola desain.

Yang paling penting, Anda ingin mempelajari "bahasa rahasia" Pola Desain sehingga Anda bisa bertahan dengan rekan kerja Anda (dan mengesankan tamu pesta koktail) ketika ia dengan santai menyebutkan penggunaan Command, Facade, Proxy, dan Pabrik di antara menyeruput martini. Anda akan dengan mudah melawan dengan pemahaman mendalam Anda tentang mengapa Singleton tidak sesederhana kedengarannya, bagaimana Pabrik begitu sering disalahpahami, atau pada hubungan nyata antara Dekorator, Fasad dan Adaptor.

Dengan Head First Design Patterns , Anda akan terhindar dari rasa malu karena berpikir bahwa Dekorator adalah sesuatu dari acara "Trading Spaces" ...

Gordon
sumber
Ini. Ini adalah bacaan yang sangat mudah diakses, dan mengubah cara saya mendekati rekayasa perangkat lunak sepenuhnya.
GSto
2
seluruh seri kepala pertama sangat bagus, terutama untuk pengembang pemula.
Thomas Stock
2
Saya suka buku itu, tetapi benar-benar membenci sampulnya! Seorang rekan non-programmer saya berjalan di kantor saya beberapa hari yang lalu, melihat buku itu dan berkata, " Pola Desainer Kepala Pertama ? Apakah Anda akan masuk ke bisnis fashion?"
Pete
1
@Pete Why cover bisa membuat Anda lebih banyak kesulitan. Dia tampaknya menjalani kehidupan ganda. fishbowl.pastiche.org/2005/08/12/...
Gordon
10

Ya, ada buku terkenal tentang pola desain: Pola Desain: Elemen Perangkat Lunak Berorientasi Objek yang Dapat Digunakan Kembali dan penulis sering disebut "Geng Empat" (GoF) dan direferensikan dalam hampir semua teks tentang pola desain.

Jonas
sumber
Ini bukan buku tentang pola desain. Ini adalah katalog pola. Ada pengantar singkat untuk pola desain di awal, tapi saya tidak berpikir pengantar itu cukup.
Jörg W Mittag
@ JörgWMittag Tidak ada proses unik untuk menciptakan pola desain, pola desain adalah solusi reusable yang relatif kecil. Pola desain dibuat melalui proses normal pengembangan perangkat lunak, yang membedakan mereka adalah kegunaan kembali yang sangat besar. Satu-satunya proses unik yang relevan adalah mengidentifikasi solusi sebagai pola desain, dan katalog melakukannya dengan baik.
yannis
9

Pola desain: elemen perangkat lunak berorientasi objek yang dapat digunakan kembali

teks alternatif

Dari wikipedia :

Pola Desain: Elemen Reusable Object-Oriented Software adalah buku rekayasa perangkat lunak yang menjelaskan solusi berulang untuk masalah umum dalam desain perangkat lunak. Penulis buku itu adalah Erich Gamma, Richard Helm, Ralph Johnson dan John Vlissides dengan kata pengantar oleh Grady Booch. Para penulis sering disebut sebagai Gang of Four, GoF, atau Go4. Buku ini dibagi menjadi dua bagian, dengan dua bab pertama mengeksplorasi kemampuan dan jebakan pemrograman berorientasi objek, dan bab-bab lainnya menjelaskan 23 pola desain perangkat lunak klasik. Buku ini berisi contoh-contoh dalam C ++ dan Smalltalk.

Piers Myers
sumber
3

Salah satu situs web pola desain terbaik di sekitar adalah Ward's Wiki, wiki pertama. Lihat http://c2.com/cgi/wiki?HistoryOfPatterns untuk halaman awal yang bagus di dalamnya.

Pada tahun 1987, Ward dan Kent berkonsultasi dengan Grup Sistem Uji Semikonduktor Tektronix yang mengalami kesulitan dalam menyelesaikan suatu desain. Mereka memutuskan untuk mencoba hal-hal pola yang telah mereka pelajari. Seperti Alexander yang mengatakan bahwa penghuni bangunan harus mendesainnya, Ward dan Kent membiarkan perwakilan pengguna (pelatih dan insinyur lapangan) menyelesaikan desain.

Ward datang dengan lima pola "bahasa" yang membantu perancang pemula memanfaatkan kekuatan Smalltalk dan menghindari kelemahannya ...

Ward dan Kent kagum pada keanggunan (diakui sederhana) dari antarmuka yang dirancang pengguna mereka. Mereka melaporkan hasil percobaan ini di OOPSLA 87 di Orlando. Mereka menulis posisi panel, dan disajikan di bengkel Norm Kerth tentang dari mana benda-benda itu berasal? Mereka berbicara pola sampai wajah mereka biru, dan mendapat banyak persetujuan, tetapi tanpa pola yang lebih konkret tidak ada yang mendaftar.

Sementara itu, Erich Gamma sibuk menulis dan merefleksikan desain berorientasi objek di ET ++ sebagai bagian dari tesis PhD-nya. Erich menyadari bahwa struktur atau pola desain yang berulang itu penting. Pertanyaannya adalah bagaimana Anda menangkap dan mengkomunikasikannya.

Bruce Anderson memberikan ceramah di TOOLS 90 di mana ErichGamma hadir; Erich menyukai pembicaraan itu. Bruce memberikan makalah di EcoopOopsla90 (Ottawa) dan menjalankan BOF yang disebut Toward an Architecture Handbook di mana ia, Erich Gamma, Richard Helm, dan yang lainnya berdiskusi tentang pola. Itulah pertama kalinya Richard dan Erich bertemu, dan mereka menyadari bahwa mereka berbagi ide-ide umum tentang ide-ide kunci di balik penulisan perangkat lunak OO yang dapat digunakan kembali.

Tepat sebelum ECOOP'91 Erich Gamma dan Richard Helm, duduk di atap di Zurich pada hari musim panas yang terik, mengumpulkan awal yang sangat sederhana dari katalog pola yang akhirnya akan menjadi DesignPatterns ...

Banyak hal benar-benar bergulir di bengkel OOPSLA yang dijalankan Bruce pada 1991. Secara kebetulan, Erich Gamma, Richard Helm, Ralph Johnson, dan John Vlissides ada di sana; mereka kemudian akan menjadi Geng Empat yang menulis buku Pola Desain ...

Gaurav
sumber
2

Saya berpikir bahwa Refactoring to Patterns dapat berguna hanya karena menggambarkan bagaimana desing / kode tertentu dapat di-refactored terhadap pola-pola dalam buku GoF. Ini dapat membantu mengatasi kurva pembelajaran awal. Oh dan itu juga merenungkan 'Kebahagiaan Pola' :)

Anda juga dapat menemukan tiga jilid pertama Arsitektur Perangkat Lunak Berorientasi Pola sebagai bacaan yang bagus.

finrod
sumber
1

Pola desain

Situs tutorial ini berisi sub-bagian berikut

  • Maksud dari masing-masing pola desain
  • Struktur Dunia Nyata untuk pola desain
  • Pernyataan masalah
  • Diskusi terperinci tentang masalah tersebut
  • Daftar periksa tentang cara mencapai suatu pola
  • Aturan praktis saat tiba di pola.
  • Cuplikan kode untuk pola desain yang mencakup C #, C ++, Delphi, Java dan PHP

Situs ini juga berisi panduan tentang Anti Pola, UML, dan Refactoring.

pramodc84
sumber
Situs SourceMaking terlihat sederhana pada pandangan pertama, tetapi ini benar-benar referensi yang bagus. Selain dari pola desain, beberapa antipatterns pengembangan, arsitektur & manajemen proyek lucu. Solusi refactored sebenarnya dapat membantu Anda menyimpan rapat yang keluar dari jalurnya. (Tidak buruk untuk referensi pola desain)
Terserah
1

Buku asli, "Pola Desain: Elemen Perangkat Lunak Berorientasi Objek Reusable" adalah sumber yang bagus untuk pola desain berorientasi objek.

Ada banyak buku lain di luar sana. Ketika saya membutuhkan referensi cepat dan buku GoF saya di luar jangkauan, Wikipedia biasanya memiliki informasi yang cukup tentang hal itu dan pola desain lainnya.

Itu adalah yang utama yang saya gunakan. Perlu juga dicatat bahwa orang sudah mulai menerapkan format pola untuk hal-hal lain, seperti manajemen proyek.

Jika Anda ingin tahu tentang antipatterns, yang harus Anda ketahui, ada dua buku, "AntiPatterns: Perangkat Lunak Refactoring, Arsitektur, dan Proyek dalam Krisis" serta "Refactoring: Meningkatkan Desain Kode yang Ada" yang memiliki bagian tentang kode berbau, nama lain untuk antipatterns.

indyK1ng
sumber
1

"Prinsip, Pola, dan Praktek Agile dalam C #" oleh Robert C. Martin. Saya pikir dia juga memiliki buku versi Java.

Juga, bukan pola itu sendiri, tetapi Desain Domain Driven memiliki beberapa konsep hebat bahkan jika Anda tidak menggunakan pendekatan DDD penuh.

  * Ubiquitous Language
  * Code first approach (vs. DB first)
  * etc.

sumber
1

Jika Anda tertarik secara khusus dalam pola desain di C ++ coba Modern C ++ Design oleh Andrei Alexandrescu.

Buku ini berbicara tentang bagaimana menerapkan pola yang umum digunakan seperti Factory, Singleton, dan Visitor di C ++. Ini juga berbicara tentang sangat C ++ - topik spesifik seperti pointer pintar, metaprogramming template, dan desain kelas berbasis kebijakan.

Penulis buku adalah seorang pakar otoritatif , yang dikenal karena bukunya

pekerjaan perintis pada desain berbasis kebijakan diimplementasikan melalui metaprogramming template. Ide-ide ini diartikulasikan dalam bukunya Modern C ++ Design dan pertama kali diterapkan di perpustakaan pemrogramannya, Loki. Dia juga menerapkan konsep "pindahkan konstruktor" di perpustakaan MOJO-nya. Ia berkontribusi pada Jurnal Pengguna C / C ++ di bawah judul "Generik <Program>" ...

Dima
sumber
1
maukah Anda menjelaskan lebih banyak tentang apa yang dilakukannya dan apa manfaatnya? "Jawaban khusus tautan" tidak diterima di Stack Exchange
agas
@gnat: bagaimana ini?
Dima
baik suntingan terbaru Anda tentu terlihat perbaikan bagi saya. Meskipun pembaca jawaban mungkin akan mendapat manfaat dari penjelasan yang lebih terperinci tentang siapa itu Aleksandresku
nyamuk
@gnat: karena Anda jelas tahu siapa dia, silakan edit jawaban saya.
Dima