WYKŁAD 8. Wzorce projektowe strukturalne Facade Proxy Flyweight



Podobne dokumenty
WYKŁAD 12. Wzorce projektowe czynnociowe State Mediator

WYKŁAD 10. Wzorce projektowe czynnociowe Command Strategy

WYKŁAD 11. Wzorce projektowe czynnociowe Iterator TemplateMethod

Wzorce projektowe. dr inż. Marcin Pietroo

WYKŁAD 9. Wzorce projektowe czynnociowe Observer Visitor

Programowanie Obiektowe

1) Wzorzec projektowy Adapter. Zastosowanie:

WYKŁAD 5. Wzorce projektowe kreacyjne Builder Prototype

Wzorce projektowe. dr inż. Marcin Pietroo

Bazy danych Podstawy teoretyczne

Wzorce projektowe ArrayList. Aplikacja i zdarzenia. Paweł Chodkiewicz

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

Zaawansowane programowanie w C++ (PCP)

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

Testowanie oprogramowania Wzorce projektowe

Wzorce projektowe kreacyjne

Wprowadzenie do programowania aplikacji mobilnych

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

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

Wypożyczalnia VIDEO. Technologie obiektowe

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

Planowanie adresacji IP dla przedsibiorstwa.

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Projektowanie obiektowe Wzorce projektowe. Gang of Four Wzorce odpowiedzialności

Wzorce projektowe strukturalne cz. 1

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

Programowanie obiektowe

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

Wzorce projektowe. dr inż. Marcin Pietroo

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

Projektowanie obiektowe Wzorce projektowe. Wprowadzenie do wzorców projektowych

WYKŁAD 7. Wzorce projektowe strukturalne Adapter Bridge

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

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

Wzorce projektowe Michał Węgorek

Projektowanie obiektowe Wzorce projektowe. Gang of Four Wzorce rozszerzeń

Program Sprzeda wersja 2011 Korekty rabatowe

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

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

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

Zaawansowane programowanie obiektowe - wykład 5

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

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

Typy bazy danych Textract

Technologia Programowania 2016/2017 Wykład 5

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

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

Gramatyki regularne i automaty skoczone

Wprowadzenie do kompilatorów

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

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

Projektowanie oprogramowania: wzorce architektoniczne i projektowe

WZORCE PROJEKTOWE (I) (DESIGN PATTERNS)

Ateus - Helios. System domofonowy

1. WSTP. 2. Koncepcja platformy bezpieczestwa publicznego

Sposoby przekazywania parametrów w metodach.

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

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

Technologia Programowania 2016/2017 Wykład 4

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

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

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

Argumenty na poparcie idei wydzielenia OSD w formie tzw. małego OSD bez majtku.

Przykładowa implementacja

Proxy (pełnomocnik) Cel: Zastosowanie: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego.

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

VPN Virtual Private Network. Uycie certyfikatów niekwalifikowanych w sieciach VPN. wersja 1.1 UNIZETO TECHNOLOGIES SA

... Ireneusz Mrozek. Wydział Informatyki

Program do konwersji obrazu na cig zero-jedynkowy

Opera Wykorzystanie certyfikatów niekwalifikowanych w oprogramowaniu Opera wersja 1.1 UNIZETO TECHNOLOGIES SA

Plan wykładu. Reguły asocjacyjne. Przykłady asocjacji. Reguły asocjacyjne. Jeli warunki to efekty. warunki efekty

Projektowanie obiektowe Wzorce projektowe

Poradnik korzystania z serwisu UNET: Dostp do poczty elektronicznej ze strony WWW

Programowanie w języku Java WYKŁAD

FORTECA DF - terminal kasowy

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

s FAQ: NET 08/PL Data: 01/08/2011

PRZESTRZE NAZW DOMEN DNS

Wojciech Drzewiecki SYSTEMY INFORMACJI GEOGRAFICZNEJ

Kod CPV WENTYLACJA

Przygotowanie rodowiska dla egzaminu e-obywatel

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

Wykład 1 Inżynieria Oprogramowania

Programowanie obiektowe - 1.

Zadania do wykonaj przed przyst!pieniem do pracy:

