Decorator.

Slides:



Advertisements
Podobné prezentace
Značka výrobku Značka se skládá:
Advertisements

(instance konkrétní třídy)
Stručný úvod do UML.
Licenční politika Pro výuku devátého ročníku ZŠ Vypracoval: S.V.
Překlad síťových adres - NAT
Vektorový animátor Diplomová práce
3. Dlouhé období.
Tvorba mezinárodních podnikových sítí a strategických aliancí
Chain of responsibility Martin Malý prezentace na předmět Návrhové vzory (PRG024) na MFF UK
Tvorba webových aplikací
Praha6.cz Nové trendy v e-publishingu Statické stránky, mapa stránek, menu a fulltextové vyhledávání.
State. State – kontext a problém Kontext  chování objektu má záviset na jeho stavu, který se typicky mění za běhu Neflexibilní řešení  metody obsahují.
Apache, PHP, MySQL Lukáš Masopust Web server Apache Aplikace schopná zpracovat HTTP požadavek Nejpoužívanější Web server Vytváří ho The Apache.
Proč programovat v LS objektově Jiří Krákora, Alliance Healthcare.
Přehled současných způsobů tvorby programů
Adapter. Adapter – pojem Součástka navržená k propojení dvou „nekompatibilních“ zařízení Definice slova podle Cambridge Advanced Learner's Dictionary:
Paměťová média.
Paměťové obvody a vývoj mikroprocesoru
Objektové programování
Inflace 1. Vymezení pojmů 2. Příčiny inflačních procesů.
Strategy. Strategy – „All-in-1“ na začátek class AStrategy { public: virtual void Algorithm()=0; protected: AStrategy(); }; class SpecificStrategy: public.
Gymnázium Dr. Emila Holuba, Holice.  Paměti RAM  Grafické karty  Zvukové karty.
Composite [kompozit, ne kompozajt]. Composite Výslovnost  kompozit, ne kompozajt Účel  Popisuje, jak postavit hierarchii tříd složenou ze dvou druhů.
6. cvičení Polymorfismus
Rozšíření IQ sestav v RZ Jak zobrazovat data na 100% ? Ing. Robert Naar Skalský Dvůr
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA Zbyněk Šlajchrt Část 13.
Návrhový vzor Factory v JAVA API Martin Kot Katedra informatiky VŠB – Technická univerzita Ostrava
IB111 Programování a algoritmizace
Optický přenosový systém
Výhody a nevýhody open-source a komerčních SW produktů
Sedmé cvičení Soubory Vstupně/výstupní proudy. Java cv72 Soubory Třída File Objekt popisující soubor na filesystému Nedá se z něho přímo číst a psát Představuje.
Šesté cvičení Výjimky Balíky.
JADEGen Nástroj pro generování chování z prostředí Agent Studio Implementace (ver0.1)
Decorator. Rozšiřuje objekty o dodatečné chování  rozšiřuje konkrétní objekty, ne třídy  rozšiřuje objekt dynamicky, tj. za běhu Upřednostňuje kompozici.
Návrh podle kontraktu - klasická metodika a moderní nástroje Tomáš Pitner Masarykova univerzita v Brně Fakulta informatiky
Změna datového modelu databáze Odry 2000 Autor: Kateřina Šimečková Vedoucí bakalářské práce: ing. David Vojtek.
Vrstvení úprav do skupin VY_32_INOVACE_Mul4a0207Mgr. Jiří Mlnařík.
Service layer. Service layer – úvod Problém  Vytvoření API aplikace  Odstínění bussiness logiky a transakčního chování od zbytku aplikace  Kam s aplikační.
Kreslítko Petr Diviš Zdeněk Papež. Úvod - připomenutí Desktopová („stand-alone“) aplikace Jednoduchý grafický editor  Tvorba a editace základních geometrických.
11/2003Přednáška č. 41 Regulace výpočtu modelu Předmět: Modelování v řízení MR 11 (Počítačová podpora) Obor C, Modul M8 ZS, 2003, K126 EKO Předn./Cvič.:
Strategy. Motivace Různé algoritmy pro stejnou akci Hromada kódu v mnoha podmínkách Důsledky  Komplexnost  Špatná čitelnost  Těžká správa kódu  Těžka.
MICROSOFT OFFICE 2007/2010. Důvod změny Inovace technologií Nové možnosti použití Kompatibilita Ukončení tech. podpory starších verzí Office 2003 –
JavaScript úvod. Jazyky webového vývojáře Dynamická stránka  aktivně mění svůj obsah v reakci na činnost uživatele  zpracování na straně serveru (PHP,
Template Method. Motivační příklad – reálný svět Čaj 1) Uvař vodu 2) Dej do hrnku sáček čaje 3) Zalij hrnek 4) Přisyp cukr a vymačkej citrón Káva 1) Uvař.
ZÁKLADY EKONOMIE I Poptávka a nabídka Tržní mechanismus 4
Online nástroje pro sběr a administraci dotazníků Ladislava Suchá , Brno Zdroj obrázku: bredmaker, Sxc.hu.
Grafický editor GIMP (6) Mgr. Jaroslav Zavadil, Gymnázium Šternberk Dostupné z Metodického portálu ISSN: , financovaného z ESF a státního.
Celou prezentaci a související články najdete na T-mobile rozjezdy 2016 Poslání značky Mise Vize Řešení.
Počítačová grafika Zoner Callisto – tabulky Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Růžena Hynková. Dostupné z Metodického portálu.
Digitální učební materiál Název projektu: Inovace vzdělávání na SPŠ a VOŠ PísekČíslo projektu: CZ.1.07/1.5.00/ Škola: Střední průmyslová škola a.
SOFTWAROVÁ PODPORA PRO VYTVÁŘENÍ FUZZY MODELŮ Knihovna fuzzy procedur Ing. Petr Želasko, VŠB-TU Ostrava.
Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY MVC vs MVP.
Webdesign prakticky Jak probíhá tvorba webu pro střední a velké společnosti?
NÁZEV ŠKOLY:SOŠ Net Office, spol. s r.o. Orlová Lutyně
SOLID principy v OOP návrhu
Moduly.
Programovací jazyk C# 4. část - cykly.
Decorator Radek Zikmund NPRG024, LS 2016/17.
Vědecké výpočty v Jave.
Grafický editor GIMP (6)
Tradiční metodiky vývoje softwaru
Strategy „Definujte rodinu algoritmů, zapouzdřuje je aby byly vzájemně zaměnitelné. Strategie umožňuje, aby se algoritmus nebyl závislý na klientech, kteří.
Vysoká škola báňská - Technická univerzita Ostrava
Bridge.
Tradiční metody vývoje softwaru
MNOŽINY RNDr. Jiří Kocourek.
Grafický editor GIMP (6)
Monitor Object 1.
Proxy 1.
Composite “Spojuj a panuj”.
Transkript prezentace:

