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

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

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

20. Projekt Domácí mediotéka

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

Chain of responsibility

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

Jazyk C# (seminář 3)

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

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

Abstract Factory úvod

Návrhové vzory OMO, LS 2014/2015

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

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

1 - Úvod do platformy.net. IW5 - Programování v.net a C#

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

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

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

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

Pantek Productivity Pack. Verify User Control. Uživatelský manuál

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

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

Programování v Javě I. Leden 2008

JAVA JavaBeans Java, letní semestr

RMI Remote Method Invocation

SMART GATE webové a aplikační ovládací rozhraní zařízení ESIM120

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

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

Programátorská příručka

PREPROCESOR POKRAČOVÁNÍ

Technologie počítačových sítí 5. cvičení

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

JAVA JavaBeans Java, letní semestr 2018

Objekty a třídy. Procedurální a objektově orientované programování. V této kapitole se naučíte: Procedurální a objektově orientované programování

Copyright Rudolf Pecinovský, Soubor: 02_Rozhraní x Interfejs.doc, verze , uloženo čt :44 1z 55. Rozhraní. interface (interfejs)

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

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

Dědění, polymorfismus

PB161 Základy OOP. Tomáš Brukner

Projekty pro výuku programování v jazyce Java

Komponenty v.net. Obsah přednášky

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

5 Rekurze a zásobník. Rekurzivní volání metody

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

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

JAVA Unit testing Java, zimní semestr

Java GUI události. Událostmi řízené programování. Zpracování = obsluha událostí

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

Mobilní aplikace Novell Filr Stručný úvod

MapleCloud a jeho použ ití. Vladimír Žák

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

Programování v jazyku C# II. 4.kapitola

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

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

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.

TÉMATICKÝ OKRUH Softwarové inženýrství

GUI. Systémová integrace pro desktopové aplikace

Události. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

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

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

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

Překážky a nedostatky

Java - řazení objektů

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

Typický prvek kolekce pro české řazení

Aplikace s grafickým uživatelským rozhraním

VAR-NET INTEGRAL Manuál správce VNI 5.1 VAR-NET INTEGRAL. verze 0.2. Manuál správce VNI 5.1

a autentizovaná proxy

Cvičení 6 z předmětu CAD I PARAMETRICKÉ 3D MODELOVÁNÍ VÝKRES

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

UŽIV ATELSKÁ PŘÍRUČKA

Předdefinované dialogy

Správa a sledování SOA systémů v Oracle SOA Suite

Metodika Portálu pohledávek ve vztahu k uživateli

Jazyk C# (seminář 6)

Jazyk C# (seminář 9)

Generické programování

Objektově orientované programování

Návrhové vzory Design Patterns

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

Testova nı e-shop Alza.cz

IRAE 07/08 Přednáška č. 7. Začátek (head)

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

Zapouzdření. Tomáš Pitner, upravil Marek Šabo

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

TDL500. Systém elektronické evidence návštěvnosti TDL500

Postup pro sjednání zakázky:

Dalším příkladem může být například výstup dat na různá zařízení, souborů, grafických rozhraní, sítě atd.

Teoretické minimum z PJV

typová konverze typová inference

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

UNIVERZITA PARDUBICE

Začínáme s vývojem pro Android

Semafory Zobecněním operací WAKEUP a SLEEP přidáním celočíselného čítače vzniknou semafory a jejich atomické operace DOWN a UP.

Merz s.r.o. Industry 4.0. bublina nebo skutečně převratná změna? Jiří Merz INNOVATION VIA SOFTWARE

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

Zápis programu v jazyce C#

Vytváření a použití knihoven tříd

Programování II. Návrh programu I 2018/19

Metodika. Architecture First. Rudolf Pecinovský

Transkript:

Mediator

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

Mediator - motivace zná pomůcky, koordinuje interakce místo distribuce chování do jednotlivých pomůcek (widgetů) ho soustředíme do jednoho objektu - mediátora

Mediator - chování čas uživatel po zobrazení dialogu změní výběr listboxu po ohlášení změny mediátor zjistí aktuální položku a předá jí do vstupního políčka listbox a entry field o sobě vůbec neví o tom, že se má po změně někam něco vyplnit, se rozhoduje v mediátoru interakce zprostředkovaně přes jeden objekt jednodušší změna chování

Mediator - struktura Struktura rozhraní pro komunikaci kolegů znají pouze svého mediátora veškerou komunikaci směřují na něj implementuje společné chování, zná a koordinuje kolegy

Mediator Účel prostředník zapouzdřuje chování systému objektů Motivace Obecně uvolňuje (ruší) přímou vazbu mezi komponentami v rámci systému umožňuje měnit interakci objektů nezávisle na nich OOP - distribuce chování velká propojenost jednotlivých objektů propojenost objekt většinou nemůže pracovat bez ostatních i systém rozdělený na mnoho částí se chová jako monolit změnit chování distribuované do mnoha (stovek) objektů obtížné Konkrétně GUI dialogy dialog je složen z mnoha objektíků - tlačítka, menu, listboxy chování součástí spolu úzce souvisí tlačítko OK začne fungovat až vyplnění povinné položky vybereme-li položku listboxu, nějaké vstupní políčko se předvyplní atp. rozdílné dialogy - typicky rozdílné závislosti jiné položky jsou povinné, listbox nemusí nic vyplnit nemůžeme jednoduše používat součásti pro víc dialogů museli bychom např. podědit a měnit chování složité