STATUT SOŁECTWA SŁOWINO ROZDZIAŁ I. POSTANOWIENIA OGÓLNE

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

Wzorce oprogramowania Gof (cd) zastosowane w modelu obiektowym

Elementy pneumatyczne

System midzybankowej informacji gospodarczej Dokumenty Zastrzeone MIG DZ ver Aplikacja WWW ver. 2.1 Instrukcja Obsługi

Stawiajc krzyyk w odpowiedniej wartoci mona zapisa dowolnego binarnego reprezentanta liczby dziesitnej x x x x x

Standardy danych w tagu EPC

Klub Paragraf 34, Bronisławów dr in. Marek Dwiarek. Centralny Instytut Ochrony Pracy Pastwowy Instytut Badawczy

Instrukcja obsługi programu MechKonstruktor

Wymierne korzyci wynikajce z analizy procesów

Instrukcja obsługi dodatku InsERT GT Smart Documents

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

AQUAGOR POMPA CIEPŁA WODA/WODA

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

Transkrypt:

WYKŁAD 8 Wzorce projektowe strukturalne Facade Proxy Flyweight

Structural Design Pattern: Facade Zapewnia jednolity interfejs dla podsystemu zawierajcego wiele interfejsów. Definiuje interfejs wyszego poziomu, co ułatwia korzystanie z podsystemu. Analogia do fasady budynku zzewntrz ładna i równoczenie daje dostp do wntrza.

Uzasadnienie: W dekompozycji systemu na podsystemy dy si m.in. do zminimalizowania komunikacji i zalenoci pomidzy podsystemami. Jedn z metod osiagnicia tego celu jest wprowadzenie obiektu fasada zapewniajcego jeden uogólniony i uproszczony interfejs do całego podsystemu.

Przykładowo wyobramy sobie rodowisko programistyczn zwierajce jako podsystem kompilator. Podystem ten zawiera takie klasy jak: AnalizatorLeksykalny, AnalizatorSyntaktyczny, WezelProgramu, StrumienKodowBajtowych, BudowniczyWezlowProgramu. [wzły tworzenie drzewa analizy syntaktycznej]

W wikszoci przypadków rodowisko programistyczne nie musi korzysta z bogatego i złoonego interfejsu tych klas. Zadanie kompilatora ogranicza si zwykle do kompilacji. Aby udostpni klientom kompilatora taki włanie interfejs dodajemy klas Kompilator, która z jednej strony wprowadza uproszczony interfejs, a z drugiej nie odcina klienta od moliwoci korzystania z bogatego interfejsu ukrytego za fasad.

Stosowalno: zamiar zapewnienia prostego interfejsu do złoonego podsystemu rozrost podsystemów jest zjawiskiem naturalnym gdy stosuje si w nich wzorce projektowe [wzrost iloci klas i złoonoci jako koszt zwikszenia ponownego uycia i zwikszenia ponownego uycia kompromisy]

istnieje wiele zalenocimidzy klientami abstrakcji a klasami implementujcymi warto wprowadzi fasad w celu oddzielenia podsystemu od klientów i innych podsystemów [wzrost niezalenoci podsystemów i ich przenonoci] zamiar stworzenia architektury wielowarstwowej komunikacja midzy warstwami jedynie poprzez fasady Struktura:

Uczestnicy: Fasada (Kompilator) wie jakie klasy podsystemu s odpowiedzialne za spełnienie dania przekazuje dania klienta do odpowiednich obiektów podsystemu

Klasy podsystemu (Skaner, Analizator, WzełProgramu) implementuj funkcje podsystemu wykonuj prac przydzielon przez obiekt klasy Facade nic nie wiedz o fasadzie, tzn. nie przechowuj adnych odwoła do niej

Współpraca: Klienci komunikuj si z podsystemem, wysyłajc dania do Facade, która przekazuje je do odpowiednich obiektów podsystemu. Obiekty podsystemu wykonuj właciw prac. Facade moe uczestniczy w tłumaczeniu jej własnego interfejsu na interfejsy podsystemów Klienci Facade nie musz mie dostpu do obiektów jej podsystemu

