Wzorzec projektowy (informatyka)
Wzorzec projektowy (ang. design pattern) – w inżynierii oprogramowania, uniwersalne, sprawdzone w praktyce rozwiązanie często pojawiających się, powtarzalnych problemów projektowych. Pokazuje powiązania i zależności pomiędzy klasami oraz obiektami i ułatwia tworzenie, modyfikację oraz pielęgnację kodu źródłowego. Jest opisem rozwiązania, a nie jego implementacją. Wzorce projektowe stosowane są w projektach wykorzystujących programowanie obiektowe.
Spis treści |
Historia [edytuj]
Wzorce projektowe w informatyce wywodzą się z wzorców projektowych w architekturze, które zostały zaproponowane przez amerykańskiego architekta Christophera Alexandra[1] [2] i miały ułatwić konstruowanie mieszkań i pomieszczeń biurowych. Pomysł ten nie został jednak przyjęty.
Inaczej stało się w informatyce. Termin wzorca projektowego został wprowadzony do inżynierii oprogramowania przez Kenta Becka oraz Warda Cunninghama w 1987 roku. Na konferencji OOPSLA, przedstawili oni wyniki swojego eksperymentu dotyczącego ich zastosowania w programowaniu. Został spopularyzowany w 1995 przez tzw. Bandę Czterech (Erich Gamma, Richard Helm, Ralph Johnson oraz John Vlissides) dzięki książce Inżynieria oprogramowania: Wzorce projektowe[3].
Wzorce rozwiązań [edytuj]
Wzorce projektowe najczęściej tworzone są w oparciu o programowanie obiektowe. Zakres tego pojęcia stał się problemem rozważanym od połowy lat 90. XX wieku. Ostatecznie ustalono, że algorytmy nie są wzorcami projektowymi, jako że rozwiązują problemy obliczeniowe, a nie projektowe. Wzorce często są łączone w celu rozwiązania bardziej złożonego problemu.
Zamiast skupiać się na funkcjonowaniu poszczególnych elementów, wzorce projektowe stanowią abstrakcyjny opis zależności pomiędzy klasami, co w efekcie wprowadza pewną standaryzację kodu oraz zwiększa jego zrozumiałość, wydajność i niezawodność. Wartość wzorców projektowych stanowi nie tylko samo rozwiązanie problemu, ale także dokumentacja, która wyjaśnia cel, działanie, zalety danego rozwiązania, co pomaga w łatwiejszym stosowaniu i adaptacji wzorców w danym zastosowaniu.
Wzorce projektowe mogą przyspieszyć proces rozwoju oprogramowania przez dostarczenie wypróbowanych rozwiązań dla problemów, które mogą nie być oczywiste na początku procesu projektowego. Często zagadnienia te wiążą się z ewolucją oczekiwań względem projektowanego systemu: rozszerzeniem jego funkcjonalności, zmianą sposobu i formatu wprowadzanych danych czy dostosowaniem aplikacji do różnych klas użytkowników. Nieuwzględnienie ich na początku procesu rozwoju produktu programistycznego powoduje często konieczność gruntownego przebudowywania zaawansowanego lub gotowego już oprogramowania.
Elementy wzorca [edytuj]
Wzorzec projektowy składa się z czterech podstawowych elementów:
- nazwy wzorca;
- problemu – opisuje sposoby rozpoznawania sytuacji, w których możemy zastosować dany wzorzec oraz warunki jakie muszą zostać spełnione, by jego zastosowanie miało sens;
- rozwiązania – opisuje elementy rozwiązania: ich relacje, powiązania oraz obowiązki, zawiera także wskazówki implementacyjne dla różnych technologii;
- konsekwencji – zestawienie wad i zalet stosowania wzorca, uwzględniające informacje o jego brakach oraz kosztach rozwoju i utrzymania systemu wykorzystującego dany wzorzec.
Dokumentacja [edytuj]
Dokumentacja wzorca projektowego powinna zawierać informacje o rozwiązywanym problemie, kontekst w jakim należy go stosować oraz sugerowane rozwiązanie. Różni autorzy mogą stosować odmienne style tworzenia takiej dokumentacji, ale zwykle jej najważniejsze elementy są do siebie podobne. Jeden z najpopularniejszych układów opisu wzorca projektowego został zaproponowany przez Bandę Czterech [4]
- 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.
Klasyfikacja podstawowa [edytuj]
Początkowo Banda Czterech założyła, że istnieją dwa podstawowe rodzaje klasyfikacji wzorców[5]. Pierwsza z nich dotyczy rodzaju wzorca i opisuje to, co on robi. Według tego kryterium wzorce możemy podzielić na trzy rodziny:
- kreacyjne (konstrukcyjne) – opisujące proces tworzenia nowych obiektów; ich zadaniem jest tworzenie, inicjalizacja oraz konfiguracja obiektów, klas oraz innych typów danych[6];
- strukturalne – opisujące struktury powiązanych ze sobą obiektów;
- czynnościowe – opisujące zachowanie i odpowiedzialność współpracujących ze sobą obiektów.
Drugi model dzieli wzorce na kategorie według ich zakresów. Kategoryzacja polega na określeniu czy wzorzec dotyczy klas, czy obiektów. Tutaj wzorce dzielimy na:
- klasowe – opisujące statyczne związki pomiędzy klasami;
- obiektowe – opisujące dynamiczne związki pomiędzy obiektami.
Uwzględniając powyższe założenia klasyfikacja podstawowych wzorców wygląda następująco:
- wzorce kreacyjne:
- Budowniczy (obiektowy),
- Fabryka abstrakcyjna (obiektowy),
- Metoda wytwórcza (klasowy),
- Prototyp (obiektowy),
- Singleton (obiektowy);
- wzorce strukturalne:
- wzorce czynnościowe (behawioralne):
- Interpreter (klasowy),
- Iterator (obiektowy),
- Łańcuch zobowiązań (obiektowy),
- Mediator (obiektowy),
- Metoda szablonowa (klasowy),
- Obserwator (obiektowy),
- Odwiedzający (obiektowy),
- Pamiątka (obiektowy),
- Polecenie (obiektowy),
- Stan (obiektowy),
- Strategia (obiektowy),
- Zabór Zasobu Jest Inicjalizacją (obiektowy).
Klasyfikacja rozszerzona [edytuj]
W późniejszym okresie pojawiły się inne kategorie wzorców projektowych:
- wzorce współbieżności – definiują sposoby współdziałania wielu obiektów, wątków lub procesów; zaliczany do nich:
- Wzorce odwzorowania O-R – opisują (między innymi) wymianę danych pomiędzy warstwą danych a warstwą logiki biznesowej:
Zobacz też [edytuj]
Przypisy
- ↑ Alexander, Christopher, The Timeless Way of Building, Oxford University Press, 1979, ISBN 978-0-19-502402-9.
- ↑ Alexander Christopher, Sara Ishikawa, Murray Silverstein, The Pattern Language: Towns, Buildings, Construction, Oxford University Press, 1977, ISBN 978-0-19-501919-3.
- ↑ Tytuł oryginalny: "Design Patterns: Elements of Reusable Object-Oriented Software, ISBN: 978-0-201-63361-0
- ↑ Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Inżynieria oprogramowania: Wzorce projektowe (Wyd. II). Warszawa: WNT, 2008, s. 7-9. ISBN 978-83-204-3472-9.
- ↑ Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Inżynieria oprogramowania: Wzorce projektowe (Wyd. II). Warszawa: WNT, 2008, s. 12. ISBN 978-83-204-3472-9.
- ↑ Christopher G. Lasater: Design Patterns. Wordware Publishing (Jones and Bartlett Publishers), 2007, s. 302. ISBN 9781598220315.
Bibliografia [edytuj]
- Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Inżynieria oprogramowania: Wzorce projektowe (Wyd. II). Warszawa: WNT, 2008. ISBN 978-83-204-3472-9.
- Christopher G. Lasater: Design Patterns. Wordware Publishing (Jones and Bartlett Publishers), 2007, s. 302. ISBN 9781598220315.
|
||||||||||||||