Bagaimana Anda menjelaskan Pola Desain kepada orang-orang di luar Dunia Perangkat Lunak

10

Saya ingin menjelaskan pola desain kepada keponakan saya, tetapi selalu berjuang untuk melakukannya. Ini sebagian besar disebabkan oleh kurangnya pemahaman saya yang jelas tentang pola desain. Bagaimana Anda menyarankan menjelaskan pola-pola seperti MVC, Singleton, Factory, Repository dll dalam istilah sederhana yang bahkan anak-anak berusia 10 tahun dapat mengerti.

Saya mencari contoh yang dapat memudahkan dalam membantu memahami pola. Contoh dengan mainan, film, musik, dll.

gizgok
sumber
2
Pola desain adalah untuk pengembangan perangkat lunak apa teori kategori untuk matematika. . . setidaknya begitulah cara saya menjelaskannya kepada ahli matematika.
Eric Wilson
Ini seperti membaca bagian jawaban dari buku puzzle. Anda tidak akan tahu jawaban untuk setiap teka-teki, tetapi Anda akan menemukan sebagian besar dan Anda akan tahu harus mulai dari mana untuk teka-teki yang belum Anda lihat jawabannya.
StuperUser

Jawaban:

7

Saya pikir awal artikel Wikipedia mungkin merupakan awal yang baik:

A design pattern is a general reusable solution to a commonly occurring problem.

Atau apakah Anda ingin menjelaskan secara spesifik pola-pola tertentu itu?

Charlie
sumber
mencari spesifik
gizgok
1
Ada juga wikipedia sederhana, secure.wikimedia.org/wikipedia/simple/wiki/Design_pattern
Jeff Welling
2
@ gizgok: "spesifik"? Itu konyol. Tentukan - secara detail - apa lagi yang Anda inginkan. Menginginkan "spesifik" tidak jelas.
S.Lott
5

Itu tergantung mengapa Anda ingin menjelaskannya. Jika Anda hanya ingin menjelaskan ide pola, saya akan mengambil contoh dari arsitektur dalam Bahasa Pola. Para peneliti ini menemukan bahwa aspek-aspek tertentu dari bangunan atau ruangan membuat orang menikmati hidup atau bekerja di gedung atau ruangan itu - di seluruh dunia dalam budaya yang berbeda, dengan bahan bangunan yang berbeda, dan di berbagai jenis lingkungan. Seperti "Cahaya di Dua Sisi" misalnya. Kamar dengan jendela di dua dinding hanya jauh lebih bagus daripada yang hanya memiliki satu (atau tidak ada). Ada pola seperti itu di perangkat lunak juga - bahkan menggunakan bahasa pemrograman yang berbeda, beberapa pola muncul kembali. Dan bahkan dalam perangkat lunak yang sangat berbeda - permainan, sesuatu untuk perhitungan keuangan, mesin di dalam Facebook, dan sebagainya.

Kemudian jika Anda ingin berbicara tentang pola tertentu (tidak yakin mengapa, untuk anak sepuluh tahun) Anda bisa mulai dengan memberikan contoh di mana itu digunakan sebelum Anda mencoba menjelaskan cara kerjanya. Jadi Composite memungkinkan Anda menghindari rekursi eksplisit ketika Anda mencari tahu berat koper dengan menjumlahkan berat wadah dan total semua kontainer dan barang-barang longgar yang dipegangnya, tetapi ia juga berfungsi untuk menghitung beban gaji dalam suatu perusahaan atau kapasitas dalam kompleks manufaktur. Jika itu bahkan sedikit menarik bagi anak berusia sepuluh tahun Anda bisa mencoba menjelaskan cara kerjanya.

Kate Gregory
sumber
1
karena 10 tahun ingin menjadi peretas
gizgok
2

Pola desain ada karena beberapa orang menyadari bahwa ada cara untuk mendapatkan bit perangkat lunak untuk bekerja sama dengan baik, dan ingin berbagi wawasan mereka.

Anda dapat memikirkan pola desain dengan cara yang sama seperti yang Anda pikirkan tentang sekelompok orang. Misalnya, kadang-kadang kita memiliki satu orang yang memfasilitasi semua pertemuan kita. Itu seperti pola Pengendali, yang memfasilitasi interaksi antara objek.

Atau bayangkan audiens, di mana seseorang di depan ruangan mengawasi orang-orang mengangkat tangan mereka, kemudian mengulangi pertanyaan itu sehingga semua orang dapat mendengar, atau mungkin bereaksi dengan menjawabnya. Itu akan mirip dengan pola Subjek / Pengamat.