Konsekwencje: Zalety (istotne zastosowanie w inynierii oprogramowania) oddzielenie klientów od komponentów (?) podsystemu [wieloznaczno pojcia obiekt] moliwo uproszczenia klientów osłabia powizanie midzy podsystemami [spełnienie wanego kryterium jakoci weak-coupling (słabe powizanie?)] oraz pozostawia silne powizania pomidzy elementami podsystemu [spełnienie wanego kryterium jakoci strong-cohesion (mocne powizanie, zwarto?)] ułatwiona zmiana komponentów w sposób niewidoczny dla klienta ułatwiona budowa warstwowa systemu eliminowanie złoonych zalenoci lub circular-dependencies (zalenoci cyklicznych) ułatwienie niezalenego tworzenia podsystemów [obsługa iteracyjnoci procesu wytwórczego] zredukowanie zalenoci kompilacyjnych

Implementacja: zredukowanie powiza klient-podsystem moliwo dodatkowego osłabienia przez uczynienie klasy Fasade abstrakcyjn z rónymi podklasami konkretnymi dla rónych implementacji podsystemu, dziki czemu klienci nie wiedz o implementacji podsystemu, z której korzystaj, albo konfigurowanie obiektu klasy Facade za pomoc rónych obiektów podsystemu

publiczne a prywatne klasy podsystemu klasa kapsułkuje stan i operacje oraz ma interfejs (publiczny lub prywatny) a podsystem kapsułkuje klasy oraz ma interfejs, wic równie moe mie interfejs publiczny lub prywatny Interfejs publiczny jest dla klientów, a prywatny dla rozbudowujcych podsystem. Klasa Facade jest czci (bo podsystem moe mie wicej fasad) publicznego interfejsu podsystemu

Przykłady Znane zastosowania Pokrewne wzorce: Fabryka Abstrakcyjna zapewnia interfejs do tworzenia obiektów podsystemów w sposób niezaleny od podsystemów. Moe by uyty zamiast wzorca Facade wtedy ukryje klasy specyficzne dla poszczególnych platform (?)

Mediator podobny do Facade, bo pozwala na wyodrbnienie funkcjonalnoci istniejcych ju klas. Zadaniem wzorca Mediator jest jednak wyabstrahowanie dowolnej komunikacji midzy obiektami (jego współpracownikami), ze skupieniem funkcjonalnoci, która nie jest zwizana z adnym z nich, w jednym miejscu. Współpracownicy Mediatora wiedz o nim i komunikuj si z nim a nie midzy sob. Natomiast zadaniem Facade jest wyabstrahowanie interfejsu obiektów podsystemu dla ułatwienia ich uycia nie definiuje nowej funkcjonalnoci, a klasy podsystemu nic o niej nie wiedz. Singleton zwykle naley zagawrantowa istnienie tylko jednego obiektu Facade

Structural Design Pattern: Proxy Zapewnia substytut lub reprezentanta innego obiektu w celu sterowania dostpem do niego.

Uzasadnienie: W edytorach graficznych moemy nie chcie umieszczania od razu przy otwieraniu dokumentu całego duego i złoonego obrazka. Wolimy jego osadzenie odłoy do momentu, w którym rysunek ma si sta widoczny w okienku edytora. Jednak w dokumencie trzeba umieci co zamiast rysunku.

Rozwizaniem jest uycie zamiast obiektu rysunku innego obiektu pełnomocnika, który wystpuje wdokumencie zamiast docelowego obiektu. Obiekt pełnomocnika powinien zachowywa si tak jak rysunek i powinien te zaj si jego utworzeniem na danie (metoda Rysuj()). Po utworzeniu obiektu rysunku pełnomocnik zajmuje si przekazywaniem do niego da klienta (edytora).

Stosowalno: Stsouje si go wtedy, gdy do odwołania do obiektu potrzeba czego wicej ni wskanik. Typowe sytuacje: Pełnomocnik zdalny. Lokalny reprezentant obiektu znajdujcego si w innej przestrzeni adresowej. Pełnomocnik wirtualny. Tworzy kosztowne obiekty na danie (przykład podano)

