Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe Bartosz Walter.

Slides:



Advertisements
Similar presentations
Portal edukacyjny J A V A S C R I P T Obiekty Opracowała: Anna Śmigielska.
Advertisements

Materiały pochodzą z Platformy Edukacyjnej Portalu Wszelkie treści i zasoby edukacyjne publikowane na łamach Portalu
Design Patterns Yes, they are important Robert Cotton April 23, 2009.
05/26/2004www.indyjug.net1 Indy Java User’s Group June Knowledge Services, Inc.
IEG3080 Tutorial 7 Prepared by Ryan.
Design Patterns CS is not simply about programming
Design Patterns. What are design patterns? A general reusable solution to a commonly occurring problem. A description or template for how to solve a problem.
March R McFadyen1 GoF (Gang of Four): Gamma, Johnson, Helm & Vlissides Book: Design Patterns: Elements of Reusable Object-Oriented Software.
樣式導向設計 (Pattern-Oriented Design) 課程簡介 Ku-Yaw Chang Assistant Professor, Department of Computer Science and Information Engineering.
Testing Extensible Design Patterns in OO Frameworks through Scenario Templates D.S. Sanders Software Verification & Validation.
Design Patterns CSIS 3701: Advanced Object Oriented Programming.
1 Design Patterns Object-Oriented Design. 2 Design Patterns 4Reuse of design knowledge and experience 4Common in many engineering disciplines 4Avoids.
Creational Patterns
What to know for the exam. Smalltalk will be used for questions, but there will not be questions about the grammar. Questions might ask – how particular.
Proxy.
Centrum Informacji o Euro NBP Opole / 14 listopada 2015 Jakub Wrąbel.
Design Patterns. 1 Paradigm4 Concepts 9 Principles23 Patterns.
A: A: double “4” A: “34” 4.
PROTOTYPE. Design Pattern Space Purpose ScopeCreationalStructuralBehavioral ClassFactory MethodAdapterInterpreter Template Method ObjectAbstract factory.
 Ciśnienie hydrostatyczne – ciśnienie, jakie panuje na pewnej głębokości w cieczy niebędącej w ruchu, która znajduje się w polu grawitacyjnym. Analogiczne.
