Projektowanie Systemów Informatycznych

36
1 Projektowanie obiektowe Wzorce projektowe Gang of Four Strukturalne wzorce projektowe (Wzorce interfejsów)

Transcript of Projektowanie Systemów Informatycznych

Page 1: Projektowanie Systemów Informatycznych

1

Projektowanie obiektowe Wzorce projektowe

Gang of Four Strukturalne wzorce projektowe

(Wzorce interfejsów)

Page 2: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

2

Roadmap

Adapter Bridge Composite

Facade

Page 3: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

3

Pojęcia

• obiekt …

• interfejs …

• typ …

• klasa …

Page 4: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

4

Co to jest delegacja?

• Po prostu: przekazywanie (delegowanie) żądania (operacji) przez obiekt odbierający komunikat do realizacji przez inny obiekt (tzw. delegat)

• Zwiększenie ponownego użycia poprzez zastosowanie agregacji zamiast dziedziczenia

Page 5: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

5

Wzorce strukturalne Wzorce interfejsów

• wzorce strukturalne dotyczą powszechnych

sposobów organizacji obiektów różnego typu, aby

mogły współpracować ze sobą.

• wzorce interfejsów (adapter, bridge, composite,

facade) dotyczą problemów wymagających

zdefiniowania lub przedefiniowania dostępu do

klasy lub grup klas

Page 6: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

6

Adapter

• Zaadoptowanie istniejącego interfejsu klasy

do postaci oczekiwanej przez klienta.

Page 7: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

7

Adapter - Problem

• Niepowiązane klasy, komponenty rozwijane w różnym czasie

lub równolegle mają ze sobą współpracować.

• Dobry program, do którego kodu nie mamy dostępu, ma

działać i być odpowiednio wykorzystany .

• Niekompatybilny interfejs.

• Problem niezgodności impedancji

(impedance mismatch).

Page 8: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

8

Adapter - Rozwiązanie

• Osłaniamy istniejący kod nowymi interfejsami.

• Dopasowujemy impedancje starych komponentów do

nowego systemu (często rozwiązanie pozorne! – tj.

jak przyszycie starej łaty do nowych spodni)

• Struktura: Osłona/Delegacja.

Page 9: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

9

Adapter – diagram klas

Page 10: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

10

Adapter – diagram klas (przykład)

Page 11: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

11

Adapter – przykład

Page 12: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

12

Adapter - Konsekwencje

Klient i adaptowany komponent (klasa, metoda, itp.) pozostają niezależne.

Można używać klas adaptera do określenia jaka metoda obiektu ma być wywołana przez klienta (np. jeden adapter wywołuję metodę rysującą linię ciągłą, a drugi wywołuję metodę rysującą linię przerywaną)

Adapter dodaje warstwę pośrednią w programie:

negatywny wpływ na wydajność,

trudność zrozumienia aplikacji.

Page 13: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

13

Bridge – wprowadzenie do problemu

Page 14: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

14

Bridge

• Oddzielenie operacji abstrakcyjnych od ich

implementacji w celu umożliwienia

wprowadzenia w nich niezależnych zmian

• Użyteczny, gdy mamy do czynienia z

hierarchią abstrakcji i odpowiadającą

hierarchią implementacji, w celu ich

rozłączenia.

Page 15: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

15

Bridge - Problem

• Brak odseparowania implementacji od interfejsu.

• Potrzeba poprawienia możliwości rozbudowy klas, zarówno

implementacji, jak i interfejsu (m.in. przez dziedziczenie),

• Potrzeba ukrycia implementacji od klienta, w celu

umożliwienia zmiany implementacji bez zmian interfejsu

• Kilka odpowiednich abstrakcji ma korzystać z tej samej

implementacji

Page 16: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

16

Bridge - Rozwiązanie

• Pozwolenie na zmiany implementacji oraz pozostawienie

stabilnego interfejsu.

• Struktura: Osłona/Delegacja

• osłona to hierarchia, która dostarcza interfejs

• delegacja to hierarchia, która ukrywa bagaż

implementacji

• Izolacja: koperta/list, (więcej niż enkapsulacja)

Page 17: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

17

Bridge – przykład (szeregowanie wątków)

Page 18: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

18

Bridge – diagram klas

np. sterowniki urządzeń i baz danych

Page 19: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

19

Bridge - Konsekwencje

Bridge utrzymuje niezależność między klasami reprezentującymi abstrakcje i dostarczającymi implementacje abstrakcji.

