Wzorce projektowe
Wzorce projektowe - są informatycznym określeniem zbioru sprawdzonych i wypróbowanych teorii w programowaniu obiektowym, którymi można najczęściej posługiwać się podczas występujących problemów programistycznych. Ukazuje powiązania i zależności między klasami i obiektami i ułatwia kreowanie, modyfikowanie oraz pielęgnacje kodu źródłowego.
TL;DR
Wzorce projektowe są sprawdzonymi i wypróbowanymi teoriami w programowaniu obiektowym, które ułatwiają rozwiązywanie problemów programistycznych. Składają się z nazwy wzorca, opisu problemu, rozwiązania i konsekwencji. Wzorce projektowe pochodzą z architektury i zostały wprowadzone do informatyki przez Kent Becka i Warda Cunninghama w 1987 roku. Pomagają w tworzeniu elastycznego oprogramowania i redukują koszty zmian. Wzorce projektowe są ważne przy tworzeniu oprogramowania wielokrotnego użytku i mają wiele korzyści, takich jak zwiększenie zrozumiałości kodu i ułatwienie komunikacji między programistami. Dokumentacja wzorca projektowego powinna zawierać informacje o problemie, kontekście i rozwiązaniu. Istnieje lista najpopularniejszych wzorców projektowych, takich jak Adapter, Dekorator, Fabryka abstrakcyjna i Singleton.
Wzorce składają się z 4 elementów
- Nazwy wzorca - dzięki jednoznacznemu nazewnictwu możemy ułatwić komunikacje pomiędzy osobami w grupie projektowej, wiedząc że każdy mówi o tym samym. Pozwala to również na łatwiejszą analizę dokumentacji i skrócenie fragmentów odpowiadających z dany wzorzec.
- Opis problemu - określa kiedy dany wzorzec projektowy może być zastosowany. Czasami w opisie znajduje się algorytm lub lista warunków wymaganych do zaistnienia okoliczności których rozwiązanie opisuje wzorzec.
- Rozwiązanie - opis elementów oraz relacji między nimi które pozwalają na szybkie i sprawdzone rozwiązanie opisywanego problemu. Rozwiązanie nie jest nigdy konkretnym projektem lub konkretną implementacja, a raczej szablonem do zastosowania
- Konsekwencje - opis jakie są zyski, koszty oraz oczekiwane efekty w momencie zastosowania wzorca. Dobrze opisane konsekwencje pozwalają na świadome podjęcie decyzji o wykorzystaniu danego wzorca.
Historia
Wzorce projektowe w informatyce pochodzą z wzorców projektowych w architekturze, które były zapropowane przez austriackiego architekta Christophera Alexandra i na celu miały ułatwić projektowanie mieszkań, przestrzeni oraz pomieszczeń biurowych. Jego pomysł jednak nie został pozytywnie przyjęty w praktyce. Inaczej praktyka ta znalazła zastosowanie w informatyce. Pojęcie wzorca projektowego został wprowadzony do inżynierii oprogramowania dzięki dwóm informatykom, Kent Beck i Ward Cunningham w 1987 roku. Na konferencji OOPSLA, upublicznili oni wyniki swojego eksperymentu który dotyczył zastosowania w programowaniu. Twórcami koncepcji wzorców jest Eric Gamma, Richard Helm, Ralph Johnson, John Vlissides, nazwanych "Bandą czworga". Są autorami książki "Wzorce projektowe. Elementy oprogramowania wielokrotnego użytku, gdzie opisują 23 podstawowe wzorce projektowe.
Wzorce projektowe a tworzenie oprogramowania
Programowanie obiektowe opiera się na tworzeniu obiektów, które mają swoje odpowiedniki w modelu biznesowym danej aplikacji. Dzięki temu architektura systemu informatycznego zbliża się do modelu opisywanego wycinka rzeczywistości. Wzorce projektowe pomagają programiście na identyfikacje mniej oczywistych abstrakcji systemowych, które nie koniecznie wynikają wprost z przekazanych wymagań - stanowią jednak fundament do tworzenia elastycznego oprogramowania. Przeniesienie dokładnie modelu rzeczywistości do kodu oprogramowania spowodowało by że kod stałby się trudny w utrzymaniu i rozwoju.
Tworzenie oprogramowania wielokrotnego użytku
Wzorce projektowe stanowią ważne narzędzie w tworzeniu oprogramowania wielokrotnego użytku, które wymaga częstych zmian struktury, rozwoju oraz refaktoryzacji (związane to jest np. realizacją nowych wymagań). Wykorzystanie ich w praktyce powoduje ze ilość późniejszych niezbędnych modyfikacji w strukturze programu, a więc do zmniejszenia kosztów zmiany. Jest to związane z cyklem życia oprogramowania obiektowego które przechodzi (w nomenklaturze Briana Foote) fazy prototypów, rozwijania i konsolidowania. Korzyści z zastosowania wzorców projektowych:
- Uniwersalność rozwiązań powoduje łatwiejsze zrozumienie działania aplikacji przez osoby zaznajamiające się z kodem
- Zmniejszenie kosztów zmian przez uelastycznienie kodu i użycie rozszerzalnych rozwiązań
- Stanowią duże ułatwienie w komunikacji pomiędzy programistami
- Są dobrze udokumentowane, a więc nie muszą znajdować się w dokumentacji aplikacji co powoduje zmniejszenie jej objętości
Dokumentacja
Dokumentacja wzorca projektowego musi zawierać informacje o rozwiązywanym problemie, kontekst w jakim należy się nim posługiwać oraz sugerowane rozwiązanie. Różni autorzy mogą wprowadzać w życie odmienne style tworzenia taj oto dokumentacji, ale zwykle jej najistotniejsze elementy są do siebie podobne. Jeden z najczęściej używanych układów opisu wzorca projektowego został zaproponowany przez Bandę Czterech.
- Nazwa wzorca oraz klasyfikacja: opisowa oraz unikalna nazwa, umożliwiająca identyfikację oraz odwoływanie się do wzorca; klasyfikacja według jednego ze schematów.
- Przeznaczenie: opis celu, który stoi za wzorcem oraz powody, jakimi należy się kierować podczas jego wyboru.
- Inne nazwy: jeżeli istnieją inne, dobrze znane nazwy wzorca, należy je podać.
- Motywacja: scenariusz zawierający problem powiązany z kontekstem, w którym wzorzec może być stosowany.
- Stosowalność: sytuacje, w których wzorzec może być użyteczny.
- Struktura: graficzna reprezentacja wzorca, zwykle jako diagram klas lub diagram interakcji.
- Uczestnicy: lista klas i obiektów stosowanych w tym wzorcu oraz ich zobowiązania.
- Współpraca: opis wzajemnej interakcji klas i obiektów wykorzystywanych we wzorcu.
- Konsekwencje: wykaz wyników, efektów ubocznych oraz kompromisów jakie występują podczas użycia wzorca.
- Implementacja: wskazówki dotyczące implementacji wzorca; zwrócenie uwagi na specyficzne kwestie.
- Przykładowy kod: przykład zastosowania wzorca z wykorzystaniem jednego z języków programowania.
- Przykłady zastosowania: znane przykłady zastosowania wzorca w rzeczywistych programach.
- Pokrewne wzorce: odniesienie wzorca do innych, z którymi wiąże się przez wspólne stosowanie lub można go z nimi zamienić oraz przedstawienie różnic w stosunku do podobnych wzorców.
Lista najpopularniejszych wzorców projektowych
Adapter, Budowniczy, Dekorator, Fabryka abstrakcyjna, Fasada, Interpreter, Iterator Kompozyt, Łańcuch zobowiązań, Mediator, Metoda szablonowa, Metoda wybiórcza, Most, Obserwator, Odwiedzający, Pamiątka, Pomocnik, Plecenie, Prototyp, Pyłek, Singleton, Stan, Strategia
Wzorce projektowe — artykuły polecane |
Ontologia — Behavior driven development — Programowanie obiektowe — Test driven development — Program komputerowy — Projektowanie systemów informatycznych — UML — Programowanie strukturalne — SQL |
Bibliografia
- Chak D. (2010), Rails. Projektowanie systemow klasy enterprice, Helion, Gliwice
- Chmielarz W. (2014), Metoda konfrontacyjna projektowania wzorcowego systemów informatycznych jako realizacja idei projektowania poprzez usługi, Uniwersytet Warszawski
- Craig L. (2011), UML i wzorce projektowe. Analiza i projektowanie obiektowe oraz iteracyjny model wytwarzania aplikacji, Helion, Gliwice
- Darwin I. (2011), Java. Receptury, Helion, Gliwice
- Gamma E., Helm R., Johnson R., Vlissides J. (2010), Wzorce projektowe, Helion, Gliwice
Autor: Łukasz Matug, Łukasz Jakosz