Ul. Dworcowa Olsztyn tel.: tel.: tel.: fax : Informacje.
1 Nowoczesne formy krótkoterminowego finansowania połączonego z ubezpieczeniem należności - odpowiedzią na potrzeby branży spożywczej Paweł Pawlak - Dyrektor.
Podbój kosmosu Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego.
Seminarium dyplomowe4 Jan Brzozowski, Katedra Studiów Europejskich.
Infrastruktura transport wewnętrznego Urządzenia pomocnicze Systemy logistyczne Marek Stanisławski.
RYSUNEK KONSTRUKCYJNY KONSTRUKCJE METALOWE Część II.
Dobór pryzmatów metodą Madox’a
Staż absolwencki Biuro Karier UAM Kontakt ul.
Wsparcie na wdrażanie operacji w ramach strategii rozwoju lokalnego kierowanego przez społeczność.
Od zarania dziejów Do wspólczesnoSci. Ewolucja człowieka doprowadziła do wykształcenia wielu umiejętności. Wytwarzanie narzędzi, tworzenie opowieści,
Powiatowa Stacja Sanitarno - Epidemiologiczna w Trzebnicy Oświata Zdrowotna i Promocja Zdrowia „MOJE DZIECKO IDZIE DO SZKOŁY” rok szkolny 2013/14 mgr.
Badania psycholingwistyczne dotyczące procesów przekładu Paulina Saletnik.
Publiczne Gimnazjum nr 3 w Łodzi im. Fryderyka Chopina ul. Zacisze 7/ 9 DRZWI OTWARTE 26 LUTEGO 2014r – MISJĄ SZKOŁY JEST ABY UCZEŃ GIMNAZJUM.
Gdańskie ulice najbezpieczniejsze od dziesięcioleci!
Generator wniosków o dofinansowanie LSI MAKS2 Olsztyn,
Tomaszów Mazowiecki miarą przyszłościowej fotowoltaiki.
JAK PRZYGOTOWAĆ PROJEKT FINANSOWANY Z FUNDUSZY STRUKTURALNYCH? Dział Projektów Międzynarodowych i Współpracy z Zagranicą Biuro Programów Badawczych i Funduszy.
E biznes na START Dobry początek Twojego biznesu.
Powiat Ciechanowski „Doskonalenie szansą na rozwój” Doskonalenie szansą na rozwój Działanie 3.5 Kompleksowe wspomaganie rozwoju szkół Priorytet III Wysoka.
Osobowościowe implikacje jakości życia z nałogiem Irena Pufal-Struzik Ewa Morawiecka.
Design Patterns CSCE 315 – Programming Studio Spring 2013.
Zarządzanie wizualne w placówkach medycznych LeanProcess Katarzyna Złotowska ul. Różana 17, Szczecinek NIP REGON tel
Konsultacje 3 spotkanie 25 maja 2016 Program Rewitalizacji Gminy Chełmek na lata
1 Zintegrowany system elektronicznej karty miejskiej do pobierania opłat za przejazdy komunikacją miejską System dynamicznej informacji pasażerskiej w.
DOBRY START szkolenia dla usługodawców osób niepełnosprawnych DOBRY START szkolenia dla usługodawców osób niepełnosprawnych Dorota Potejko- koordynator.
Rachunkowość w jsfp Audyt rocznego sprawozdania finansowego Ministerstwo Finansów 28 maja 2015 r. 1.
Radek Dziech, Krystian Zieleźnik, 3c, GP2. Komedia Komedia – cechuje ją pogodny nastrój, komizm, najczęściej żywa akcja i szczęśliwe dla bohaterów zakończenie.
Iterator と Adaptor デザインパターン 第1回
Budowa Centralnego Systemu Automatycznego Nadzoru nad Ruchem Drogowym Projekt współfinansowany przez Unię Europejską ze środków Europejskiego Funduszu.
Próg rentowności, margines bezpieczeństwa. Analiza koszt-wolumen-zysk (ang. cost-volume-profit analysis ) To metoda systematycznego badania relacji i.
,,MALI uczniowie idą do szkoły” UNICEF Razem dla dzieci.
P OMOC PSYCHOLOGICZNO - PEDAGOGICZNA W SZKOLE W świetle nowych przepisów.
Adw. Piotr Buława ABC freelancerów - legalne świadczenie usług w Polsce bez zakładania firmy.
BEZPIECZEŃSTWO RUCHU DROGOWEGO W OKRESIE LETNIM 2016.
Projekt jest współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego GOSPODARKA ZASOBAMI WODNYMI W TYM NA OBSZARACH ZURBANIZOWANYCH.
SZKOŁA Z KLASĄ 2.0. Ogólny harmonogram programu "Szkoła z klasą 2.0"
Program Rewitalizacji Gminy Łączna Prezentacja na sesji diagnozy zjawisk kryzysowych
Warszawa, 12 sierpnia 2016 r. Konsultacje społeczne projektów Planów przeciwdziałania skutkom suszy w regionach wodnych RZGW w Warszawie.
Okręgowa Komisja Egzaminacyjna w Krakowie Sprawdzian od roku szkolnego 2014/2015.
Termin główny: 5 kwietnia 2016 r. Termin dodatkowy: 2 czerwca 2016 r. Część pierwsza – język polski i matematyka – godz Część druga – język niemiecki.
Czy wiesz, że.... W ciągu najbliższych 8 sekund...
Chapter 10 Design Patterns.
樣式導向設計 (Pattern-Oriented Design) 課程簡介
MPCS – Advanced java Programming
SOEN 343 Software Design Computer Science and Software Engineering Department Concordia University Fall 2005 Instructor: Patrice Chalin.
Review Operation Bingo
SOEN 343 Software Design Computer Science and Software Engineering Department Concordia University Fall 2005 Instructor: Patrice Chalin.
Подготовка за Интервюта
SOEN 343 Software Design Computer Science and Software Engineering Department Concordia University Fall 2004 Instructor: Patrice Chalin.
Presentation transcript:

Innowacyjne metody wytwarzania oprogramowania Wzorce projektowe Bartosz Walter

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?

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

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

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

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

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

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

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

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

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

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

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

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)

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)

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)

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

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

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

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)

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

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

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

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)

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

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

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

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

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

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); }

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); }

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)

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.

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

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

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

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.

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)

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.

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

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

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!"); }

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!"); }

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(); }

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)

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”)

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

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

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)

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

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

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

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

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; }

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); }

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; }

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