Jak wyjaśnić wzorce projektowe osobom spoza świata oprogramowania

10

Chcę wyjaśnić wzorce projektowe mojej siostrzenicy, ale zawsze mam z tym trudności. Jest to w dużej mierze spowodowane moim brakiem jasnego zrozumienia wzorców projektowych. Jak sugerujesz wyjaśnienie wzorców takich jak MVC, Singleton, Fabryka, Repozytorium itp. W tak prostych terminach, że nawet dzieci w wieku 10 lat mogą to zrozumieć.

Szukam przykładów, które mogą ułatwić zrozumienie wzorców. Przykłady z zabawkami, filmami, muzyką itp.

gizgok
źródło
2
Wzorce projektowe dotyczą rozwoju oprogramowania, czym jest teoria kategorii dla matematyki. . . przynajmniej tak wytłumaczyłbym matematykowi.
Eric Wilson
To tak, jakby czytać sekcje odpowiedzi w łamigłówkach. Nie będziesz znać odpowiedzi na każdą łamigłówkę, ale będziesz wiedział na większość i będziesz wiedział, od czego zacząć układankę, na którą nie widziałeś odpowiedzi.
StuperUser,

Odpowiedzi:

7

Myślę, że początek artykułu w Wikipedii to prawdopodobnie dobry początek:

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

A może chcesz wyjaśnić specyfikę tych konkretnych wzorów?

Charlie
źródło
szukam szczegółów
gizgok
1
Istnieje również prosta wikipedia, secure.wikimedia.org/wikipedia/simple/wiki/Design_pattern
Jeff Welling
2
@gizgok: „specifics”? To niedorzeczne. Podaj - szczegółowo - czego więcej możesz chcieć. Pragnienie „specyfiki” jest niejasne.
S.Lott
5

To zależy, dlaczego chcesz to wyjaśnić. Jeśli chcesz po prostu wyjaśnić ideę wzorów, skorzystam z przykładów architektury w A Pattern Language. Ci badacze odkryli, że pewne aspekty budynku lub pokoju sprawiły, że ludzie lubią mieszkać lub pracować w tym budynku lub pokoju - na całym świecie w różnych kulturach, z różnymi materiałami budowlanymi i w różnych rodzajach dzielnic. Na przykład „Światło na dwóch stronach”. Pokoje z oknami na dwóch ścianach są o wiele ładniejsze niż te z tylko jedną (lub żadną). W oprogramowaniu są też takie wzorce - nawet przy użyciu różnych języków programowania, niektóre wzorce się powtarzają. A nawet w zupełnie innym oprogramowaniu - gra, coś do obliczeń finansowych, silnik na Facebooku i tak dalej.

Następnie, jeśli chcesz porozmawiać o konkretnym wzorze (nie jestem pewien, dlaczego, dla dziesięciolatka), możesz zacząć od podania przykładów jego zastosowania, zanim spróbujesz wyjaśnić, jak to działa. Tak więc Composite pozwala uniknąć jawnej rekurencji, gdy zastanawiasz się nad wagą walizki, sumując wagę kontenera i sumę wszystkich pojemników i luźnych rzeczy, które on posiada, ale działa również do obliczania ciężaru wynagrodzenia w korporacji lub pojemność w kompleksie produkcyjnym. Jeśli jest to trochę interesujące dla dziesięciolatka, możesz spróbować wyjaśnić, jak to działa.

Kate Gregory
źródło
1
bo 10-latkowie chcą zostać hakerem
gizgok
2

Istnieją wzorce projektowe, ponieważ niektórzy zdawali sobie sprawę, że istnieją sposoby na dobre współdziałanie oprogramowania i chcieli podzielić się swoimi spostrzeżeniami.

Możesz myśleć o wzorach projektowych w taki sam sposób, jak myślisz o grupach ludzi. Na przykład czasami mamy jedną osobę, która ułatwia wszystkie nasze spotkania. To jest jak wzorzec kontrolera, który ułatwia interakcje między obiektami.

Albo wyobraź sobie publiczność, w której ktoś z przodu pokoju patrzy, jak ludzie podnoszą ręce, a następnie powtarza pytanie, aby wszyscy inni mogli go usłyszeć, lub może zareagował, odpowiadając na nie. To byłoby podobne do wzorca podmiotu / obserwatora.

Istnieją wzorce, które zachowują się jak tłumacze (wzorzec adaptera), jak ochroniarze (proxy), eksperci w danej dziedzinie (singletony) lub jak ludzie, którzy sprawdzają, czy twój samochód działa (walidatory).

