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