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



Podobne dokumenty
Wzorce projektowe. dr inż. Marcin Pietroo

Programowanie w języku Java WYKŁAD

Wzorce projektowe strukturalne cz. 1

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 Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Projektowanie obiektowe Wzorce projektowe. Gang of Four Wzorce rozszerzeń

WYKŁAD 9. Wzorce projektowe czynnociowe Observer Visitor

WYKŁAD 5. Wzorce projektowe kreacyjne Builder Prototype

Zaawansowane programowanie w C++ (PCP)

Wzorce projektowe ArrayList. Aplikacja i zdarzenia. Paweł Chodkiewicz

1) Wzorzec projektowy Adapter. Zastosowanie:

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

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

Wzorce projektowe. dr inż. Marcin Pietroo

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

WYKŁAD 7. Wzorce projektowe strukturalne Adapter Bridge

Decorator (dekorator)

Wzorce projektowe kreacyjne

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

Projektowanie obiektowe oprogramowania Wykład 5 wzorce strukturalne Wiktor Zychla 2016

Testowanie oprogramowania Wzorce projektowe

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

Perspektywa obiektowości

Wypożyczalnia VIDEO. Technologie obiektowe

Wprowadzenie do programowania aplikacji mobilnych

Programowanie Obiektowe

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

Projektowanie obiektowe Wzorce projektowe

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

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

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

Wzorce projektowe Michał Węgorek

(wybrane) Wzorce projektowe. Programowanie Obiektowe Mateusz Cicheński

WZORCE PROJEKTOWE (I) (DESIGN PATTERNS)

(wybrane) Wzorce projektowe. Programowanie Obiektowe Mateusz Cicheński

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

Zofia Kruczkiewicz - Modelowanie i analiza systemów informatycznych 2

WYKŁAD 8. Wzorce projektowe strukturalne Facade Proxy Flyweight

Technologia Programowania 2016/2017 Wykład 4

Język Java część 2 (przykładowa aplikacja)

Programowanie obiektowe

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

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Warstwa integracji. wg. D.Alur, J.Crupi, D. Malks, Core J2EE. Wzorce projektowe.

Listy i operacje pytania

Prototype (prototyp) Cel: Przykład: Określenie rodzaju tworzonych obiektów poprzez wskazanie ich prototypu. Nowe instancje tworzymy kopiując prototyp.

Wzorce projektowe. dr inż. Marcin Pietroo

Program Sprzeda wersja 2011 Korekty rabatowe

Zaawansowane programowanie obiektowe - wykład 5

Klonowanie MAC adresu oraz TTL

Programowanie obiektowe

1. WSTP. 2. Koncepcja platformy bezpieczestwa publicznego

Inynieria oprogramowania Lecture XXX. Java TM cz IV: IO. Bartosz Walter

Program szkolenia: Wzorce projektowe w C++

Program szkolenia: Wzorce projektowe i ich implementacja w C# oraz testowanie automatyczne

Bazy danych. Plan wykładu. Proces modelowania i implementacji bazy danych. Elementy ERD. Wykład 2: Diagramy zwizków encji (ERD)

Builder (budowniczy) Cel: Przykład:

Bazy danych. Plan wykładu. Proces modelowania i implementacji bazy danych. Elementy ERD. Wykład 2: Diagramy zwizków encji (ERD)

Wprowadzenie do kompilatorów

Struktury Danych i Złożoność Obliczeniowa

Sposoby przekazywania parametrów w metodach.

Programowanie obiektowe

Wprowadzenie do systemów informacyjnych

hierarchie klas i wielodziedziczenie

Modelowanie i Programowanie Obiektowe

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

Projektowanie oprogramowania: wzorce architektoniczne i projektowe

Program do konwersji obrazu na cig zero-jedynkowy

Technologia Programowania 2016/2017 Wykład 5

Only for internal use! Interfejs IO-LINK, FDT/DTM, ifm Container

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

Architektura Systemu. Architektura systemu umożliwia kontrolowanie iteracyjnego i przyrostowego procesu tworzenia systemu.

Model obiektu w JavaScript

Adaptywny kod : zwinne programowanie, wzorce projektowe i SOLID-ne zasady / Gary McLean Hall. Gliwice, cop Spis treści

Spis treści. Wprowadzenie 15

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

Wzorce projektowe. Wstęp

Zaawansowane programowanie w C++ (PCP)

Wzorce projektowe i refaktoryzacja

Projektowanie obiektowe Wzorce projektowe. Wprowadzenie do wzorców projektowych

MODELOWANIE I PROGRAMOWANIE PRACY

Ateus - Helios. System domofonowy

Programowanie współbieżne i rozproszone

Wykład 4: Protokoły TCP/UDP i usługi sieciowe. A. Kisiel,Protokoły TCP/UDP i usługi sieciowe

Modelowanie diagramów klas w języku UML. Łukasz Gorzel @stud.umk.pl 7 marca 2014

java.util.* :Kolekcje Tomasz Borzyszkowski

Szczególne problemy projektowania aplikacji internetowych. Jarosław Kuchta Projektowanie Aplikacji Internetowych