Ada pola yang berperilaku seperti penerjemah (pola Adaptor), seperti penjaga keamanan (Proxy), seperti ahli dalam bidang (Singletons), atau seperti orang yang memeriksa mobil Anda berfungsi (Validator).

Perbedaan antara objek dan orang adalah kita dapat cukup banyak membuat objek sebanyak yang kita inginkan, dan memiliki banyak salinan yang berbeda. Itu membuatnya penting untuk memahami apa yang seharusnya dimiliki oleh objek, menjaga tanggung jawabnya tetap kecil, dan mencoba untuk tidak menduplikasi apa yang mereka lakukan, sehingga perangkat lunak tidak menjadi terlalu rumit. Para ahli memiliki banyak pengalaman dalam hal ini, dan mereka telah memberi kita pola-pola tentang bagaimana perangkat lunak yang efektif berinteraksi sehingga kita dapat memutuskan jenis peran apa yang merupakan metafora terbaik untuk pekerjaan yang kita coba lakukan, dan mendapatkan potongan perangkat lunak untuk berkolaborasi dengan cara yang paling tepat.

Lunivore
sumber
1

Katakan padanya bahwa mereka digunakan untuk membangun komponen individu dari suatu sistem, seperti teknik memasak digunakan untuk membangun makanan / hidangan. Bayangkan Anda membuat makan malam, dengan kentang, daging, dan sayuran. Anda memutuskan ingin kentang rebus dan dihaluskan, dagingnya dipanggang, dan sayurnya dikukus. Anda menggunakan pola desain panggangan untuk memasak pola daging, rebus dan tumbuk untuk kentang dan pola uap untuk sayuran.

kett_chup
sumber
1

Sebagian besar pola desain ini adalah bagian dari desain berorientasi objek. Anda tidak dapat benar-benar menjelaskannya kepada seseorang yang tidak memahami OOD. Anda bisa menggambarkan tujuan yang Anda capai dengan pola yang diberikan, tetapi bukan cara kerjanya atau mengapa Anda membutuhkannya. Kecuali tentu saja Anda menjelaskan seluruh OOD.

vartec
sumber
1
Kebanyakan pola desain adalah instruksi tentang cara menggunakan abstraksi yang tepat untuk menyelesaikan masalah tertentu. Tidak benar-benar bagian dari desain berorientasi objek per katakan.
Pemdas
@Pemdas: ambil Factory misalnya. Apa artinya itu di luar OOP?
vartec
OOP adalah tempat pola paling banyak dibicarakan, tetapi bahasa lain dan memiliki set pola sendiri. Misalnya Monads (sering ditemukan dalam bahasa Fungsional, kadang-kadang dapat dilakukan dalam OOP) adalah pola mereka sendiri, dan memungkinkan pola lainnya. Selanjutnya, seperti yang telah disebutkan di sini, pola desain datang ke pemrograman dari Arsitektur.
Charlie
Pola desain tidak ada hubungannya dengan OOP. Pola desain adalah tentang masalah yang muncul berulang-ulang, dan strategi yang telah dikembangkan untuk menangani masalah. Jika strategi dikembangkan berulang kali maka Anda memiliki polanya. Jika strategi berulang kali berhasil maka Anda menyebutnya pola desain, jika berulang kali gagal Anda menyebutnya anti-pola. Belajar tentang pola desain berarti strategi belajar yang telah bekerja di masa lalu berulang kali. Lihat bagaimana saya tidak menyebutkan pemrograman sama sekali, apalagi OOP?
gnasher729
0

Pola desain pertama kali dijelaskan untuk arsitektur. Hal-hal seperti lokasi alun-alun, bangunan, dan tata letak yang umumnya berulang. Anda mungkin mulai dari sana. Hal-hal seperti pintu masuk utama menghadap ke jalan, pintu menuju sudut ruangan, dan hal lain yang dapat Anda pikirkan. Pola penulis asli tidak banyak digunakan. Dia dilaporkan sekarang menyatakan bahwa pola itu sendiri tidak cukup.

Diskusikan hal-hal yang bergerak di sekitar ruangan. Letakkan kursi di depan pintu. Apakah masuk akal untuk memindahkan jendela atau pintu ke tempat lain. Mengapa atau mengapa tidak?

Cobalah sesuatu seperti mengatur tempat di meja. Cobalah mengatur berbagai hal berdasarkan ukuran yang menjauh dari Anda. Bukan pola normal dan sulit untuk dikerjakan. Atur secara normal. Apakah ini tata letak yang cocok untuk segelas jus? Pola tidak selalu sesuai.

Kita hidup dengan pola sepanjang waktu. Ambil tiga atau empat buku dan mulailah membaca halaman-halamannya. Ada pola yang jelas dalam tata letak; halaman judul, daftar isi, konten, dan indeks. Tidak semua komponen diperlukan, tetapi akan membingungkan untuk melihatnya tidak pada tempatnya.

