WYKŁAD 9. Wzorce projektowe czynnociowe Observer Visitor

Podobne dokumenty
WYKŁAD 10. Wzorce projektowe czynnociowe Command Strategy

WYKŁAD 12. Wzorce projektowe czynnociowe State Mediator

WYKŁAD 11. Wzorce projektowe czynnociowe Iterator TemplateMethod

Wzorce projektowe. dr inż. Marcin Pietroo

Zaawansowane programowanie obiektowe - wykład 5

Wzorce projektowe cz. I. Wzorce projektowe cz. I 1/33

Zaawansowane programowanie w C++ (PCP)

Wzorce projektowe kreacyjne

WYKŁAD 5. Wzorce projektowe kreacyjne Builder Prototype

Programowanie Obiektowe

Wzorce projektowe. dr inż. Marcin Pietroo

Wypożyczalnia VIDEO. Technologie obiektowe

problem w określonym kontekście siły istotę jego rozwiązania

Programowanie obiektowe

WYKŁAD 13. Wzorce projektowe czynnociowe Chain of Responsibility Interpreter Memento

Wprowadzenie do programowania aplikacji mobilnych

Wzorce projektowe cz. II. Wzorce projektowe cz. II 1/35

Wzorce projektowe ArrayList. Aplikacja i zdarzenia. Paweł Chodkiewicz

Programowanie obiektowe - 1.

Wprowadzenie do kompilatorów

Problemy projektowania obiektowego. Czy podobne problemy można rozwiązywac w podobny sposób?

Gramatyki regularne i automaty skoczone

Program Sprzeda wersja 2011 Korekty rabatowe

Bazy danych Podstawy teoretyczne

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

WZORCE PROJEKTOWE STRUKTURALNE. Omówimy (W6-W8): Decorator Composite Adapter Bridge Facade Proxy

Wzorce projektowe. dr inż. Marcin Pietroo

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

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

Wzorce oprogramowania Gof (cd) zastosowane w modelu obiektowym

FV Ando. Nie usuwasz danych Produkty, których ju nie sprzedajesz, nieaktywni kliencie oraz faktury mog by po prostu przeniesione do archiwum.

Projektowanie obiektowe Wzorce projektowe. Gang of Four Wzorce rozszerzeń

Testowanie oprogramowania Wzorce projektowe

WYKŁAD 8. Wzorce projektowe strukturalne Facade Proxy Flyweight

Typy bazy danych Textract

Sposoby przekazywania parametrów w metodach.

Analiza i projektowanie obiektowe 2016/2017. Wykład 11: Zaawansowane wzorce projektowe (1)

Wzorce projektowe Michał Węgorek

AltiumLive Dashboard - sownik. AltiumLive Dashboard - Glossary. Language. Contents

Bazy danych. Plan wykładu. Podzapytania - wskazówki. Podzapytania po FROM. Wykład 5: Zalenoci wielowartociowe. Sprowadzanie do postaci normalnych.

Programowanie obiektowe

obsług dowolnego typu formularzy (np. formularzy ankietowych), pobieranie wzorców formularzy z serwera centralnego,

Bazy danych. Plan wykładu. Zalenoci funkcyjne. Wykład 4: Relacyjny model danych - zalenoci funkcyjne. SQL - podzapytania A B

Klasy abstrakcyjne, interfejsy i polimorfizm

PROWIZJE Menad er Schematy rozliczeniowe

Programowanie obiektowe

stopie szaro ci piksela ( x, y)

Wzorce projektowe strukturalne cz. 1