Abstrakcja i jej implementacje mają osobną hierarchie klas, które można rozszerzać bez wzajemnego wpływu.

Można mieć wiele klas implementujących dla abstrakcyjnej klasy lub wiele abstrakcji używających tej samej implementacji.

Obiekty abstrakcji mogą zmieniać implementacje bez wpływu na klienta.

Page 20: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

20

Konfiguracja na przykładzie Spring Framework

Inversion of Control (Hollywood Princilple) –

"don't call us, we will call you„.

Framework konfiguruje aplikacje i woła komponenty użytkowe.

To tak na dobrą sprawę odróżnia framework od biblioteki.

Depencendy Injection – zmniejszenie zależności pomiędzy komponentami tylko do interfejsów.

Page 21: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

21

Page 22: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

22

Composite

• Zdefiniowanie interfejsu uwzględniającego

zarówno pojedyncze obiekty, jak i grupy

obiektów.

• Umożliwienie odnoszenia się tak samo do

pojedynczych obiektów, jak do kompozytów

Page 23: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

23

Composite - Problem

• Dekompozycja złożonego obiektu na hierarchię obiektów

część-całość

• Klient nie powinien rozróżniać między kompozycją wielu

obiektów, a pojedynczym obiektem.

• Wiele różnych obiektów jest używanych w podobny sposób i

mają prawie identyczny kod obsługi.

Page 24: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

24

Composite - Rozwiązanie

• Zastosowanie rekursywnej kompozycji.

• Agregacja 1 do wielu: „składa się” w górę hierarchii

dziedziczenia.

Page 25: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

25

Composite – diagram klas

Page 26: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

26

Composite – diagram klas (przykład)

Page 27: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

27

Composite – przykład

Page 28: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

28

Composite - Konsekwencje

Udostępnienie wspólnego interfejsu do obiektów składających się na drzewiastą strukturę.

Klienta nie musi interesować hierarchia komponentów.

Komponenty mogą rekurencyjnie delegować przetwarzanie żądanie klienta w dół lub górę hierarchii.

Konkretne komponenty mogą implementować własne unikalne operacje (ale dla uproszczenia można je przesuwać do klas ogólniejszych)

Dowolna klasa wzorca Composite może być dzieckiem obiektu kompozytu. Wprowadzenie zaostrzonych reguł wymaga kodu świadomego występujących typów.

Page 29: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

29

Facade

• Udostępnienie prostego interfejsu

ułatwiającego korzystanie z zestawu klas lub

podsystemu.

• Dostarczenie jednego obiektu na zewnątrz w

celu umożliwienia komunikacji z zestawem

klas.

Page 30: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

30

Facade - Problem

• Istnieje wiele zależności między klasami implementującymi

abstrakcje i klasami klienta, zwiększając zauważalnie jego

złożoność.

• Potrzeba uproszczenia klienta (np. zmniejszenie ryzyka

błędów).

• Zwiększenie stopnia ponownego użycia systemu lub

biblioteki.

• Zaprojektowanie klas by działały w jasno odseparowanych

warstwach.

Page 31: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

31

Facade - Rozwiązanie

• Osłonienie istniejącego systemu nowym interfejsem.

• Prosty punkt wejścia dla dużego podsystemu.

• Dodanie warstwy pośredniczącej ukrywającej złożoność

spadkowego systemu (legacy)

Page 32: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

32

Facade – diagram klas

Page 33: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

33

Facade – przykład

Page 34: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

34

Facade – przykłady

Java – klasa JOptionPane pakietu javax.swing C# - klasa MessageBox pakietu System.Windows.Forms

Page 35: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

35

Facade - Konsekwencje

Wstawienie klas fasady upraszcza klasy klienta przesuwając zależności z klienta do fasady.

Klient nie musi znać klas za fasadą.

Zmiana implementacji (np. poprawa) klas znajdujących się za fasadą, czyli tych, które implementują abstrakcje, jest możliwa bez wpływu na kod klienta.

Page 36: Projektowanie Systemów Informatycznych

Projektowanie obiektowe – Wzorce projektowe, Wzorce strukturalne 2014

36

Zależności między wzorcami

• Umożliwienie wykorzystania elementów:

• już gotowych – Adapter,

• przed ich powstaniem – Bridge.

• Interfejs:

• nowy, całkowicie zdefiniowany – Facade.

• stary, ponowne użycie – Adapter .