Decorator

Problém Káva Cena House Blend 3.00€ Kenya 1.50€ Decaf Veranda Blend 3.50€ Espresso 2.00€

Problém Káva Cena House Blend 3.00€ Kenya 1.50€ Decaf Veranda Blend 3.50€ Espresso 2.00€ Šlehačka Čokoláda Mléko Voda Sojové mléko Mléčná pěna Čokoládový sirup Whiskey

„Řešení“ číslo 1 Omezení na podmnožinu Nemožné vytvořit jakoukoliv kombinaci Co když se změní cena mléka?

„Řešení“ číslo 2 Dědičnost

„Řešení“ číslo 2 Dědičnost

„Řešení“ číslo 3 Supertřída

„Řešení“ číslo 3 Supertřída

„Řešení“ číslo 3 Supertřída

„Řešení“ číslo 3 Supertřída if (MaMleko()) { cena += 0.10; } if (MaSojoveMleko()) cena += 0.50; if (MaPenu()) cena += 0.25; if (MaCokoladu()) cena += 0.65;

„Řešení“ číslo 3 Supertřída Změna ceny doplňku vynutí změnu celého kódu Přidání doplňku znamená změnu supertřída Co když chceme dvojitou dávku mléka?

„Open-Closed“ princip Třídy by měly být: otevřené pro rozšíření zavřené pro modifikaci Možnost rozšířit funkcionalitu bez nutnosti měnit stávající kód

