Facade. Známý jako. Účel. Motivace. Facade, Fasáda

Podobné dokumenty
DESIGN PATTERNS, PRESENTATION

Observer. Klasifikace. Alias. Smysl. Potřeba sledování změn objektu a notifikace. Obdoba systému událostí (C#, Java) vlastními prostředky

Mediator motivace. FontDialog. závislosti mezi jednotlivými ovládacími prvky jsou netriviální

PREPROCESOR POKRAČOVÁNÍ

Návrhové vzory. Jakub Klemsa, Jan Legerský. 30. října Objektově orientované programování.

Návrhové vzory OMO, LS 2014/2015

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

State. Známý jako. Účel. Použitelnost. Stav, Object for States. umožňuje objektu měnit svoje chování v závislosti na stavu objekt mění svou třídu

Semin aˇr Java N avrhov e vzory Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2009 Radek Koˇc ı Semin aˇr Java N avrhov e vzory 1/ 25

20. Projekt Domácí mediotéka

Abstract Factory úvod

Source Defender. PPJ semestrální projekt. Martin Přeták, ARI

PB161 Základy OOP. Tomáš Brukner

George J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA

Semin aˇr Java N avrhov e vzory Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2008 Radek Koˇc ı Semin aˇr Java N avrhov e vzory 1/ 24

specifikuje vytvářené objekty pomocí prototypické instance nový objekt vytváří kopírováním prototypu

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová

návrhový vzor Singleton.

Kód, který se nebude často měnit

PB161 Programování v jazyce C++ Přednáška 7

PB161 Programování v jazyce C++ Přednáška 7

Dědičnost. seskupování tříd do hierarchie. potomek získá všechny vlastnosti a metody. provádí se pomocí dvojtečky za názvem třídy.

Architektura. Vedení sesterské dokumentace

, Brno Připravil: David Procházka Návrhové vzory

Problém, jehož různé instance je třeba často řešit Tyto instance lze vyjádřit větami v jednoduchém jazyce

Infrastruktura UML. Modelování struktury v UML. Superstruktura UML. Notace objektů. Diagramy objektů

Semináˇr Java X J2EE Semináˇr Java X p.1/23

Uživatelská rozhraní 10. cvičení. Martin Němec A

DOCUMENT SOLUTION. T-Doc

Quo vadis programování? Automatizace vyhodnocování studentských úloh

Metodika. Architecture First. Rudolf Pecinovský

Jazyk C# (seminář 3)

Jazyk C# (seminář 6)

Návrhové vzory Design Patterns

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

Dědění, polymorfismus

IoC/DI. Tomáš Herceg Microsoft MVP (ASP.NET)

Znáte pøesné odpovìdi na tyto otázky??!

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

Programování II. Polymorfismus

Programování v C++ 2, 8. cvičení

24. listopadu 2013, Brno Připravil: David Procházka

Vývoj multiplatformní aplikace v Qt

PB161 Programování v jazyce C++ Přednáška 9

Sem vložte zadání Vaší práce.

Literatura. E. Gamma, R. Helm, R. Johnson, J. Vlissides The Gang of Four (GoF) Design Patterns Elements of Reusable Object-Oriented Software 1995

Sem vložte zadání Vaší práce.

Objektově orientované programování

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Spring framework 2.0. Roman Pichlík CZJUG

VENKOVNÍ ROLETY VENKOVNÍ ROLETA STANDARD...1 PODOMÍTKOVÉ ROLETY...3 ROLETY V OBLÉ SCHRÁNCE...5 ROLETY BE CLEVER A EXTE...7

Analyzátor, minimalizátor kombinačních logických obvodů

Hiearchical MVC (Model-view-controller) vs. PAC (Presentation-abstraction-control)

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

GWT pro pokročilé. MoroSystems, s.r.o. Pavel Klobása. Senior Java Developer.

ČÁST 1. Zahřívací kolo. Co je a k čemu je návrhový vzor 33

Návrhové vzory. n OO jazyky - široká paleta technických prostředků. n Návrhový vzor. n rozhraní!! n volnější vazby, parametrizace

Objekt. základní prvek v OOP. má vlastnosti. má metody. vznikne vytvoření nové instance definován pomocí třídy

Základní informace pro uživatele webových aplikací IISPP 1. Podporované prohlížeče

Programování v C++ 2, 7. cvičení

Zpracoval:

Technologie Java. Jaroslav Žáček

Programování v C++ 3, 3. cvičení

Motivační příklad reálný svět. výroba (assembly line)

Chain of responsibility

Obsah. Položkování 1: Prefix dřívějších osamocených dílů se zachovává...23 Položkování 2: Editace předběžných čísel...23

1. Dědičnost a polymorfismus

SMLOUVA O NÁJMU MULTIFUNKČNÍCH SÍŤOVÝCH TISKÁREN

Programování v C++ 1, 6. cvičení

Restaurator. Semestrání projekt předmětu PDA

Programování v Javě I. Únor 2009

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.

Viditelnost (práva přístupu) Tomáš Pitner, upravil Marek Šabo

NMIN201 Objektově orientované programování 1 / :36:09

NPRG031 Programování II 1 / :25:46

Technologie Java Enterprise Edition. Přemek Brada, KIV ZČU

Předmět směrnice. Čl. 2 Základní pojmy, technické pojmy a zkratky

RMI - Distribuované objekty v Javě

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

NÁVOD K ZAŘÍZENÍM PRO BEZDRÁTOVÝ PŘENOS ZVUKU A OBRAZU (Miracast)

Technologie JavaBeans

Návrh aplikace. Project Westpon. Inteligentní simulátor budov. Martin Mudra, Jan Smejkal, Onřej Macoszek, Marek Žehra, Jiří Slivárich

Úvod - problém. Při přidání nového modelu je nutné upravit. Kód, který se nebu de často měnit. n Mějme obchod s auty:

Servlety a JSP. Petr Adámek, petr.adamek@ibacz.eu

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

Rychlý průvodce Barbone Boss. Prohlídka notebooku Barbone Boss. Pohled zepředu

Programování v Javě I. Leden 2008

Programování v C++ 1, 5. cvičení

Venkovní terénní úpravy

Základní programové vybavení počítače

11 Diagram tříd, asociace, dědičnost, abstraktní třídy

MYBIZ - Řešení pro zpřístupnění dat ze stávajících aplikací na mobilních zařízeních (Mobilize your business!) Požadavky zákazníka.

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Vzor Továrna - Factory

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Transkript:

Facade

Facade Známý jako Facade, Fasáda Účel sjednocené high-level rozhraní pro subsystém zjednodušuje použití subsystému zapouzdření skrytí návrhu před uživateli Motivace zjednodušit komunikaci mezi subsystémy zredukovat závislosti mezi subsystémy neznemožnit používání low-level interfaců pro použití na míru

Facade - motivace

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

Facade motivace Řešení: Univerzální ovladač s funkcemi: Přehrát film Ukončit film Přehrát hudbu Vypnout hudbu 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 - motivace Příklad Compiler třídy Scanner, Parser, ProgramNodeBuilder,.. Facade poskytuje rozhraní pro práci s kompilátorem na high-level úrovni

Facade - motivace Příklad transparentnost třídy subsystému o Facade nevědí svoboda volby- neskrývá třídy subsystému (Parser, Scanner)

Facade - použití Použití když je subsystém složitý na běžné použití když existuje mnoho závislostí vně subsystému při vytváření vstupních bodů vrstveného systému Struktura

Facade - použití Účastníci Facade (kompilátor) zná třídy uvnitř subsystému deleguje požadavky třídy subsystému (Scanner, Parser,...) nevědí o existenci Facade implementují funkčnost Souvislosti klient se subsystémem komunikuje přes Facade Facade předává požadavky dál může obsahovat vlastní logiku překlad požadavků na třídy subsystému klienti nemusí používat podsystém přímo

Facade - důsledky Výhody použití redukuje počet objektů, se kterými klienti komunikují snadnější použití 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 podsytému klient si může vybrat jednoduchost nebo použití na míru umožňuje rozšířit stávající funkcionalitu kombinací podsystémů a jejich metod monitorování systému přístupy, využívání jednotlivých metod Kdy se vyplatí facade do systému implementovat má cenu o ní uvažovat pouze v případě, kdy je cena za vytvoření fasády menší, než je nastudování systému (podsystémů) uživateli

Facade - příklad class Scanner { public: virtual Token& Scan(); }; Třída subsystému 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(); };