Różnica między obiektami a ludźmi polega na tym, że możemy stworzyć tyle obiektów, ile chcemy i mieć wiele różnych ich kopii. Dlatego ważne jest, aby zrozumieć, jakie obowiązki powinny mieć obiekty, ograniczyć ich obowiązki i starać się nie powielać tego, co robią, aby oprogramowanie nie stało się zbyt skomplikowane. Eksperci mają duże doświadczenie w tym zakresie i dali nam te wzorce, w jaki sposób efektywne oprogramowanie współpracuje, abyśmy mogli zdecydować, jaka rola jest najlepszą metaforą pracy, którą próbujemy wykonać, i uzyskać oprogramowanie do współpracy w najbardziej odpowiedni sposób.

Lunivore
źródło
1

Powiedz jej, że są one wykorzystywane do budowania poszczególnych elementów systemu, podobnie jak techniki gotowania są wykorzystywane do przygotowania posiłku / dania. Wyobraź sobie, że robisz obiad z ziemniakami, mięsem i warzywami. Ty decydujesz, że chcesz ziemniaki gotowane i puree, mięso z grilla i warzywa gotowane na parze. Używasz wzoru do grillowania, aby gotować wzory mięsa, gotowania i zacieru dla ziemniaków i wzór pary dla warzywa.

kett_chup
źródło
1

Większość z tych wzorów projektowych jest częścią projektowania obiektowego. Naprawdę nie możesz ich wyjaśnić komuś, kto nie rozumie OOD. Możesz opisać cel, który osiągasz za pomocą danego wzorca, ale nie sposób jego działania ani dlaczego go potrzebujesz. Chyba że oczywiście zaczniesz wyjaśniać cały OOD.

vartec
źródło
1
Większość wzorców projektowych to instrukcje dotyczące korzystania z odpowiednich abstrakcji w celu rozwiązania określonego problemu. Tak naprawdę nie są częścią projektowania obiektowego.
Pemdas
@Pemdas: na przykład Fabryka. Jaki sens ma poza OOP?
vartec
OOP jest tam, gdzie najczęściej mówi się o wzorcach, ale w innych językach i mają własne zestawy wzorców. Na przykład Monady (często spotykane w językach funkcjonalnych, czasem mogą być wykonywane w OOP) są wzorem samych siebie i umożliwiają inne wzorce. Ponadto, jak już wspomniano, wzorce projektowe przyszły do ​​programowania z architektury.
Charlie
Wzory projektowe nie mają nic wspólnego z OOP. Wzorce projektowe dotyczą ciągle pojawiających się problemów i strategii opracowanych w celu ich rozwiązania. Jeśli strategia jest rozwijana wielokrotnie, masz pewien wzorzec. Jeśli strategia wielokrotnie działa, to nazywasz ją wzorcem projektowym, jeśli wielokrotnie się nie udaje, nazywasz ją anty-wzorem. Poznanie wzorców projektowych oznacza strategie uczenia się, które działały wielokrotnie. Widzisz, jak w ogóle nie wspominałem o programowaniu, a tym bardziej OOP?
gnasher729
0

Wzory projektowe zostały po raz pierwszy opisane dla architektury. Rzeczy takie jak lokalizacja kwadratu, budynki i inne ogólnie powtarzane układy. Możesz zacząć od tego. Rzeczy takie jak główne wejście wychodzą na ulicę, drzwi w stronę rogu pokoju i wszystko inne, co możesz wymyślić. Wzory oryginalnego autora nie były szeroko stosowane. Mówi się, że teraz stwierdza, że ​​same wzorce nie są wystarczające.

Omów przenoszenie rzeczy po pokoju. Postaw krzesło przed drzwiami. Czy sensownie byłoby przenieść okna lub drzwi w inne miejsce? Dlaczego lub dlaczego nie?

Spróbuj czegoś takiego jak ustawienie miejsca przy stole. Spróbuj uporządkować rzeczy według wielkości, odsuwając się od ciebie. Nie jest to normalny wzór i ciężko z nim pracować. Ustaw to normalnie. Czy to odpowiedni układ na szybką szklankę soku? Wzory nie zawsze są odpowiednie.

Cały czas żyjemy wzorami. Weź trzy lub cztery książki i zacznij przeglądać je. W układzie jest oczywisty wzór; strona tytułowa, spis treści, treść i indeks. Nie wszystkie elementy są wymagane, ale byłoby mylące widzieć je nie na miejscu.

BillThor
źródło
0