Mediator - použitelnost Příklady typického použití skupina objektů má komunikovat definovaným, ale složitým způsobem závislosti mezi objekty jsou složitě strukturované nebo těžko pochopitelné znovupoužití objektu je obtížné jelikož spolupracuje s mnoha jinými objekty chování distribuované mezi mnoho objektů bylo mělo být upravitelné bez nutnosti vytváření mnoha podtříd

Mediator - důsledky Výhody a omezení omezuje odvozování mnoha podtříd původně distribuované chování soustřeďuje na jedno místo ostatní objekty je možné použít bez nutnosti úprav ruší vazby 1:1 mezi jednotlivými kolegy kolegové o sobě navzájem nevědí každý může být použitý sám o sobě zjednodušuje protokol n:m interakce nahrazuje 1:m, které jsou jednodušší k pochopení i rozšiřování zabstraktňuje způsob spolupráce objektů odděluje kooperaci mezi objekty od jejich samostatného chování centralizuje řízení za jednoduchost komunikace jsme zaplatili jedním extrémně složitým objektem rozbili jsme monoliticky se tvářící systém, vytvořili jsme monoliticky se tvářící monolit

Mediator - implementace Implementace varianty abstraktní mediátor kolegové pracují s několika funkčně různými mediátory umožňuje měnit chování systému definicí nového potomka přímo 1 konkrétní mediátor kolegové pracují jen s ním abstraktní zbytečný přehledná komunikace, jasný protokol komunikace kolega-mediátor při zajímavé události mediátor propaguje událost k dalším kolegům implementace komunikace speciální notifikační interface mediátora viz dále pomocí patternu Observer kolegové vystupují jako subjekty, kdykoliv změní stav, upozorní observera-mediátora

Mediator - implementace interface pro oznámení zajímavých událostí class DialogDirector { public: virtual ~DialogDirector(); virtual void ShowDialog(); virtual void WidgetChanged(Widget*) = 0; protected: DialogDirector(); virtual void CreateWidgets() = 0; }; class Widget { public: Widget(DialogDirector*); virtual void Changed(); virtual void HandleMouse(MouseEvent& event); //... private: DialogDirector* _director; }; void Widget::Changed() { _director->widgetchanged(this); } každý kolega zná svého mediátora

Mediator - implementace class EntryField : public Widget { public: EntryField(DialogDirector*); }; virtual void SetText(const string text); virtual string GetText(); virtual void HandleMouse(MouseEvent& event); //... class ListBox : public Widget { public: ListBox(DialogDirector*); jednotlivé widgety pro použití v dialozích }; virtual string GetSelection(); virtual void SetList(List<string>& listitems); virtual void HandleMouse(MouseEvent& event); //... class Button : public Widget { public: Button(DialogDirector*); }; virtual void SetText(string text); virtual void HandleMouse(MouseEvent& event); //... void Button::HandleMouse (...) { //... Changed(); }

Mediator - implementace konkrétní chování vznikne jako potomek abstraktního mediátora může definovat podobu dialogu chování celého systému kooperaci mezi jednotlivými pomůckami class FontDialogDirector : public DialogDirector { public: FontDialogDirector(); virtual ~FontDialogDirector(); virtual void WidgetChanged(Widget*); vytvoří svůj typ dialogu protected: virtual void CreateWidgets(); private: Button* _ok; Button* _cancel; ListBox* _fontlist; EntryField* _fontname; }; mediátor si drží všechny kolegy

Mediator - implementace metoda CreateWidgets vytváří dialog, pro který je konkrétní mediátor napsán void FontDialogDirector::CreateWidgets() { _ok = new Button(this); _cancel = new Button(this); _fontlist = new ListBox(this); _fontname = new EntryField(this); každý kolega musí znát mediátora } // fill the listbox with font names // assemble the widgets in the dialog metoda WidgetChanged definuje chování systému upozorní i ostatní související pomůcky, aby se systém choval korektně void FontDialogDirector::WidgetChanged( Widget* changedwidget) { if (changedwidget == _fontlist) { _fontname->settext(_fontlist->getselection()); } else if (changedwidget == _ok) { // apply font change and dismiss dialog //... } else if (changedwidget == _cancel) { // dismiss dialog } } kolegové při volání zadají sami sebe jako parametr aby je mediátor poznal

Mediator použití Možná použití počítačový svět chatovací server konkrétní mediátor chatovací room kolegové jednotliví lidé (resp. jejich klienti) dům budoucnosti smart home vše řízeno počítačem - mediátor mnoho různorodých zařízení lednice, která ví, co koupit klimatizace, topení, různá teplotní či vlhkostní čidla alarm, zamykání dveří,...... potřeba koordinace když spustí alarm, zavolá se policie, pošle se sms majiteli dojde-li mléko, je potřeba ho objednat v e-shopu ze života: letištní věž

Mediator související NV Související NV Facade fasáda jen abstrahuje skupinu objektů do jednoho rozhraní jednotlivé objekty o ní neví součásti abstrahované skupiny typicky samostatné, žádná složitá kooperace Observer kolegové mohou komunikovat s mediátorem pomocí NV Observer dynamický