Facade - příklad class ProgramNode { public: // program node manipulation virtual void GetSourcePosition(int& line, int& index); Třída subsystému // child manipulation virtual void Add(ProgramNode*); virtual void Remove(ProgramNode*); virtual void Traverse(CodeGenerator&); protected: ProgramNode(); }; class CodeGenerator { public: virtual void Visit(StatementNode*); virtual void Visit(ExpressionNode*); protected: CodeGenerator(BytecodeStream&); protected: BytecodeStream& _output; }; Třída subsystému

Facade - příklad void ExpressionNode::Traverse (CodeGenerator& cg) { cg.visit(this); ListIterator i(_children); for (i.first();!i.isdone(); i.next()) { i.currentitem()->traverse(cg); } } class Compiler { public: Compiler(); virtual void Compile(istream&,BytecodeStream&); }; Facade 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 - implementace Konfigurace fasády Facade jako abstraktní třída konkrétní implementace podsystému je jejím potomkem klienti komunikují s podsystémem přes rozhraní abstraktní třídy klient neví, která implementace podsystému je použita lze zcela změnit způsob implementace, flexibilita podsystému Facade jako jedna konfigurovatelná třída slabší alternativa předchozího výměna komponent podsystému Viditelnost komponent podsystému je vhodné určit viditelné a skryté komponenty podsystému analogie private a public metod třídy malá podpora v objektových jazycích

Facade reálné použití V mobilních aplikacích Session Facade v J2EE Fasáda pro webové služby JOptionPane ve Swingu vytváří různé typy základních dialogových oken a zobrazuje je zjednodušuje používání této rozsáhlé knihovny

Facade související vzory Abstract Factory Facade může poskytovat interface pro tvorbu objektů Singleton Facade jako Singleton - jen jeden vstupní bod do systému Mediator Mediator také snižuje závislosti na rozdíl od fasády snižuje závislosti mezi komponentami subsystému