Facade [f ə ˈ s ɑː d]f ə ˈ s ɑː d. Facade Před: Po:

Slides:



Advertisements
Podobné prezentace
ÚVOD DO C++ 3 TŘÍDY a objekty - POKRAČOVÁNÍ
Advertisements

Stručný úvod do UML.
Mediator. Mediator - motivace  FontDialog  závislosti mezi jednotlivými ovládacími prvky jsou netriviální.
Proxy. Definice  zástupce nebo náhradník za dotyčný objekt  proxy i zastoupený objekt dědí od stejného interfacu  proxy kontroluje přístup k objektu.
Přednáška č. 5 Proces návrhu databáze
ÚVOD DO CPP 7 Dědičnost - pokračování
PJV151 Vnořené a vnitřní členy mohou být členy tříd a interfejsů. Je-li X obalem Y a Y je obalem Z, pak Z získá jméno X$Y$Z - kompilací vzniknou classy.
Operační systém Adam Greguš, 4.A.
Chain of responsibility Martin Malý prezentace na předmět Návrhové vzory (PRG024) na MFF UK
Tvorba webových aplikací
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í.
Páté cvičení Dědičnost Interface Abstarktní třídy a metody
Proč programovat v LS objektově Jiří Krákora, Alliance Healthcare.
Adapter. Adapter – pojem Součástka navržená k propojení dvou „nekompatibilních“ zařízení Definice slova podle Cambridge Advanced Learner's Dictionary:
Objektové programování
Jaroslav Šnajberk, Přemek Brada
Operační systémy.
Operační systémy.
Strategy. Strategy – „All-in-1“ na začátek class AStrategy { public: virtual void Algorithm()=0; protected: AStrategy(); }; class SpecificStrategy: public.
Databázové systémy Architektury DBS.
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
Memento. Obnovení operačního systému ( Windows | Linux...) Všichni víme, co jsou transekce v databázi Memento – zálohování databáze.
Dokumentace objektů a zveřejnění funkcí
Představujeme Ensemble Michal Tomek. Na tomto obrázku vidíte, co systému Ensemble chybí:
Návrhový vzor Factory v JAVA API Martin Kot Katedra informatiky VŠB – Technická univerzita Ostrava
IB111 Programování a algoritmizace
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
Virtual Reality Toolbox 2.0
CZ.1.07/1.4.00/ VY_32_INOVACE_168_IT 9 Výukový materiál zpracovaný v rámci projektu Vzdělávací oblast: Informační a komunikační technologie Předmět:Informatika.
Richard Lipka Department of Computer Science and Engineering Faculty of Applied Sciences University of West Bohemia, Pilsen, Czech Republic 1.
Metodika objektového přístupu při tvorbě překladačů. Marek Běhálek Informatika a aplikovaná matematika FEI VŠB-TU Ostrava.
Operační systémy Mgr. Ludmila Faltýnková EU OPVK ICT2-4/Inf12 Základní škola Olomouc, Heyrovského 33 Určeno pouze pro výuku Žádná část ani celek nesmí.
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.
Operační systémy. Operační systémy Operační systém je základním programovým vybavením nezbytně nutným pro provoz počítače. Poznámka: Operační systém.
Vzor na všechno. Vzor – úvod Problém .. Příklad: widgety .. Jak na to? .. Známý také jako...
Factory Method. Motivace – tisk Knihovna tiskne dokumenty do pdf File Open() Close() Print() PresentationWritingDrawing Knihovna tiskne obrázky do pdf.
OPERAČNÍ SYSTÉMY.
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í.
Observer Martin Dráb Návrhové vzory, Co to je?  Definuje závislost 1:N mezi objekty  Závislé objekty jsou informovány o změně stavu  Konzistentní.
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.
Iterator Iterator – Problém struct Item { int _value; Item * _next; Item( int value, Item * next ) : _value( value ), _next( next ) { } }; void Print(
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ř.
Funkce operačního systému (11). Projekt: CZ.1.07/1.5.00/ OAJL - inovace výuky Příjemce: Obchodní akademie, odborná škola a praktická škola pro.
Iterator. C historie int * rand_numbers(int n) { int *numbers = malloc(n * sizeof(int)); int *it = numbers; while (it < numbers + n) *it++ = rand(); //
© 2016 InterSystems Corporation. All rights reserved. Integrace OAuth 2.0 a OpenID Connect.
SOFTWAROVÁ PODPORA PRO VYTVÁŘENÍ FUZZY MODELŮ Knihovna fuzzy procedur Ing. Petr Želasko, VŠB-TU Ostrava.
Facade [f ə ˈ s ɑː d]f ə ˈ s ɑː d. Facade Před: Po:
Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY MVC vs MVP.
Vypracoval / Roman Málek
SOLID principy v OOP návrhu
školák Piš a sdílej své sešity, jednoduše, rychle, v pohodě.
Mediator Několik slov o překladu slova do češtiny (prostředník, zprostředkovatel), vyzdvihnutí počeštěného slova mediátor. 1 1.
Y36PJC Programování v jazyce C/C++
Návrhový vzor Flyweight
Abstract Factory.
Lazy load Použity informace z knihy Patterns of Enterprise Application Architecture od M. Fowlera Jan Sládek.
Redakční systém s integrací webových služeb
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ří.
Bridge.
Přednášky z distribuovaných systémů
C# přehled vlastností.
Decorator.
Monitor Object 1.
Dfdfdf.
Mediator Několik slov o překladu slova do češtiny (prostředník, zprostředkovatel), vyzdvihnutí počeštěného slova mediátor. 1 1.
GRASP Patterns.
Adapter
Composite “Spojuj a panuj”.
Bridge.
Transkript prezentace:

Facade [f ə ˈ s ɑː d]f ə ˈ s ɑː d

Facade Před: Po:

Facade Subsystémy (Zordi)Fasáda (Megazord)

Facade Známý jako  Facade, Fasáda Motivace  Rozdělení systému na subsystémy  Subsystém = množina tříd a dalších subsystémů  Rozhraní subsystému se s přibývajícíma třídami stává složitým  Řešením je zavedení fasády - sjednocené high-level rozhraní Řada užitečných vlastností  Zapouzdření – uživatel nemusí pracovat přímo se třídami subsystému Použití subsystémů je zjednodušeno  Redukce závislosti mezi subsystémy Zjednodušuje komunikaci subsystémů  Decoupling Zvyšuje přenositelnost  …

Facade – domácí kino projektor DVD přehrávač žaluzie HI-FI soustava Puštění filmu:  zatáhnutí žaluzií  zapnutí projektoru  zapnutí DVD přehrávače  zapnutí ozvučení Ukončení přehrávání:  vypnout DVD přehrávač  vypnout ozvučení  vypnout projektor  vytáhnout žaluzie

Facade – domácí kino Řešení: Univerzální ovladač s funkcemi:  Přehrát film  Ukončit film  …  zatáhnout žaluzie  zapnout projektor  zapnout DVD přehrávač  zapnout ozvučení  vypnout DVD přehrávač  vypnout ozvučení  vypnout projektor  vytáhnout žaluzie

Facade – kompilátor Účastníci  Fasáda – Compiler Přijímá high-level požadavky Deleguje požadavky klienta mezi třídy subsystému Může vykonávat vlastní práci (napr. Adapter)

Facade – kompilátor Účastníci  Subsystémy – Scanner, Parser, … Implementují logickou část kompilátoru Vykonávají příchozí požadavky od fasády O fasádě nevědí (transparentnost) Nejsou skryté (!)

Facade – kompilátor class Scanner { public: … Scanner(istream&); virtual Token& Scan(); … }; Třída subsystému class Parser { public: … virtual void Parse(Scanner&, ProgramNodeBuilder&); … }; Třída subsystému class ProgramNodeBuilder { public: ProgramNodeBuilder(); virtual ProgramNode* NewVariable(…); virtual ProgramNode* NewAssignment(…); virtual ProgramNode* NewReturnStatement(…); virtual ProgramNode* NewCondition(…) const; … ProgramNode* GetRootNode(); … }; Třída subsystému

Facade – kompilátor class ProgramNode { public: // program node manipulation virtual void GetSourcePosition(int& line, int& index); … // child manipulation virtual void Add(ProgramNode*); virtual void Remove(ProgramNode*); … virtual void Traverse(CodeGenerator&); protected: ProgramNode(); }; Třída subsystému void ExpressionNode::Traverse (CodeGenerator& cg) { cg.Visit(this); ListIterator i(_children); for (i.First(); !i.IsDone(); i.Next()) { i.CurrentItem()->Traverse(cg); }

Facade – kompilátor class Compiler { public: Compiler(); virtual void Compile(istream&,BytecodeStream&); }; void Compiler::Compile ( istream& input, BytecodeStream& output ) { Scanner scanner(input); ProgramNodeBuilder builder; Parser parser; parser.Parse(scanner, builder); RISCCodeGenerator generator(output); // potomek CodeGenerator ProgramNode* parseTree = builder.GetRootNode(); parseTree->Traverse(generator); } Facade class CodeGenerator { public: virtual void Visit(StatementNode*); virtual void Visit(ExpressionNode*); … protected: CodeGenerator(BytecodeStream&); protected: BytecodeStream& _output; }; Třída subsystému

Facade – volání funkce Diagram volání funkce  Uživatel využívá Facade pro přístupu k systému

Facade – reálná implementace Systém kombinující info o letech a hotelech

Použití  Když je subsystém složitý na přímé použití Cena za vytvoření fasády < nastudování subsystému uživateli Umožnuje obalit množinu špatně navržených API do jednoho lepšího  Když existuje mnoho závislostí vně subsystému/mezi subsystémy Komunikace skrz fasádu (higher-level interface)  Při vytváření vstupních bodů vrstveného systému Výhody použití  Redukuje počet objektů, se kterými klienti komunikují Snadnější použití subsystému Snadnější nahrazení částí subsystému a rozšíření subsystému  Zmenšuje počet závislostí mezi klienty a subsystémem Odstraňuje komplexní a kruhové závislosti Méně kompilačních závislostí  Neskrývá třídy subsystému Jednoduchost nebo použití na „míru“ Facade – použití

Facade – implementace Fasáda jako abstraktní třída (příp. interface)  Konkrétní implementace pro konkrétní subsystém je jejím potomkem  Klienti komunikují se subsystémem přes rozhraní abstraktní třídy Klient nemusí vědět, která implementace byla použita Flexibilita Fasáda jako jedna konfigurovatelná třída  Slabší alternativa  Výměna komponent subsystému za běhu  Dependency Injection, Inversion of Control

Typické chyby  Fasáda vůbec nebyla zapotřebí Subsystém je příliš jednoduchý  Fasáda byla implementována už od začátku Má přibýt až když je potřebná  Uživatel je nucen fasádu používat Třídy subsystému jsou privátní  Fasáda neslouží k zvýšení bezpečnosti Nic neskrývá  Subsystém o fasádě ví Třídy subsystému si drží referenci na fasádu  Fasáda implementuje více než by měla Facade – použití

V mobilních aplikacích OS jako Façade  Interface pro ovládání přístoje Session Façade, Core J2EE Patterns  Fasáda pro webové služby JOptionPane ve Swingu  vytváří a zobrazuje různé typy základních dialogových oken  zjednodušuje používání této rozsáhlé knihovny Tomcat a jeho servlet API Facade – reálné použití

Facade – související vzory Abstract Factory  Fasáda může poskytovat rozhraní pro tvorbu objektů Singleton  Fasáda jako Singleton - jen jeden vstupní bod do systému Adapter  Adapter také tvoří interface pro přístup k systému  Nadstavba nad existujícími rozhraními  Primární funkci – standardizovat rozhraní Mediator  Mediator také snižuje závislosti  Komponenty subsystému přes něj komunikují (vědí o něm!)  Mediator abstrahuje funkcionalitu ze tříd a sám ji implementuje

Facade – shrnutí (aneb výhody po třetí) Poskytuje zjednodušené rozhraní  Komfort uživatele je priorita  Ale neskrývá ani původní rozhraní Zapouzdřuje subsystém  Množina špatně navržených API alternována jediným dobře navrhnutým API Eliminuje závislosti všeho druhu  Klient – subsystém  Subsystém – subsystém  Mezi dvěma třídami subsystému  Ve výsledku eliminuje i kompilační závislosti  …