Pełnomocnik ochraniajcy. Kontroluje dostp do oryginalnego obiektu (np. gdy obiekty maj róne prawa dostpu) Sprytne odwołanie. Zastpuje zwykły wskanik wykonujc dodatkowe akcje przy dostpie do obiektu [por. C++::STL]. Typowe zastosowania: zliczanie iloci odwoła do rzeczywistego obiektu tak by mona go było usun gdy wiadomo, e nie jest ju potrzebny [por. Java::ReferenceCounting] ładowanie trwałych obiektów do pamici przy pierwszym odwołaniu sprawdzanie czy rzeczywisty obiekt jest zablokowany przed uyciem go (np. wielowtkowo)

Uczestnicy: Pełnomocnik (PełnomocnikRysunku) przechowuje odwołanie, które umoliwia mu dostp do obiektu klasy PrawdziwyPrzedmiot; moe odwoływa si do klasy Przedmiot jeli ma ona taki sam interfejs zapewnia taki sam interfejs jak interfejs klasy Przedmiot (zastpowalno obiektów) kontroluje dostp do prawdziwego przedmiotu, w tym tworzeni i usuwanie

ponadto: pełnomocnicy zdalni odpowiedzialni za kodowanie da i ich argumentów oraz za wysyłanie zakodowanych da do rzeczywistych przedmiotów w innej przestrzeni adresowej pełnomocnicy wirtualni mog przechowywa w pamici podrcznej dodatkowe informacje o rzeczywistym przedmiocie, dziki czemu mog odłoy na póniej uzyskanie dostpu do niego pełnomocnicy ochraniajcy sprawdzaj czy wywołujcy ma wymagane zezwolenie na dostp

Przedmiot (ObiektGraficzny) definiuje wspólny interfejs dla klas PrawdziwyPrzedmiot i Pełnomocnik PrawdziwyPrzedmiot (Rysunek) definiuje rzeczywisty obiekt reprezentowany przez obiekt klasy Pełnomocnik

Współpraca: Pełnomocnik w zalenoci od potrzeb i rodzaju przekazuje dania do obiektu klasy PrawdziwyPrzedmiot Konsekwencje: Wprowadza poziom poredniczenia, o nastpujcych zastosowaniach: pełnomocnik zdalny moe ukry fakt umieszczenia obiektu w innej przestrzeni adresowej pełnomocnik wirtualny moe wykonywa optymalizacj pełnomocnicy ochraniajcy i sprytne odwołania umoliwiaj wykonywanie dodatkowych czynnoci porzdkowych

Wzorzec Pełnomocnik moe ukry przed klientem optymalizacj kopiowanie-przy-zapisywaniu. Implementacja przecianie operatora dostpu od składowych w C++ stosowanie doesnotunderstand w Smalltalk pełnomocnik nie zawsze musi zna typ prawdziwego przedmiotu

Przykłady Znane zastosowania Pokrewne wzorce: Adapter. Zapewnia inny interfejs do adaptowanego obiektu. Pełnomocnik natomiast zapewani taki sam interfejs jak interfejs przedmiotu. Pełnomocnik zasosowany do ochrony dostpu moe odmówi wykonania operacji jego interfejs jest podzbiorem interfejsu przedmiotu.

Decorator. Moe mie podobn implementacj do wzorca Proxy, ale jego przeznaczenie jest inne. Decorator dodaje co najmniej jedno zobowizanie do obiektu, a Proxy steruje dostpem do obiektu pełnomocnik ochraniajcy moe by zaimplementowany jak Decorator pełnomocnik zdalny nie zawiera bezporedniego odwołania do pzredmiotu (hostid+lokalny adres na nim) pełnomocnik wirtualny rozpoczyna działanie od poredniego odwołania, potem uzyskuje i stosuje bezporednie

Structural Design Pattern: Flyweight Wykoryzstuje współdzielenie obiektów w celu efektywnej obsługi wilekiej iloci drobnych obiektów.

Uzasadnienie: Czasami mamy sytuacje, w których musimu mie duo małych obiektów. Przykładem moe by edytor tekstu, w którym obiekty takie jak wykresy, rysunki, akapity mog (powinny) by reprezentowane jako obiekty. Jednak jeli chcielibymy reprezentowa w ten sposób znaki w celu zwikszenia elastycznoci aplikacji, to byłoby to bardzo nieefektywne (pami+czas przetwarzania).