Język Java część 2 (przykładowa aplikacja)

Typy bazy danych Textract

Inżynieria Programowania - Projektowanie architektoniczne

PRODUKTY DOKA DEDYKOWANE BUDOWIE DRÓG, MOSTÓW I TUNELI

Uywanie licencji typu Standalone. Japanese Using a Standalone License. Language. Contents

stopie szaro ci piksela ( x, y)

Programowanie obiektowe - 1.

Spraw elementarn jest rozgraniczenie dwóch typów licencji podstawowych:

Projektowanie Graficznych Interfejsów Użytkownika Robert Szmurło

Spis treci. Dzie 1. I Wprowadzenie (wersja 0911) II Dostp do danych biecych specyfikacja OPC Data Access (wersja 0911)

Transkrypt:

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

WYKŁAD 6 Wzorce projektowe strukturalne Decorator Composite

Structural Design Pattern: Decorator Dynamicznie dołcza do obiektów dodatkowe zobowizania. Zapewnia elastyczn alternatyw dla tworzenia podklas w celu rozszerzania funkcjonalnoci. Inne nazwy: Opakowanie (Wrapper)

Uzasadnienie stosowania: Czasami chcemy dołczy pewne zobowizania do niektórych obiektów a nie całych klas. Np. dodanie ramek i pasków przewijania do składników GUI. Dziedziczenie jest kłopotliwe statyczny wybór ramki, na dodatek dla kadego elementu.

Lepszym rozwizaniem jest umieszczenie obiektu dekorowanego (element GUI) wewntrz obiektu dekorujacego (ramka, scrollbars). Dekorator dostosowuje si do interfejsu dekorowanego obiektu stajc si przeroczystym dla klienta obiektu dekorowanego.

Dekorator przekazuje dania do obiektu dekorowanego i moe wykonywa dodatkowe operacje przed lub po otrzymaniu dania. Przeroczysto ta umoliwia rekurencyjne zagniedanie dekoratorów.

Mamy obiekt klasy WidokTekstowy wywietlajcy tekst w okienku. Standardowo nie ma on suwaków. Moemy je doda za pomoc DekoratorZSuwakami. Ramk moemy doda za pomoc DekoratoraZRamkami. Klasy DekoratorZSuwakami i DekoratoraZRamkami s podklasami abstrakcyjnej klasy Dekorator reprezentujcej komponenty wizulane, które ozdabiaj inne komponenty wizualne.

KomponentWizualny +komponent Rysuj() WidokTekstowy Dek orator Rysuj() Rysuj() komponent->ry suj(); DekoratorZSuwakami pozycjasuwaka Rysuj() PrzewinDo() DekoratorZRamkami szerokoscramki Rysuj() RysujRamke() Dekorator::Rysuj(); RysujRamke();

Klasa Dekorator przesyła dania do swojego komponentu a podklasy mog rozszerza to działanie. Jeli klient wie jaki dekorator został wykorzystany, to moe skorzysta z tych rozszerze.

Stosowalno: dynamiczne i przeroczyste dodawanie zobowizania do pojedynczych obiektów dodanie zobowiza, które mog zosta cofnite niepraktyczne rozszerzanie przez podklasy mnóstwo niezalenych rozszerze moe spowodowa eksplozj hierarchii. Struktura:

Komponent +komponent Operacja() KomponentK onkretny Dek orator Operacja() Operacja() k omponent->operacja(); DekoratorKonkretnyA dodanystan Operacja() DekoratorKonkretnyB Operacja() DodaneZachowanie() Dekorator::Operacja(); DodaneZachowanie();

Uczestnicy: Komponent (KomponentWizualny) definiuje interfejs obiektów, do których mona dynamicznie dołcza zobowizania KomponentKonkretny (WidokTekstowy) definiuje obiekt, do którego mona dołcza dodatkowe zobowizania

Dekorator zarzdza odwołaniem do obiektu Komponent i definiuje interfejs dopasowany do interfejsu Komponentu DekoratorKonkretny (.,.) dodaje zobowizania do Komponentu Współpraca: Dekorator przesyła dania do swojego obiektu Komponent. Moe opcjonalnie wykonywa inne operacje przed lub po przesłaniu dania

Konsekwencje: wiksza elastyczno ni przy stosowaniu statycznego dziedziczenia runtime, mieszanie zobowiza, wielokrotne dołczanie właciwoci (podwójna ramka) unikanie przeładowanych właciwociami klas na szczycie hierarchii koncepcja prostej klasy na szczycie wzbogacanej w miar potrzeb przez dekoratory

Dekorator i jego komponent nie s identyczne wiele małych obiektów takie systemy składaj si z wielu małych połczonych ze sob w skomplikowany sposób obiektów ich autorzy mog je bardzo łatwo zmienia, ale trudno je zrozumie i trudno usuwa z nich błdy

Implementacja: zgodno interfejsów obiektu dekorujacego i dekorowanego pomijanie klasy abstrakcyjnej Dekorator gdy dodajemy tylko jedno zobowizanie (po co ujednolica interfejsy) utrzymanie lekkoci klasy Komponent nie powinna definiowa danych zmiana skóry obiektu (Decorator) a zmiana wntrza obiektu (Strategy)

