Wzorzec projektowy (informatyka)
Z Wikipedii
Wzorzec projektowy (ang. Design pattern) – w inżynierii oprogramowania, uniwersalne, sprawdzone w praktyce rozwiązanie często pojawiających się, powtarzalnych problemów projektowych.
Spis treści |
[edytuj] Historia
Koncepcję uchwycenia idei projektowych jako rodzaju wzorca przypisuje się zwykle amerykańskiemu architektowi nazwiskiem Christopher Alexander[1] [2]. Wzorce Alexandra zostały pomyślane jako zestaw sprawdzonych koncepcji architektonicznych służących konstruowaniu środowiska mieszkalnego i środowiska pracy zarówno dla jednostek jak i dla społeczności. W architekturze pomysł wzorców się nie przyjął.
Termin wzorca projektowego (ang. design pattern) został wprowadzony do inżynierii oprogramowania przez Kenta Becka około 1987 roku a następnie spopularyzowany w 1995 roku w książce Design Patterns autorstwa Gammy, Helma, Johnsona i Vlissidesa (zwanych zwykle "Bandą Czworga" lub "Bandą Czterech" - ang. Gang of Four)[3].
[edytuj] Wzorce rozwiązań
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 doprowadza do pewnej standaryzacji kodu i czyni go bardziej zrozumiałym, efektywniejszym i mniej zawodnym. 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. Nie uwzględnienie ich na początku procesu rozwoju produktu programistycznego powoduje często konieczność gruntownego przebudowywania zaawansowanego lub gotowego już oprogramowania.
[edytuj] Klasyfikacja
"Banda czworga" wyróżniła trzy typy wzorców:
- Wzorce konstrukcyjne (ang. creational design patterns) - wykorzystywane do pozyskiwania obiektów zamiast bezpośredniego tworzenia instancji klas:
- Wzorce strukturalne (ang. structural design patterns) pomagają łączyć obiekty w większe struktury:
- Wzorce czynnościowe (ang. behavioral design patterns) służą do zdefiniowania komunikacji pomiędzy obiektami oraz kontrolowania przepływu danych w złożonej aplikacji.
- Łańcuch odpowiedzialności
- Polecenie
- Interpretator
- Iterator
- Mediator
- Obserwator
- Pamiątka
- Stan
- Strategia
- Metoda szablonu
- Wizytator lub Odwiedzający
[edytuj] Dokumentacja
Dokumentacja wzorca projektowego powinna zawierać dość informacji 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 pochodzi od Bandy Czworga i został podzielony na następujące sekcje:
- Nazwa wzorca projektowego oraz Klasyfikacja
- Każdy wzorzec powinien posiadać opisową oraz unikatową nazwę, która pomaga w jego rozpoznaniu oraz odwoływaniu się do niego. Wzorzec powinien zostać zakwalifikowany zgodnie z pewnym schematem, np. takim, jak ten zaproponowany przez Bandę Czworga. Klasyfikacja ułatwia stosowanie wzorca.
- Intencja
- Opis celu, który stoi za wzorcem oraz powody jakimi się należy kierować podczas jego wyboru.
- Inne nazwy wzorca
- Wzorzec może mieć więcej niż jedną nazwę, co powinno zostać udokumentowane.
- Motywacja
- Scenariusz zawierający problem powiązany z kontekstem, w który wzorzec może być stosowany.
- Stosowalność
- Przedstawienie sytuacji, w której wzorzec jest użyteczny reprezentujące jego część związaną z kontekstem.
- Struktura
- Graficzna reprezentacja wzorca zwykle jako schematy UML dotyczące klasy oraz interakcji.
- Elementy
- Lista klas i obiektów stosowanych w tym wzorcu oraz ich znaczenie.
- Powiązania
- Opis wzajemnej interakcji klas i obiektów wykorzystywanych we wzorcu.
- Konsekwencje
- Przedstawienie skutków ubocznych oraz innych kosztów, które powoduje zastosowanie wzorca.
- Implementacja
- Prezentuje implementację wzorca reprezentując część wzorca związaną z rozwiązaniem. Przedstawienie technik stosowanych podczas praktycznego wykorzystania wzorca, sugeruje najlepsze drogi do udanej implementacji.
- Przykładowy kod
- Ilustracja jak wzorzec może zostać zastosowany w jednym z języków programowania.
- Przykłady zastosowania
- Znany przykłady zastosowania wzorca w rzeczywistych programach.
- Związane wzorce
- Odniesienie wzorca do innych, z którymi się wiąże przez wspólne stosowanie, lub można go z nimi zamienić oraz przedstawienie różnic w stosunku do podobnych wzorców.
[edytuj] Źródła
- ↑ 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.
- ↑ Gamma Erich, Helm Richard, Johnson Ralph, Vlissides John, Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley, 1997, ISBN 978-0-201-63361-0 (Wyd. pol. Wzorce projektowe. Elementy oprogramowania obiektowego wielokrotnego użytku, WNT, Warszawa, 2005, ISBN 83-204-3041-0).
[edytuj] Zobacz też
- antywzorce - przykłady wzorców postępowania lub projektowania, których należy unikać