Presentation is loading. Please wait.

Presentation is loading. Please wait.

Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe Bartosz Walter.

Similar presentations


Presentation on theme: "Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe Bartosz Walter."— Presentation transcript:

1 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe Bartosz Walter

2 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (2) Motywacja Różne dziedziny inżynierii stawiają sobie podobne pytania: Czy typowe problemy można rozwiązywać w powtarzalny sposób? Czy te problemy można przedstawić w sposób abstrakcyjny, tak aby były pomocne w tworzeniu rozwiązań w różnych konkretnych kontekstach?

3 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (3) Geneza wzorców „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” Christopher Alexander „A pattern language”, 1977

4 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (4) Wzorce w budownictwie lądowym Czy zbudować most, opierając przęsło na kolejnych filarach połączonych łukiem, tak aby łuk usztywniał przęsło, stanowiąc jego podparcie na całej długości przęsła, czy też mocując przęsło z obu stron za pomocą lin stalowych o kolejno coraz krótszych długościach do pylonów umieszczonych pośrodku długości mostu? na podstawie przykładu R. Johnsona

5 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (5) Wzorce w budownictwie lądowym Czy zbudować most łukowy czy podwieszany? na podstawie przykładu R. Johnsona

6 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (6) Wzorce w inżynierii oprogramowania wzorce architektoniczne – poziom integracji komponentów wzorce projektowe – poziom interakcji między klasami wzorce analityczne – poziom opisu rzeczywistości wzorce implementacyjne – poziom języka programowania Wzorzec projektowy identyfikuje i opisuje pewną abstrakcję, której poziom znajduje się powyżej poziomu abstrakcji pojedynczej klasy, instancji lub komponentu. E. Gamma, R. Johnson, R. Helm, J. Vlissides, 1994

7 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (7) Systematyka wzorców projektowych Wzorce kreacyjne –abstrakcyjne metody tworzenia obiektów –uniezależnienie systemu od sposobu tworzenia obiektów Wzorce strukturalne –sposób wiązania obiektów w struktury –właściwe wykorzystanie dziedziczenia i kompozycji Wzorce behawioralne –algorytmy i przydział odpowiedzialności –opis przepływu kontroli i interakcji

8 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (8) Szablon wzorca projektowego Wzorzec projektowy jest opisany przez: nazwę – lakoniczny opis istoty wzorca klasyfikację – kategorię, do której wzorzec należy cel – do czego wzorzec służy aliasy – inne nazwy, pod którymi jest znany motywację – scenariusz opisujący problem i rozwiązanie zastosowania – sytuacje, w których wzorzec jest stosowany strukturę – graficzną reprezentację klas składowych wzorca

9 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (9) Szablon wzorca projektowego cd. uczestników – nazwy i odpowiedzialności klas składowych wzorca współdziałania – opis współpracy między uczestnikami konsekwencje – efekty zastosowania wzorca implementację – opis implementacji wzorca w danym języku przykład – kod stosujący wzorzec pokrewne wzorce – wzorce używane w podobnym kontekście

10 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (10) Katalog wzorców projektowych Katalog wzorców projektowych Gang of Four (Gamma, Johnson, Helm, Vlissides) obejmuje 23 wzorce: –kreacyjne: Abstract Factory, Builder, Factory Method, Prototype, Singleton –strukturalne: Adapter, Bridge, Composite, Decorator, Composite, Facade, Proxy, Flyweight –behawioralne: 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

11 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (11) Singleton: cel Zapewnienie, że klasa posiada jedną instancję wewnątrz całej aplikacji Stworzenie punktu dostępowego do tej instancji Gang of Four

12 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (12) Singleton: struktura i uczestnicy Singleton –definiuje statyczną metodę getInstance() udostępniającą instancję klasy –ogranicza dostęp do konstruktora do własnej klasy i podklas –jest odpowiedzialny za tworzenie instancji własnej klasy

13 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (13) Singleton: konsekwencje 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 można łatwo rozszerzyć do puli obiektów Singleton jest zwykle obiektem bezstanowym Singleton zachowuje się podobnie do zmiennej globalnej Singleton może powodować zwiększenie liczby powiązań w systemie