1. Klasa typu sealed. Przykład 1. sealed class Standard{ class NowyStandard:Standard{ // błd!!!

Przygotowanie rodowiska dla egzaminu e-obywatel

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Omówienie wzorców wykorzystywanych w Prism 5.0. Dominika Różycka

zdefiniowanie kilku grup dyskusyjnych, z których chcemy odbiera informacje, dodawanie, usuwanie lub edycj wczeniej zdefiniowanych grup dyskusyjnych,

Temat: Programowanie zdarzeniowe. Zdarzenia: delegacje, wykorzystywanie zdarze. Elementy Windows Application (WPF Windows Presentation Foundation).

Optymalizacja oprogramowania - wprowadzenie

Klonowanie MAC adresu oraz TTL

Diagramy klas. dr Jarosław Skaruz

Przegldanie stron wymaga odpowiedniej mikroprzegldarki w urzdzeniu mobilnym lub stosownego emulatora.

Interfejsy i klasy wewnętrzne

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

.! $ Stos jest list z trzema operacjami: dodawanie elementów na wierzch stosu, zdejmowanie elementu z wierzchu stosu, sprawdzanie czy stos jest pusty.

Wykład 9: Polimorfizm i klasy wirtualne

Projektowanie obiektowe Wzorce projektowe

Kurs WWW. Paweł Rajba.

Model obiektu w JavaScript

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Terminologia baz danych

Projektowanie oprogramowania: wzorce architektoniczne i projektowe

Kreator automatycznego uaktualniania firmware'u

Bazy danych Transakcje

WZORCE PROJEKTOWE (I) (DESIGN PATTERNS)

Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2017

Wykład 1. Projektowanie efektywnych algorytmów przetwarzania danych w sieciowych systemach usług, rzeczy i multimediów.

Programowanie obiektowe

Bazy danych. Plan wykáadu. Zale*noci funkcyjne. Wykáad 4: Relacyjny model danych - zale*noci funkcyjne. A B

Projektowanie obiektowe oprogramowania Wykład 7 wzorce czynnościowe (2) Wiktor Zychla 2018

hierarchie klas i wielodziedziczenie

Builder (budowniczy) Cel: Przykład:

Pakiety i interfejsy. Tomasz Borzyszkowski

Systemy operacyjne lab. 6 Paweł Gmys strona 1

WYKŁAD 7. Wzorce projektowe strukturalne Adapter Bridge

Badania marketingowe w pigułce

Metody komputerowe i obliczeniowe Metoda Elementów Skoczonych. Element dwuwymiarowy liniowy : belka

Technologie obiektowe

Programowanie Obiektowe i C++

Modelowanie i Programowanie Obiektowe

Instrukcja obsługi programu MechKonstruktor

Bazy danych. Plan wykładu. Pierwsza posta normalna. Druga posta normalna. Wykład 7: Sprowadzanie do postaci normalnych. DDL, DML

Planowanie adresacji IP dla przedsibiorstwa.

Dziedziczenie. Tomasz Borzyszkowski

Studium przypadku Case Study CCNA2-ROUTING

Wykład 8: klasy cz. 4

Iteracyjno-rozwojowy proces tworzenia oprogramowania Wykład 3 część 1

Tworzenie bazy danych Biblioteka tworzenie tabel i powiza, manipulowanie danymi. Zadania do wykonani przed przystpieniem do pracy:

{Opracowała Małgorzata Roguska} Tematy lekcji:

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Poprawa efektywnoci metody wstecznej propagacji bdu. Jacek Bartman

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Listy i operacje pytania

Ateus - Helios. System domofonowy

Transkrypt:

WYKŁAD 9 Wzorce projektowe czynnociowe Observer Visitor

Behavioral Design Pattern: Observer [obj] Okrela relacj jeden-do-wielu midzy obiektami. Gdy jeden z obiektów zmienia stan, wszystkie obiekty zalene od niego s o tym automatycznie powiadamiane i uaktualniane. Inne nazwy: Publish-Subscribe, Dependents

Uzasadnienie: Czsto mamy do czynienia z koniecznoci zaprezentowania danych z jedngo obiektu w innych obiektach na róne sposoby. Zalezy nam te na tym aby obiekty prezentacji nie wiedziały o sobie nawzajem, ale jednoczenie eby zachowywały si tak jakby o sobie wiedziały.

Dobrym przykładem jest tu prezentowanie obiektu danych za pomoc zarówno arkusza kalkulacyjnego jak i wykresu słupkowego. Niezalenie od tego gdzie zostanie wprowadzona zmiana stanie si ona od razu widoczna we wszystkich pozostałych obiektach.

Obiekty obserwowany i obserwator komunikuj si nawzajem. Gdy obserwowany zmienia stan s o tym informowani wszyscy obserwatorzy. W wyniku tego kady obserwator pyta obserwowanego o aktualny stan aby zsynchronizowa z nim swój własny stan.

Stosowalno: gdy jaka abstrakcja ma dwa aspekty, jeden zaleny od drugiego (np. widok od danych); kapsułkowanie tych aspektów w oddzielnych obiektach umoliwia niezalene zmienianie i uywanie tych obiektów w czasie wykonania zmiana jednego obiektu wymaga zmiany innych i nie wiadomo ile obiketów trzeba zmieni obiekt powinien by w stanie powiadamia inne obiekty nie przyjmujc adnych załoe co do tego co te obiekty reprezentuj (eliminacja cisłego powizania obiektów) Struktura:

Uczestnicy: Obserwowany zna swoich obserwatorów (dowoln ilo) zapewnia interfejs dołczania i odłczania obserwatorów Obserwator definiuje interfejs uaktualniania dla obiektów, które powinny by powiadamiane o zmianach, jakie zaszły w obserwowanym

ObserwowanyKonkretny przechowuje stan, który interesuje obiekty ObserwatorKonkretny gdy zmienia si jego stan, wysyła powiadomienia do swoich obserwatorów ObserwatorKonkretny utrzymuje odwołanie do obiketu ObserwowanyKonkretny przechowuje stan, który powinien by spójny ze stanem obserwowanego implementuje interfejs obserwatora słucy do uaktualniania, eby zachowa spójno swojego stanu ze stanem obserwowanego

Współpraca: ObserwowanyKonkretny zawsze powiadamia swoich obserwatorów, gdy wystpi zmiana, która moe rozsynchronizowa stany. Po otrzymaniu powiadomienia o zmianie, która wystpiła w ObserwowanymKonkretnym, ObserwatorKonkretny moe zapyta go o informacje dotyczce tej zmiany. ObserwatorKonkretny uywa tych informacji do uaktualniania swojego stanu na podstawie stanu obserwowanego.

obserwowanykonkretny obserwat orkonkret ny innyobserwatorkonkretny 1: UstawStan() 2: Powiadom() 3: Uaktualnij() 4: PodajStan() 5: Uaktualnij() 6: PodajStan()

Naley zwróci uwag na fakt, e obiekt Obserwator, który zainicjował zmian czeka z aktualizacj swojego stanu a do otrzymania powiadomienia od Obserwowanego. Operacja Powiadom nie musi by wołana przez Obserwowanego.

Konsekwencje: niezalene zmienianie obserwatorów i obserwowanych moliwo ponownego wykorzystania obserwatorów bez obserwowanego i na odwrót dodawanie obserwatorów bez modyfikowania obserwatorów ani obserwowanego

abstrakcyjne powiznie midzy Obserwowanym a Obserwatorem mog by w rónych warstwach aplikacji wsparcie dla rozsyłania komunikatów moliwo usuwania obserwatorów w czasie wykonania nieoczekiwane uaktualnienia obserwatorzy mog nie zdawa sobie sprawy jak lawin komunikatów mog spowodowa przez uaktualnianie obserwatora

Implementacja: odwzorowywanie obserwowanych na obserwatorów hash-table obserwowanie wicej ni jednego obserwowanego w celu rozrónienia obserwowany moe przekaza siebie który uczestnik doprowadza do uaktualnienia operacje wyznaczajce stan obserwowanego wołaj Powiadom() zaraz po zmianie stanu klienci odpowiadaj za wołanie Powiadom()

zawieszone odwołania do usunitych obserwowanych powiadamianie o usuwaniu aby usun odwołania u obserwatorów zapewnienie, e przed rozesłaniem powiadomienia stan obserwowanego jest spójny aby tego unikn mona wysyła powiadomienie z TemplateMethod w klasach abstrakcyjnych Obserwowanego

unikanie protokołów uaktualniania specyficznych dla obserwatora: modele pchajcy (obserwowany wysyła szczegółow informacj o zmianie) i cigncy (obserwatorzy pytaj o interesujce ich szczegóły; wiksze ponowne uycie, ale mniejsza efektywno) jawne specyfikowanie modyfikacji wartych uwagi róni obserwatorzy mog by zainteresowani rónymi zmianami, wtedy rejestruj si wraz ze swoim aspektem

kapsułkowanie złoonej semantyki uaktualnie klasa ZarzdcaZmian łczenie klas Obserwowany i Obserwator wspólny interfejs dla obu klas w jzykach bez wielodziedziczenia, wtdy obiekt implementujcy ten interfejs moe działa w kadej z ról

Przykłady Zastosowania Pokrewne wzorce: Mediator kapsułkujc złoon sematyk zmian klasa ZarzdcaZmian działa jako Mediator midzy obserwatorami a obserwowanymi Singleton klasa ZarzdcaZmian moe by Singletonem

Behavioral Design Pattern: Visitor [obj] Okrela operacj, któa ma by wykonana na elementach struktury obiektowej. Umoliwia definiowanie nowej operacji bez modyfikowania klas elementów, na których ona działa.

Uzasadnienie: Przykładem jest kompilator, który reprezentuje programy w postaci drzew składni abstrakcyjnej. Musi on przeprowadza analiz semantyczn (np. sprawdza czy wszystkie zmienne s zdefiniowane). Musi take generowa kod. Na takim drzewie moemy wykonywa cały szereg operacji. Operacje te powinny inaczej traktowa wzły reprezentujce instrukcje, inaczej wzły reprezentujce zmienne, wyraenia arytmtyczne Bd wic dla nich osobne klasy. Zbiór tych klas zaley od jzyka programowania, ale słabo.

Teraz chodzi nam o to, aby mona było umieszcza nowe operacje bez koniecznoci modyfikowania całej hierarchii i bez umieszczania w klasach kodu, który zajmuje si zupełnie rónymi zagadnieniami (np. generowanie kodu, ładne drukowanie kodu) w ten sposób kompilator bdzie ułatwiał wprowadzanie zmian.

Osigniemy te cele jeli wszystkie te operacje wyprowadzimy poza hierarchi umieszczajc je w osobnych klasach. Obiekty tych osobnych klas nosz nazw odwiedzajcych. Odwiedzajcych mona przekaza do elementów hierarchii. W momencie przekazania odwiedzajcego element hierarchii moe przekaza samego siebie do odwiedzajcego, który wykona na nim operacj. T operacj, która dawniej znajdowała si w elemencie hierarchii.

W ywniku zastosowania tego wzorca otrzymujemy dwie hierarchie klas jedn dla wzłów i drug dla odwiedzajcych. Nowe operacje tworzymy przez dodawanie nowych podklas w hierarchii odwiedzajcych. Dopóki nie zmieni si hierarchia wzłów moemy dodawa w ten sposób nowe operacje.

Stosowalno: struktura obiektowa zawiera wiele klas obiektów z rónymi interfejsami i chcemy wykonya na nich operacje zalene od ich klas konkretnych wiele rónych niepowizanych ze sob operacji musi by wykonanych na obiektach struktury, a nie chcemy zanieczyszcza tej struktury tymi operacjami szczególnie przydatne dla współdzielonych struktur klasy definiujce struktur obiektow rzadko si zmieniaj a chcemy czsto definiowa nowe operacje w tej strukturze zmiany w strukturze wymuszaj zmiany całego interfejsu odwiedzajcych

Uczestnicy: Odwiedzajcy (OdwiedzajcyWzły) deklaruje operacj Odwiedz() dla kadej klasy ElementKonkretny w strukturze obiektowej; nazwa i syngatura operacji okrelaj klas, która wysyła danie Odwied() do Odwiedzajcego; dziki temu Odwiedzajcy moe ustali klas i skorzysta z jej interfejsu

OdwiedzajcyKonkretny (OdwiedzajcySprawdzajcyTypy) implementuje kad z operacji zadeklarowanych przez Odwiedzajcego, kazda z operacji definiuje fragment algorytmu zdefiniowanego dla odpowiedniej klasy obiektu w strukturze; OdwiedzajcyKonkretny zapewnia kontekst dla algorytmu i przechowuje jego stan lokalny; stan ten czsto kumuluje wyniki uzyskane podczas przechodzenia struktury

Element (Wzeł) definiuje operacj Przyjmij, otrzymujc odwiedzajcego jako argument ElementKonkretny (WzełPrzypisanie, WzełOdwołanieDoZmiennej) implementuje operacj Przyjmij, która otrzymuje odwiedzajcego jako argument

StrukturaObiektowa (Program) moe poda swoje elementy moe zapewni wysokopoziomowy interfejs umoliwiajcy odwiedzajcemu odwiedzenie elementów moe by wzorcem Composite lub kolekcj

Współpraca: klient musi tworzy obiekt OdwiedzajcyKonkretny, a nastpnie przej struktur obiektow odwiedzajc kady element za pomoc odwiedzajcego gdy element jest odwiedzany wywołuje operacj Odwiedzajcego odpowiedni dla swojej klasy; dostarcza on siebie samego jako argument tej operacji, eby umoliwi odwiedzajcemu dostp do swojego stanu

strukturaobiektowaa elementkonkretnya elementkonkretnyb odwiedzajcykonkretny 1: Przyjmij(odwiedzajcy) 2: OdwiedElementKonk ret nya(elementkonkretnya) 3: OperacjaA() 4: Przyjmij(odwiedzajcy) 5: OdwiedElementKonkretnyB(elementKonkretnyB) 6: OperacjaB()

Konsekwencje: łatwe dodawanie nowych operacji zebranie razem powizanych ze sob operacji a rozdzielenie niepowizanych trudne dodawanie nowych klas ElementKonkretny odwiedzanie całej hierarchii klas - lepiej ni iterator, bo moe działa na rónych typach kumulowanie stanu naruszanie kapsułkowania operacje dostpu do stanu obiketów klasy ElementKonkretny

Implementacja: wywoływanie dwukrotne który z uczestników jest odpowiedzialny za przechodzenie struktury obiektowej?

Przykłady Zastosowania Pokrewne wzorce: Composite mona odwiedza hierarchi kompozytu Interpreter zastosowanie do interpretowania