wzorce projektowe - Uniwersytet Zielonogórski
Transkrypt
wzorce projektowe - Uniwersytet Zielonogórski
WZORCE PROJEKTOWE (I) (DESIGN PATTERNS) Maciej Patan Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Techniki Modelowania Programowania Wzorce projektowe Motywacje W wielu dziedzinach nowoczesnej inżynierii napotykamy na następujące zagadnienia: I Czy typowe zadania i problemy można rozwiązywać w powtarzalny sposób? I Czy te zadania można przedstawić w postaci abstrakcyjnej, ułatwiającej tworzenie rozwiązań dla konkretnych sytuacji praktycznych? Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Prev Next 2 Techniki Modelowania Programowania Wzorce projektowe Geneza wzorców Christopher Alexander, A pattern language, 1977 „Wzorzec opisuje problem, który powtarza się wielokrotnie w danym środowisku, oraz podaje istotę jego rozwiązania w taki sposób, aby można było je zastosować miliony razy bez potrzeby powtarzania tej samej pracy.” Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Prev Next 3 Techniki Modelowania Programowania Wzorce projektowe Wzorce w inżynierii lądowej Czy zbudowaæ most, opieraj¹c przês³o na kolejnych filarach po³¹czonych ³ukiem usztywniaj¹cym przês³o, stanowi¹c jego podparcie na ca³ej d³ugoœci przês³a, czy te¿ wieszaj¹c przês³o na linach stalowych o dopasowanych d³ugoœciach przymocowanych do lin noœnych opieraj¹cych siê na wysokich pylonach umieszczonych po obu stronach przês³a? Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Prev Next 4 Techniki Modelowania Programowania Wzorce projektowe Wzorce w inżynierii lądowej Czy zbudowaæ most ³ukowy, czy te¿ podwieszany? Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Prev Next 5 Techniki Modelowania Programowania Wzorce projektowe Wzorce w inżynierii oprogramowania I I I I wzorce analityczne – poziom opisu rzeczywistości, wzorce architektoniczne – poziom integracji komponentów, wzorce projektowe – poziom interakcji między klasami, wzorce implementacyjne – poziom języka programowania. Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Prev Next 6 Techniki Modelowania Programowania Wzorce projektowe Definicja Wzorzec projektowy jest dowiedzionym rozwiązaniem dla często spotykanego problemu programistycznego. Składa się z procesów komunikowania się klas i obiektów, które są dostosowywane do rozwiązania problemu w danym kontekście. Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Prev Next 7 Techniki Modelowania Programowania Wzorce projektowe Definicja Wzorzec projektowy jest dowiedzionym rozwiązaniem dla często spotykanego problemu programistycznego. Składa się z procesów komunikowania się klas i obiektów, które są dostosowywane do rozwiązania problemu w danym kontekście. Wzorzec projektowy może być: I szablonem lub strukturą realizującą pewien szczególny cel, I techniką doprowadzenia kodu do bardziej uniwersalnej postaci spełniającej założone kryteria, I idiomem programowania wysokiego poziomu, I połączeniem pomiędzy komponentami programu, I kształtem modelu obiektowego (diagramu reprezentującego model). Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Prev Next 7 Techniki Modelowania Programowania Wzorce projektowe Klasyczne przykłady I Enkapsulacja (ukrywanie danych) I Problem: Udostępnione zmienne mogą podlegać bezpośredniej manipulacji z zewnątrz, co może prowadzić do naruszeń niezmienności reprezentacji zmiennej lub nieoczekiwanych zależności uniemożliwiających zmiany w implementacji. Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Prev Next 8 Techniki Modelowania Programowania Wzorce projektowe Klasyczne przykłady I Enkapsulacja (ukrywanie danych) I I I Problem: Udostępnione zmienne mogą podlegać bezpośredniej manipulacji z zewnątrz, co może prowadzić do naruszeń niezmienności reprezentacji zmiennej lub nieoczekiwanych zależności uniemożliwiających zmiany w implementacji. Rozwiązanie: Ukrycie pewnych składników klasy i umożliwienie tylko specyficznego dostępu do obiektu. Wady: Interfejs może niedostatecznie (lub pośrednio) realizować pożądane operacje, co może obniżyć efektywność działania. Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Prev Next 8 Techniki Modelowania Programowania I Wzorce projektowe Iteracja I Problem: Klient, który życzy sobie dostępu do wszystkich elementów pewnego zestawu musi wykonać przegląd specjalizowany do każdej struktury danych. Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Prev Next 9 Techniki Modelowania Programowania I Wzorce projektowe Iteracja I I I Problem: Klient, który życzy sobie dostępu do wszystkich elementów pewnego zestawu musi wykonać przegląd specjalizowany do każdej struktury danych. Rozwiązanie: Implementacje wykorzystujące wiedzę o reprezentacji danych mogą dokonywać automatycznego przeglądu i zarządzania. Rezultaty są przekazywane do klienta przez standardowy interfejs. Wady: Porządek iterowania jest określony przez implementację i nie jest pod kontrolą klienta. Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Prev Next 9 Techniki Modelowania Programowania I Wzorce projektowe Dziedziczenie (Generalizacja) I Problem: Podobne abstrakcje (klasy, obiekty itp.) posiadają podobne właściwości (pola i operacje). Ich powtarzanie jest na ogół pracochłonne, prowadzi do błędów i komplikacji w zarządzaniu. Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Prev Next 10 Techniki Modelowania Programowania I Wzorce projektowe Dziedziczenie (Generalizacja) I I I Problem: Podobne abstrakcje (klasy, obiekty itp.) posiadają podobne właściwości (pola i operacje). Ich powtarzanie jest na ogół pracochłonne, prowadzi do błędów i komplikacji w zarządzaniu. Rozwiązanie: Dziedziczenie domyślnych właściwości z klasy nadrzędnej; wybór prawidłowej implementacji poprzez rozpoznawanie w czasie wykonania programu. Wady: Kod dla danej klasy ulega rozproszeniu, redukując jego zrozumiałość i przejrzystość. Rozpoznawanie w czasie wykonania wprowadza dodatkowy koszt. Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Prev Next 10 Techniki Modelowania Programowania Wzorce projektowe Klasyfikacja wzorców projektowych I Wzorce kreacyjne I I I Wzorce strukturalne I I I abstrakcyjne metody tworzenia obiektów, uniezależnienie systemu od sposobu tworzenia obiektów, sposób wiązania obiektów w struktury, właściwe wykorzystanie dziedziczenia i kompozycji, Wzorce behawioralne I I algorytmy i przydział odpowiedzialności, opis przepływu kontroli i interakcji, Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Prev Next 11 Techniki Modelowania Programowania Wzorce projektowe Katalog wzorców projektowych I A. Wesley, E. Gamma, R. Helm, R. Johnson, J. Vlissides (1995), Design Patterns, Elements of Reusable Object-Oriented Software: I Wzorce kreacyjne I I Wzorce strukturalne I I Adapter, Bridge, Composite, Decorator, Composite, Facade, Proxy, Flyweight, Wzorce behawioralne I I Abstract Factory, Builder, Factory Method, Prototype, Singleton, Chain of Responsibility, Command, Interpreter, Mediator, Iterator, Memento, Observer, State, Strategy, Template Method, Visitor, lista wzorców jest sukcesywne uzupełniana przez innych autorów. Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Prev Next 12 Techniki Modelowania Programowania Wzorce projektowe Szablon wzorca projektowego I I I I I I I I I I I I nazwa opisująca istotę wzorca, motywacje - opis problemu i rozwiązania, cel działania wzorca, aliasy, zastosowania - sytuacje docelowe dla wzorca, struktura - graficzna reprezentacja klas składowych, uczestnicy - klasy składowe wzorca i ich role, współdziałania - opis współpracy między uczestnikami, konsekwencje - efekty zastosowania wzorca, implementacja - opis wzorca w danym języku programowania, przykład kodu stosującego wzorzec, pokrewne wzorce - wzorce używane w podobnym kontekście. Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Prev Next 13 Techniki Modelowania Programowania Wzorce projektowe Przykład wzorca kreacyjnego – Singleton I Cel I I I zapewnienie, że klasa posiada jedną instancję wewnątrz całej aplikacji, stworzenie punktu dostępowego do tej instancji. Motywacje I I W pewnych okolicznościach możliwe jest powołanie do życia tylko jednego obiektu danej klasy, np. powinien być tylko jeden system plików, menedżer aplikacji czy też okno drukowania. Najlepszym rozwiązaniem jest uczynienie danej klasy odpowiedzialną za śledzenie stanu swojej jedynej instancji i zapobieganie utworzenia następnych egzemplarzy obiektów. Dodatkowo klasa może dostarczyć samodzielnie sposobu dostępu. Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Prev Next 14 Techniki Modelowania Programowania Wzorce projektowe Singleton (2) I Struktura i uczestnicy Singleton -uniqueInstance -singletonData +getInstance() +getSingletonData() +singletonOperation() -Singleton() I I I return uniqueInstance definiuje statyczną metodę instance() udostępniającą instancję klasy (sterowanie liczbą instancji), ogranicza dostęp do konstruktora do własnej klasy i podklas, jest odpowiedzialna za tworzenie instancji własnej klasy. Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Prev Next 15 Techniki Modelowania Programowania Wzorce projektowe Singleton (3) I Konsekwencje I I I I I I Singleton przejmuje odpowiedzialność za tworzenie instancji własnej klasy Klient nie zarządza instancją klasy; otrzymuje ją na żądanie Singleton może zarządzać także swoimi podklasami Singleton jest zwykle obiektem bezstanowym Singleton zachowuje się podobnie do zmiennej globalnej Singleton może powodować zwiększenie liczby powiązań w systemie Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Prev Next 16 Techniki Modelowania Programowania Wzorce projektowe Przykład wzorca strukturalnego – Adapter (Wrapper) I Cel I I I Umożliwienie współpracy obiektów o niezgodnych typach Tłumaczenie protokołów obiektowych Motywacje I Potrzeba dopasowania niekompatybilnego interfejsu klas np. z biblioteki numerycznej do interfejsu oczekiwanego przez system. W przypadku gdy nie posiadamy kodu źródłowego biblioteki nie możemy dokonać zmiany jej interfejsu wg wymagań. Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Prev Next 17 Techniki Modelowania Programowania Wzorce projektowe Adapter (2) I Struktura Client Target request() Adaptee specificRequest() adaptee Adapter request() Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski adaptee->specificRequest() Prev Next 18 Techniki Modelowania Programowania Wzorce projektowe Adapter (3) I Uczestnicy I Target: I I Client I I współpracuje z obiektami typu Target Adaptee I I definiuje interfejs specyficzny dla klienta posiada interfejs wymagający adaptacji Adapter I adaptuje interfejs Adaptee do interfejsu Target Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Prev Next 19 Techniki Modelowania Programowania Wzorce projektowe Adapter (4) I Konsekwencje I Duża elastyczność: I I I Utrudnione pokrywanie metod Adaptera I I pojedynczy Adapter może wspołpracować z wieloma obiektami Adaptee naraz, Adapter może dodawać funkcjonalność do Adaptee, konieczne utworzenie podklas obiektu Adaptee i bezpośrednie odwołania do nich, Kompozycja i dziedziczenie jako mechanizmy adaptacji Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Prev Next 20 Techniki Modelowania Programowania Wzorce projektowe Przykład wzorca behawioralnego – Observer I Cel I I Utworzenie zależności typu jeden-wiele pomiędzy obiektami, tak żeby informacja o zmianie stanu wyróżnionego obiektu była przekazywana wszystkim pozostałym obiektom Motywacje I Potrzeba zarządzania spójnością pomiędzy współpracującymi klasami bez konieczności ich silnego sprzęgania, co zredukuje możliwość ich ponownego wykorzystania. Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Prev Next 21 Techniki Modelowania Programowania Wzorce projektowe Observer (2) I Motywacje (cd) I Obiekt generujący zdarzenie może mieć wiele obiektów obserwujących jego stan i synchronizujących z nim swój status. W ten sposób można reagować na zdarzenie w wielu miejscach jednocześnie. Observers x y z a 60 50 80 b 30 30 10 c 10 20 10 b a c a b c a=50% b=30% c=20% powiadomienie o zmianie zapytanie o status Subject Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Prev Next 22 Techniki Modelowania Programowania Wzorce projektowe Observer (3) I Struktura Subject Observer observers update() attach(Observer) detach(Observer) notify() for all obs in observers{ obs->update() } ConcreteObserver subject ConcreteSubject subjectState GetState() SetState() observerState update() return subjectState observerState= subject->GetState() Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Prev Next 23 Techniki Modelowania Programowania Wzorce projektowe Observer (4) I Uczestnicy I Subject: I I utrzymuje rejestr obiektów Observer, dostarcza interfejsu do dołączania i odłączania obiektów Observer, I Observer I Concrete Subject I I I I udostępnia interfejs do powiadamiania o zmianach przechowuje stan istotny dla obiektów Concrete Observer powiadamia obiekty Concrete Observer Concrete Observer I aktualizuje swój stan na podstawie powiadomienia Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Prev Next 24 Techniki Modelowania Programowania Wzorce projektowe Observer (5) I Konsekwencje I Luźniejsze powiązania pomiędzy obiektami: I I I I I obiekt Subject komunikuje się z innymi obiektami przez interfejs Observer, obiekty Subject i Observers mogą prezentować różne warstwy abstrakcji, Programowe rozgłaszanie komunikatów Spójność stanu pomiędzy obiektami Subject i Observers Skalowalność aktualizacji: I I push: Observers otrzymują kompletny stan obiektu Subject, pull: Observers otrzymują powiadomienie i referencję do obiektu Subject Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Prev Next 25 Techniki Modelowania Programowania Wzorce projektowe Plusy i minusy B wzorce ułatwiają i przyśpieszają powtórne wykorzystanie sprawdzonych projektów i struktur, B projektant posiadający pewne doświadczenie może natychmiast zastosować odpowiedni wzorzec dla danego problemu bez powtórnego odkrywania jego rozwiązania, B Wyrażanie sprawdzonych technik w postaci wzorców ułatwia ich dostępność dla innych programistów, B Mogą ulepszyć procesy zarządzania istniejącymi systemami i tworzenia dokumentacji dostarczając standardowej specyfikacji klas oraz ich interakcji. Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Prev Next 26 Techniki Modelowania Programowania Wzorce projektowe Plusy i minusy B wzorce ułatwiają i przyśpieszają powtórne wykorzystanie sprawdzonych projektów i struktur, B projektant posiadający pewne doświadczenie może natychmiast zastosować odpowiedni wzorzec dla danego problemu bez powtórnego odkrywania jego rozwiązania, B Wyrażanie sprawdzonych technik w postaci wzorców ułatwia ich dostępność dla innych programistów, B Mogą ulepszyć procesy zarządzania istniejącymi systemami i tworzenia dokumentacji dostarczając standardowej specyfikacji klas oraz ich interakcji. B każdy wzorzec wymaga znalezienia kompromisu pomiędzy uniwersalnością a efektywnością, B mogą zarówno zwiększyć jak też i zmniejszyć zrozumiałość kodu programu. Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Prev Next 26