BillThor
sumber
0

Pola desain adalah untuk pengembangan perangkat lunak apa jig untuk woodworking. Ini adalah alat yang dengannya Anda dapat membuat 'potongan' yang terkenal untuk digunakan dalam proyek yang lebih besar.

Perhatikan, bahwa Anda tidak perlu jig untuk memotong, itu hanya lebih mudah dalam beberapa keadaan.

Steven Evers
sumber
0

Saya merasa jawaban saya yang lain adalah untuk kasus umum, tetapi OP berkomentar meminta spesifik (jadi saya merasa itu layak mendapat jawaban yang terpisah). Sayangnya saya tidak terbiasa dengan pola Repositori, tetapi saya akan menusuk yang lain. Sebagai aturan, saya pikir cara terbaik untuk menjelaskan ini adalah melalui masalah apa yang ingin Anda selesaikan, mengapa Anda ingin menyelesaikannya dan bagaimana masalah menyelesaikannya.

Singleton

Pola ini digunakan ketika kami ingin menjamin bahwa hanya ada satu hal. Pola ini dicapai dengan mencegah orang lain membuat objek kita.

Wikipedia

MVC

Pola ini digunakan untuk membantu menjaga hal-hal modular dengan semua manfaat yang menyertainya. Tampilan adalah "antarmuka pengguna", Model adalah data (termasuk logika bisnis), dan Pengontrol adalah cara tindakan pengguna memanipulasi model. Dengan modularitas ini, tidak ada yang menghentikan saya dari memiliki banyak tampilan / pengontrol untuk bekerja dengan model yang sama. Untuk contoh yang terlalu sederhana, saya dapat berinteraksi dengan email saya ("model") melalui situs web, aplikasi desktop, dan iPhone saya ("tampilan + pengontrol"). Jika saya memiliki kotak surat grup bersama, saya bisa membuat pengontrol yang tidak akan mengirim email, dan menggunakan kembali tampilan aplikasi dan email yang sama. (ya terlalu sederhana, tapi semoga dapat dimengerti :))

Selain itu, dengan pemisahan keprihatinan yang terdefinisi dengan baik ini, perubahan pada satu (idealnya) tidak memerlukan perubahan pada lainnya. Contoh konkret, jika saya perlu mendukung membaca / menulis ke database MySQL, bukan database Oracle, saya hanya perlu mengubah model saya, dan tampilan / pengontrol saya tidak berubah.

Wikipedia

Pabrik

Harus berhati-hati di sini karena ada banyak pola serupa yang disebut Pabrik ... Saya akan berbicara tentang Pabrik Abstrak , tetapi Anda harus tahu ada juga pola Metode Pabrik .

Pada dasarnya, saya akan menggunakan Pabrik Abstrak ketika saya tahu langkah-langkah apa yang ingin saya lakukan, tetapi langkah-langkah tentang bagaimana mencapai langkah-langkah awal ini bisa bervariasi. Sebagai contoh, saya bisa membangun aplikasi di mana saya perlu membuat kotak dialog dengan tombol di atasnya. Dengan meminta kode saya menggunakan pabrik UI hipotetis, jika saya memerlukan kode saya di Mac atau Linux, bukan Windows, saya hanya menyediakan pabrik yang berbeda, dan sisa kode saya tidak berubah. Sebagai contoh yang berpotensi lebih liar, saya dapat memiliki Pabrik Web dan tiba-tiba sebagian besar kode yang mendukung aplikasi desktop saya sekarang juga memberi daya pada situs web yang kaya :) (ok tidak praktis untuk alasan lain, tetapi secara teori :))

Charlie
sumber
0

Untuk seorang anak berusia 10 tahun yang ingin menjadi seorang peretas - menurut saya.

Bayangkan jika Anda dapat memiliki beberapa peretas terbaik di dunia yang duduk di sebelah Anda ketika Anda meretas .. dan kadang-kadang mereka akan berkata .. "Anda tahu jika Anda melakukannya seperti ini ... [masukkan pola] ... maka kode Anda akan [lebih cepat / lebih aman / lebih dapat dipelihara / etc] "betapa kerennya itu.

Sekarang saya menganggap dia tertarik pada ide - saya tidak akan membuang waktu saya menjelaskan setiap pola saya akan mengaturnya "tugas hacking" .. dan kemudian posting menerapkan pola desain dan menjelaskan nilainya ... kemudian tunjukkan padanya ke beberapa sumber daya yang baik dan lihat ke mana ia pergi.

Tetapi kebanyakan dia perlu mempelajarinya melalui bimbingan.

Stephen Bailey
sumber