Przykłady: Znane zastosowania: GUI strumienie IO [rys.] Pokrewne wzorce: Adapter zmienia interfejs a nie tylko zobowizania.

Pokrewne wzorce: Adapter zmienia interfejs a nie tylko zobowizania. Kompozyt. Decorator to zdegenerowany Kompozyt z jednym komponentem. Strategia zmienia wntrze obiektu, a Dekorator zewntrze konkurencyjny sposób zmieniania obiektu (Strategia - gdy klasa Komponent jest cika)

Structural Design Pattern: Composite Składa obiekty w struktury drzewiaste reprezentujce hierarchie typu cz-cało. Umoliwia klientom jednakowe traktowanie pojedynczych obiektów i złoe obiektów.

Uzasadnienie stosowania: Aplikacje graficzne umoliwij budowanie złoonych diagramów z mniejszych elementów. Uytkownik moe grupowa mniejsze elementy w wiksze, a te w jeszcze wiksze. Problemem jest fakt, e kod w odrónieniu od uytkownika musi inaczej traktowa elementy pierwotne i kontenery.

Wzorzec pokazuje jak zastosowa składanie rekurencyjne tak aby klienci nie musieli rozrónia elementów pierwotnych od kontenerów.

Obiek tgraficzny Klient Rysuj() Dodaj( : Obiek tgraficzny) Usun( : Obiek tgraficzny) PodajDzieck o( : int) +obiekty graficzne Linia Prost okat Tekst Rysunek Rysuj() Rysuj() Rysuj() Operacja() Dodaj( : ObiektGraficzny) Usun( : ObiektGraficzny) PodajDziecko( : int)

Kluczowa jest tu klasa abstrakcyjna, która reprezentuje zarówno zarówno elementy pierwotne jak i ich konetenery. W przykładzie jest to klasa ObiektGraficzny. Deklaruje ona operacje Rysuj() specyficzne dla obiektów graficznych. Deklaruje te operacje wspólne dla kontenerów pozwalajce na manipulowanie dziemi.

Stosowalno: potrzebna reprezentacja hierarchii czcało wymaganie aby klienci mogli ignorowa rónic midzy złoeniami obiektów a pojedynczymi obiektami

Klient Komponent Operacja() Dodaj( : Komponent) Usun( : Komponent) PodajDzieck o( : int) +dzieci Kompozyt Lisc Operacja() Operacja() Dodaj() Usun() PodajDziecko() dla kadego og z dzieci og.operacja();

Uczestnicy: Komponent (ObiektGraficzny) deklaruje interfejs składanych obiektów implementuje, tam gdzie to moliwe, domylne zachowanie w wypadku interfejsu wspólnego dla wszystkich klas definiuje interfejs umoliwiajcy dostp i zarzdzanie komponentami- dziemi czasami definiuje interfejs umoliwiajcy dostp do rodzica komponentu w strukturze rekurencyjnej i implementuje go, jeli jest taka potrzeba

Lisc (Prostokt, Linia, Tekst) reprezentuje obiekty bdce limi w składanej strukturze definiuje zachowanie obiektów pierwotnych w strukturze Kompozyt (Rysunek) definiuje zachowanie komponentów majcych dzieci przechowuje komponenty bdce dziemi implementuje operacje z interfejsu Komponentu zwizane z dziemi

Klient manipuluje obiektami wystpujcymi w strukturze, wykorzystujc do tego interfejs Komponentu Współpraca: Klienci uywaj interfejsu z klasy Komponent w celu komunikowania si z obiektami składanej struktury. Jeli odbiorca jest liciem, to realizuje operacj, jeli kompozytem, to przesyła dalej.

Konsekwencje: definiuje hierarchie klas grupujce obiekty pierwotne i złoone upraszcza budow klienta ułatwia dodawanie nowych rodzajów komponentów moe sprawi, e projekt bdzie zbyt ogólny trudnoci z ograniczeniem rodzajów obiketów pierwotnych (dynamiczna kontrola typów zamiast statycznej)

Implementacja: jawne odwołania do rodziców ułatwiaj poruszanie si po strukturze i usuwanie komponentu; pomagaj w realizacji ChainOfResponsibility współdzielenie komponentów maksymalne powikszenie interfejsu Komponentu deklarowanie operacji zarzdzania dziemi

uporzdkowanie dzieci jeli kolejno ma znaczenie, to Iterator przechowywanie w pamici podrcznej w celu zwikszenia efektywnoci kto powinien usuwa komponenty? jaka struktura danych jest najlepsza do przechowywania komponentów

Przykłady: Znane zastosowania: Pokrewne wzorce: zwizku komponent-rodzic uywa si te przy stosowaniu ChainOfResponsibility czsto uywany z Decorator Flywieght umoliwia współdzielenie komponentów (ale bez referencji do rodziców)

Iterator moe by uywany do przechodzenia kompozytów Visitor grupuje w jednym miejscu operacje i zachowanie, które w przeciwnym razie byłyby rozproszone w klasach Kompozyt i Lisc