14 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (14) Singleton: implementacja 2PL Istnienie obiektu instance jest sprawdzane dwukrotnie, na zewnątrz i wewnątrz bloku synchronizacji static public Tax getInstance() { if (instance == null) { synchronize (this) { if (instance == null) { instance == new TaxA(); } return instance; } Shalloway & Trott (2001)

15 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (15) Singleton: implementacja z class loaderami Class loader ładuje pojedynczą klasę TaxA.Instance, która przechowuje pojedynczą instancję klasy Tax public class TaxA extends Tax { private static class Instance { static final Tax instance = new TaxA(); } private TaxA() {} public static Taxt getInstance() { return Instance.instance; } Shalloway & Trott (2001)

16 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (16) Pool of Objects: cel Zarządzanie grupą obiektów reprezentujących zasoby wielokrotnego użycia Ograniczenie kosztów tworzenia i usuwania obiektów Shalloway & Trott (2001)

17 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (17) Pool of Objects: struktura

18 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (18) Pool of Objects: uczestnicy Pool –definiuje punkt dostępu do obiektów Reusable Object –zarządza cyklem życia obiektów Reusable Object Reusable Object –definiuje swój cykl życia –może być powtórnie wykorzystany Client –otrzymuje obiekty Reusable Object za pośrednictwem obiektu Pool

19 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (19) Pool of Objects: konsekwencje Zwiększona wydajność –obiekty ReusableObject są tworzone w ograniczonej liczbie instancji i wykorzystywane wielokrotnie –zrównoważone obciążenie zasobów Lepsza hermetyzacja –klient nie zajmuje się tworzeniem i obsługą obiektów ReusableObject

20 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (20) Flyweight: cel Współdzielenie obiektów w celu zwiększenia wydajności Wydzielenie z obiektu stanu wewnętrznego (współdzielonego) i zewnętrznego (specyficznego) E. Gamma et al. (1995)

21 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (21) Flyweight: struktura

22 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (22) Flyweight: uczestnicy Flyweight –podlega współdzieleniu między klientów –definiuje interfejs do przyjmowania i odtwarzania stanu zewnętrznego obiektu Concrete Flyweight –przechowuje stan wewnętrzny (współdzielony) –jest niezależny od kontekstu (z wyjątkiem stanu zewnętrznego) Flyweight Factory –tworzy i przechowuje obiekty Flyweight Client –otrzymuje obiekty Flyweight za pośrednictwem Flyweight Factory

23 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (23) Flyweight: konsekwencje Zmniejszenie wymagań pamięciowych programu –zmniejszenie ogólnej liczby obiektów –zmniejszenie rozmiaru stanu obiektów –stan zewnętrzny może być przechowywany lub wyliczany Wzrost złożoności obliczeniowej –dodatkowy nakład na zarządzanie stanem zewnętrznym

24 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (24) Command: cel Hermetyzacja poleceń do wykonania w postaci obiektów Umożliwienie parametryzacji klientów obiektami poleceń Wsparcie dla poleceń odwracalnych E. Gamma et al. (1995)

25 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (25) Command: struktura

26 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (26) Command: interakcje

27 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (27) Command: uczestnicy Command –definiuje interfejs obiektu reprezentującego polecenie Concrete Command –jest powiązany z właściwym obiektem Receiver –implementuje akcję w postaci metody execute() Client –tworzy Concrete Command Invoker –ustala odbiorcę akcji każdego obiektu Command –wywołuje metodę execute() obiektu Command Receiver –jest przedmiotem akcji wykonanej przez Command

28 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (28) Command: konsekwencje Usunięcie powiązania między nadawcą i przedmiotem polecenia Łatwe dodawanie kolejnych obiektów Command Możliwość manipulacji obiektami Command –polecenia złożone: wzorzec Composite Polecenia mogą być odwracalne –zapamiętanie stanu przez Concrete Command –wykorzystanie wzorca Memento

29 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (29) Command: przykład

30 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (30) Command: przykład cd. public class Bank { // Invoker, Client public void income(Account acc, long amount) { Operation oper = new Income(amount); acc.doOperation(oper); } public void transfer(Account from, Account to, long amount){ Operation oper = new Transfer(to, amount); from.doOperation(oper); } public class Account { // Reciever long balance = 0; Interest interest = new InterestA(); History history = new History(); public void doOperation(Operation oper) { oper.execute(this); history.log(oper); }

31 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (31) Command: przykład cd. abstract public class Operation { // Command public void execute(); } public class Income { // ConcreteCommand1 public Income(long amount) { // store parameters... } public void execute(Account acc) { acc.add(amount); } public class Transfer { // ConcreteCommand2 public Income(Account to, long amount) { // store parameters... } public void execute(Account from) { from.subtract(amount); to.add(amount); }

32 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (32) Chain of Responsibility: cel Usunięcie powiązania pomiędzy nadawcą i odbiorcą żądania Umożliwienie wielu obiektom obsługi żądania E. Gamma et al. (1995)

33 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (33) Chain of Responsibility: struktura Obiekty Handler tworzą listę jednokierunkową (łańcuch), wzdłuż której są przekazywane żądania.

34 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (34) Chain of Responsibility: uczestnicy Handler –definiuje interfejs do obsługi żądań Concrete Handler –obsługuje jeden rodzaj żądania, pozostałe przekazuje do następnika w łańcuchu –posiada referencję typu Handler do następnika Client –inicjuje przetwarzanie, przekazując żądanie do pierwszego obiektu Handler w łańcuchu

35 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (35) Chain of Responsibility: konsekwencje Ograniczone powiązania –Klient i każdy obiekt Handler nie wiedzą, który z pozostałych obiektów Handler obsługuje dany typ żądania –nadawca i odbiorca żądania nie mają o sobie żadnej wiedzy Możliwość elastycznego przydziału odpowiedzialności do obiektów Handler Ułatwione testowanie Brak gwarancji obsłużenia żądania

36 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (36) Chain of Responsibility: przykład 1 Obiekt Inbox wywołuje pierwszy obiekt Filter w łańcuchu. Kolejne filtry przekazują sobie sterowanie

37 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (37) Chain of Responsibility: przykład 2 Obiekt Inbox wywołuje kolejno obiekty Filter. Nie występuje bezpośrenie przekazywanie sterowania z jednego filtra do drugiego.

38 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (38) State: cel Cele –umożliwienie zmiany zachowania obiektu w momencie zmiany jego stanu –pozorna zmiana klasy obiektu E. Gamma et al. (1995)

39 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (39) State: struktura Stan jest obiektem. Zmiana stanu oznacza zmianę obiektu go reprezentującego. Delegowane do niego metody są wywoływane polimorficznie.

40 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (40) State: uczestnicy Context –posiada referencję do obiektu reprezentującego bieżący stan State –definiuje interfejs pozwalający hermetyzować zachowanie związane z każdym stanem Concrete State –definiuje własne metody implementujące zachowanie specyficzne dla tego stanu

41 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (41) State: konsekwencje Podział zachowania obiektu wg stanów –kod związany ze jednym stanem jest zapisany w jednym obiekcie zmiana stanu jest realizowana przez zmianę obiektu stanu na inny ochrona przed stanem niespójnym możliwość współdzielenia obiektów State –obiekty State zwykle definiują tylko zachowanie –obiekty State zwykle są bezstanowe

42 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (42) State: przykład public class Account { private int balance = 0; private String owner = null; private boolean isOpen = false; public Account(String owner, int balance) { this.owner = owner; this.balance = balance; this.isOpen = true; } public void credit(int amount) { if (isOpen) { balance += amount; } else { alert("Konto nieaktywne!"); }

43 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (43) State: przykład cd. public interface AccountState { public void credit(Account acc, int amount); } public class AccountOpen implements AccountState { public void credit(Account acc, int amount) { acc.balance += amount; } public class AccountClosed implements AccountState { public void credit(Account acc, int amount) { alert("The account is closed!"); }

44 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (44) State: przykład cd. public class Account { private int balance = 0; private String owner = null; private AccountState state = null; public Account(String owner, int balance) { this.owner = owner; this.balance = balance; this.state = new AccountOpen(); } public void credit(int amount) { this.state.credit(this, amount); // delegacja } public void close() { this.state = new AccountClosed(); }

45 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (45) Decorator: cel Umożliwienie dynamicznego dodawania funkcjonalności do obiektu Stworzenie elastycznej alternatywy dla tworzenia podklas E. Gamma et al. (1995)

46 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (46) Decorator: struktura Klient wysyła komunikat do obiektu Decorator, który przekazuje go obiektowi ConcreteComponent oraz wykonuje dodatkowe operacje („dekoracje”)

47 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (47) Decorator: uczestnicy Component –definiuje wspólny interfejs obiektów, które można dekorować Concrete Component –realizuje podstawową funkcjonalność obiektu Decorator –posiada referencję typu Component i do tego obiektu deleguje komunikaty –rozszerza funkcjonalność obiektu ConcreteComponent

48 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (48) Decorator: konsekwencje Większa elastyczność w przydziale odpowiedzialności niż w przypadku dziedziczenia Możliwość dodawania funkcjonalności w trakcie wykonywania programu, gdy jest ona potrzebna Tożsamość obiektu z którym komunikuje się klient może się zmieniać wskutek dekoracji Łatwiejsze testowanie poszczególnych dekoratorów

49 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (49) Visitor: cel Reprezentacja operacji do wykonania na elementach heterogenicznej struktury Realizacja operacji w sposób specyficzny dla typu odwiedzanego elementu Umożliwienie tworzenia nowych operacji bez konieczności modyfikacji klas wewnątrz struktury E. Gamma et al. (1995)

50 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (50) Visitor: struktura

51 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (51) Visitor: interakcje

52 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (52) Visitor: uczestnicy Visitor –definiuje przeciążone metody dla każdego obiektu ConcreteElement do odwiedzenia Element –definiuje metodę accept() przyjmującą obiekt Visitor jako parametr Object Structure –posiada iterator pozwalający na dostęp do każdego elementu struktury

53 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (53) Visitor: konsekwencje Możliwość odwiedzenia obiektów niespokrewnionych ze sobą Łatwe dodawanie nowych obiektów Visitor Utrudnione dodawanie nowych typów Element –konieczność modyfikacji klasy Visitor i jej podklas Możliwość zbierania informacji z elementów struktury w sposób dla nich specyficzny Naruszenie hermetyzacji obiektów Visitor i Element –obiekty muszą odwoływać się do swoich publicznych metod

54 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (54) Visitor: przykład public class Bank { List products = new ArrayList (); public List doReport(Report report) { List result = new ArrayList (); for (BankingProduct product : products) { result.add(product.accept(report)); } return result; }

55 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (55) Visitor: przykład cd. public abstract class BankingProduct { } public interface Element { public BankingProduct accept(Report report); } public class Account extends BankingProduct implements Element { public BankingProduct accept(Report report) { if (isPriviliged(report)) { return report.visit(this); } return null; } public class Credit extends BankingProduct implements Element { public BankingProduct accept(Report report) { return report.visit(this); }

56 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (56) Visitor: przykład cd. public class Over1000Report implements Visitor { public BankingProduct visit(Account acc) { if (acc.balance > 1000) return acc; return null; } public BankingProduct visit(Credit credit) { if (credit.draft > 1000 && credit.isActive()) return credit; return null; } public class PassAllReport implements Visitor { public BankingProduct visit(Account acc) { return this; } public BankingProduct visit(Credit credit) { return this; }

57 Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe (57) Podsumowanie Wzorce projektowe są gotowymi szablonami rozwiązań typowych problemów projektowych Wzorzec posiada określony zestaw atrybutów Katalog wzorców obiektowych stanowi elementarz projektanta oprogramowania


Download ppt "Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe Bartosz Walter."

Similar presentations


Ads by Google