Wzorzec Flyweight (pyłek) okrela takie współdzielenie obiektów, aby mona było obsługiwa znaki jako obiekty bez ponoszenia ogromnych kosztów.

Flyweight to współdzielony obiekt, który moe by uywany jednoczenie w wielu kontekstach. Działa jako obiekt niezaleny w kazdym kontekcie. Jest nie do odrónienia od obiektu niewspółdzielonego. Nic nie wie o kontekcie, w jakim ma by uyty. Rozróniane s stan wewntrzny (w pyłku, niezaleny od kontekstu) i stan zewntrzny (zaleny od kontekstu). Klient przekazuje stan zewntrzny do pyłku jeli potrzebny.

Dla przykładu edytor tekstu moe utworzy pyłek dla kadej litery alfabetu (1-1). Kady pyłek przechowuje stan wewntrzny (kod znaku). Połoenie znaku w dokumencie, styl typograficzny s okrelone na zewntrz pyłku okrelajc stan zewntrzny. Przykład moliwej realizacji takiego edytora:

Glif klasa abstrakcyjna obiektów graficznych. Wiersz wie gdzie Znaki powinny si wyrysowa aby były równo ułoone (połoenie biecego wiersza), moe te zlicza sum szerokoci swoich wczeniejszych znaków oba te parametry mog stanowi Kontekst.

Stosowalno: Naley go stosowa gdy spełnione s wszystkie ponisze warunki: aplikacja uywa wielkiej iloci obiektów koszty zapamitania s wysokie ze wzgldu na sam ilo obiektów wikszo stanu obiketów moe by przeniesiona na zewntrz po usuniciu stanu na zewntrz wiele grup obiektó mona zastpi stosunkowo niewielk iloci współdzielonych obiektów tosamo obiektów nie jest dla aplikacji istotna

Struktura:

Uczestnicy: Pyłek (Glif) deklaruje interfejs przez który pyłki mog otrzymywa stan zewntrzny i działa zgodnie z nim PyłekKonkretny (Znak) implementuje interfejs pyłku i ew. przechowuje stan wewntrzny musi dawa si współdzieli

NiewspółdzielonyPyłekKonkretny (Wiersz, Łam) czsto PyłkiKonkretne s dziemi obiektów klasy NiewspółdzielonyPyłekKonkretny FabtykaPyłków tworzy obiekty klasy Pyłek i zarzdza nimi zapewnia właciwe współdzielenie pyłków Klient utrzymuje odwołania do pyłków wylicza lub przechowuje stan zewntrzny pyłków

Współpraca: Klienci musz zna stan zewntrzny, aby mogli przekaza go do obiektów klasy PyłekKonkretny Klienci nie powinni zajmowa si tworzeniem obiektów klasy PyłekKonkretny obsług współdzielenia zajmuje si FabrykaPyłków

Konsekwencje: Zysk na pamici kosztem spowolnienia aplikacji zaleny od: zmniejszenia łcznej iloci obiektów wynikajcego ze współdzielenia wielkoci stanu wewntrznego obiektu tego czy stan zewntrzny jest wyliczany czy przechowywany

Implementacja: usuwanie stanu zewntrznego ma sens gdy mona go przenie (wyliczy) do znacznie mniejszej iloci obiektów zarzdzanie współdzielonymi obiektami FabrykaPyłków czsto uywa pamici asocjacyjnej pyłki warto przechowywa w pamici gdy jest ich stosunkowo niewiele a zlicza odwołania lub odmieca gdy jest ich duo a nie s ju potrzebne

Przykłady Znane zastosowania Pokrewne wzorce: Composite czsto łczony z wzorcem Flyweight w celu zaimplementowania logicznie hierarchicznej struktury w kategoriach acyklicznego grafu skierowanego ze współdzielonymi wzłami-limi State, Strategy czsto najlepszym wyjciem jest zaimplementowanie ich jako Flyweights

WZORCE PROJEKTOWE CZYNNOCIOWE Omówimy (W9-W11): Observer Visitor Command Strategy Iterator TemplateMethod