Wzory projektowe służą do tworzenia oprogramowania, a przyrządy do obróbki drewna. Jest to narzędzie, za pomocą którego można wykonywać dobrze znane „cięcia” do stosowania w większych projektach.

Pamiętaj, że nie potrzebujesz przyrządu do cięcia, w niektórych okolicznościach jest to po prostu łatwiejsze.

Steven Evers
źródło
0

Wydaje mi się, że moja druga odpowiedź dotyczy ogólnego przypadku, ale OP skomentował pytanie o szczegóły (więc czułem, że zasługuje na osobną odpowiedź). Niestety nie znam wzoru Repozytorium, ale spróbuję dźgnąć pozostałych. Z reguły uważam, że najlepszym sposobem na ich wyjaśnienie jest to, jaki problem chcesz rozwiązać, dlaczego chcesz go rozwiązać i jak go rozwiązać.

Singel

Ten wzór jest używany, gdy chcemy zagwarantować, że jest tylko jedno z czegoś. Wzorzec ten osiąga się, uniemożliwiając innym tworzenie naszego obiektu.

Wikipedia

MVC

Ten wzorzec służy do zachowania modułowości przy wszystkich korzyściach z tym związanych. Widok to „interfejs użytkownika”, Model to dane (w tym logika biznesowa), a Kontroler to sposób, w jaki działania użytkownika manipulują modelem. Dzięki tej modułowości nic nie powstrzymuje mnie od posiadania wielu widoków / kontrolerów do pracy z tym samym modelem. Dla zbyt uproszczonego przykładu mogę komunikować się z pocztą e-mail („model”) za pośrednictwem strony internetowej, aplikacji komputerowej i mojego iPhone'a („widoki + kontrolery”). Jeśli mam wspólną skrzynkę pocztową grupy, mógłbym utworzyć kontroler, który nie wysyłałby wiadomości e-mail, i ponownie użyć tego samego widoku aplikacji i wiadomości e-mail. (tak, zbyt uproszczone, ale mam nadzieję, że zrozumiałe :))

Dodatkowo, przy tak dobrze zdefiniowanym oddzieleniu obaw, zmiany w jednym (najlepiej) nie wymagają zmian w innym. Konkretny przykład, jeśli muszę obsługiwać odczyt / zapis do bazy danych MySQL zamiast bazy danych Oracle, musiałbym tylko zmienić mój model, a mój widok / kontroler się nie zmienia.

Wikipedia

Fabryka

Trzeba tu uważać, ponieważ istnieje wiele podobnych wzorców zwanych Fabryką ... Porozmawiam o Fabryce Abstrakcyjnej , ale powinieneś wiedzieć, że istnieje również wzór Fabrycznej Metody .

Zasadniczo skorzystałbym z fabryki abstrakcyjnej, gdy wiem, jakie kroki chcę wykonać, ale kroki, jak je wykonać, mogą się różnić. Na przykład mógłbym budować aplikację, w której muszę utworzyć okno dialogowe z przyciskiem. Ponieważ mój kod korzysta z hipotetycznej fabryki interfejsu użytkownika, jeśli potrzebuję kodu na Macu lub Linuksie zamiast Windowsa, po prostu udostępniam inną fabrykę, a reszta mojego kodu się nie zmienia. Na przykład potencjalnie bardziej szalony przykład, mógłbym mieć Fabrykę Web i nagle większość kodu tworzącego kopię zapasową mojej aplikacji komputerowej zasila teraz także bogatą stronę internetową :) (ok niepraktyczne z innych powodów, ale teoretycznie :))

Charlie
źródło
0

10-latkowi, który chce być hakerem - powiedziałbym.

Wyobraź sobie, że możesz mieć jednych z najlepszych hakerów na świecie, którzy siedzą obok ciebie, gdy się hakujesz ... i co jakiś czas powiedzieliby ... "wiesz, jeśli zrobisz to w ten sposób ... [wstaw wzór] ... wtedy kod będzie [szybszy / bezpieczniejszy / łatwiejszy w utrzymaniu / itp.] „jak fajnie by to było.

Teraz, gdy zakładam, że podoba jej się ten pomysł - nie marnowałbym czasu na wyjaśnianie każdego wzoru, ustawiłem jej „zadanie hakowania” .. a następnie opublikowałem wzór projektowy i wyjaśniłem wartość ... a potem po prostu wskazałem jej kilka dobre zasoby i zobacz, gdzie to idzie.

Ale przede wszystkim będzie musiała się ich nauczyć poprzez mentoring.

Stephen Bailey
źródło