Dědičnost ... je silný nástroj... ale může vést k neflexibilnímu designu vytváří statické, compile-time rozhodnutí

Kompozice stále umožňuje "dědit" chování umožňuje dynamické, run-time rozhodnutí umožňuje přidat nové chování bez změny stávajícího kódu

Kompozice větší flexibilita méně chyb a vedlejších efektů

Řešení číslo 4 Finální Espresso Cena()

Řešení číslo 4 Finální Postupně přidáváme doplňky/“dekorace“ Espresso Mléko Cena() Espresso Cena() Postupně přidáváme doplňky/“dekorace“

Řešení číslo 4 Finální Decorator a.k.a. Wrapper Espresso Cena() Mléko Šlehačka Cena() Mléko Cena() Espresso Cena() Decorator a.k.a. Wrapper

Řešení číslo 4 Finální Získání finální ceny Cena = 2 Espresso Cena() Šlehačka Cena() Mléko Cena() Espresso Cena() Cena = 2 Získání finální ceny Cena = <cena vyšší vrstvy> + 0.1 Cena = <cena vyšší vrstvy> + 0.3 Cena()

Řešení číslo 4 Finální Získání finální ceny Cena = 2 Espresso Cena() Šlehačka Cena() Mléko Cena() Espresso Cena() Cena = 2 Získání finální ceny Cena = <cena vyšší vrstvy> + 0.1 Cena = <cena vyšší vrstvy> + 0.3 Cena()

Vzor dekorátor ... přidává dodatečné závazky do objektu dynamicky Dekorátory poskytují flexibilní alternativu k podtřídám pro rozšíření funkcionality

Diagram

Společný abstraktní předek Diagram Společný abstraktní předek Abstraktní dekorátor Konkrétní komponenta Konkrétní dekorátor

Diagram

Kód

Kód

Kód

Vzor dekorátor Můžeme: libovolně kombinovat dekorátory přidávat více stejných dekorátorů k jedné komponentě

Potenciální problémy Pevné hodnoty (ceny) pro určité kombinace neodpovídají ručně vyrobené kombinaci Zaokrouhlování cen Možnost "negativní hodnoty" (odečtu ceny) v dekorátoru

Reálný problém InputStream FileInputStream InputFileLineStream LineInputStream FileInputStream InputStream InputFileLineStream

Reálné využití Grafické toolkity Čtení vstupu, zápis výstupu Java Swing System.Windows.Controls Čtení vstupu, zápis výstupu System.IO.Stream java.io DataInputStream dis = new DataInputStream( new GzipInputStream( new BufferedInputStream( new FileInputStream("file.gz")))); dis.Read(...);

Vestavěná podpora v jazycích zavináč @ JavaScript TypeScript Python

Výhody Vyšší flexibilita pro přidávání funkcionality oproti statickému dědění Transparentnost - programátor stále vidí objekt typu Nápoj Možnost rozšíření - přidávání doplňků Odolnost vůči změnám

Nevýhody Komponenta a dekorovaná verze komponentu nejsou identické Pena(Mleko(Espresso)) == Karamel(Decaf) Pena(Mleko(Espresso)).Cena() != Karamel(Decaf).Cena() Dlouhá řetěz dekorátorů => dopad na výkon Velké množství malých tříd

Související vzory Adapter Strategy Composite Decorator mění pouze chování objektu, ne jeho rozhraní Adapter dá objektu zcela nové rozhraní Composite Decorator je modifikovaný Composite - s jedinou komponentou Decorator přidává dodatečné chování, neagreguje objekty Strategy Decorator mění povrch objektu / Strategy mění vnitřek objektu Komponenta ve Strategy ví o extenzích