Chain of responsibility Martin Malý prezentace na předmět Návrhové vzory (PRG024) na MFF UK 3.4.2006.

Slides:



Advertisements
Podobné prezentace
(instance konkrétní třídy)
Advertisements

Mediator. Mediator - motivace  FontDialog  závislosti mezi jednotlivými ovládacími prvky jsou netriviální.
Programovací jazyk C++
Přednáška č. 3 Normalizace dat, Datová a funkční analýza
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
Pole, ukazatele a odkazy
Ú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.
Čtvrté cvičení Objektové programování Objektový model v Javě
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
Ing. Josef Veselý Označení šablony a vzdělávací sady viz.rozpis.
Architektura databází Ing. Dagmar Vítková. Centrální architektura V této architektuře jsou data i SŘBD v centrálním počítači. Tato architektura je typická.
Seminář C cvičení STL, Trolltech Ing. Jan Mikulka.
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í
Seminář C cvičení Obsluha výjimek Ing. Jan Mikulka.
08/04/20151 Delegáty (1) Delegát (delegate) je datový typ, který definuje signaturu metody Delegáty bývají rovněž označovány jako typo- vě bezpečné ukazatele.
Strategy. Strategy – „All-in-1“ na začátek class AStrategy { public: virtual void Algorithm()=0; protected: AStrategy(); }; class SpecificStrategy: public.
Seminář C++ 4. cvičení Objekty Ing. Jan Mikulka. Co je objekt ► obraz třídy i instance ► třída – definovaná za pomocí klíčového slova class ► instance.
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
PB161 Právo friend, přetěžování operátorů, přetypování PB161 | Friend, operátory PB161 – Programování v jazyce C++ Objektově Orientované Programování.
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.
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
OSNOVA: a) Úvod do OOPb) Třídy bez metod c) Třídy s metodamid) Konstruktory a destruktory e) Metody constf) Knihovní třídy g) Třídy ve tříděh) Přetížení.
Návrhový vzor Factory v JAVA API Martin Kot Katedra informatiky VŠB – Technická univerzita Ostrava
PB161 Principy OOP - rozhraní, dědičnost PB161 | Principy OOP - Dědičnost, rozhraní
IB111 Programování a algoritmizace
Richard Lipka Department of Computer Science and Engineering Faculty of Applied Sciences University of West Bohemia, Pilsen, Czech Republic 1.
Internet ale velmi výrazně slouží i pro komunikaci, přičemž jednoznačně nejpoužívanějším komunikačním prvkem je . Význam slova lze přeložit.
2 UDÁLOSTI ONMOUSEOVER, ONMOUSEOUT Odkaz Událost je část kódu vyvolana za určité (uživatelem vyvolané) situace (kliknutí myší, přejetím kurzorem myši,
Principy OOP Objektově orientované programování vychá-zí ze třech základních principů (rysů): zapouzdření (encapsulation) dědičnost (inheritance) polymorfismus.
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.
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.
Vzdálená správa Tomáš Kalný.
OPERAČNÍ SYSTÉMY.
14. června 2004Michal Ševčenko Architektura softwarového systému DYNAST Michal Ševčenko VIC ČVUT.
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í.
Chain of Responsibility. Chain of responsibility - účel Účel  Umožňuje zrušení vazby mezi odesílatelem a příjemcem požadavku  Umožňuje zaslání požadavku.
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ř.
Databázové systémy Úvod, Základní pojmy. Úvod S rozvojem lidského poznání roste prudce množství informací. Jsou kladeny vysoké požadavky na ukládání,
Composite “ Spojuj a panuj ”. Zakladní vlastnosti Výslovnost  kompozit, ne kompozajt Účel  Popisuje, jak postavit strukturované hierarchie tříd, v níž.
Iterator. C historie int * rand_numbers(int n) { int *numbers = malloc(n * sizeof(int)); int *it = numbers; while (it < numbers + n) *it++ = rand(); //
PROGRAMOVÁNÍ 3ITA,3ITB Jaroslav Burdys Hlavní zdroj:
Strategy. Motivace Ze života - jak to taky může vypadat (R): source("../algorithms/HOCForLOCF.R") source("../algorithms/HOCForLOCFv2.R") source("../MILP/MILP.R")
SOLID principy v OOP návrhu
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.
Programovací jazyk C++
Decorator Radek Zikmund NPRG024, LS 2016/17.
Návrhový vzor Flyweight
Operační systémy 9. Spolupráce mezi procesy
Abstract Factory.
Výukový materiál zpracován v rámci projektu
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ří.
Chain of Responsibility
Bridge.
C# přehled vlastností.
Přednášky z Distribuovaných systémů
Decorator.
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.
Proxy 1.
Composite “Spojuj a panuj”.
Bridge.
Návrhový vzor Prototype.
Transkript prezentace:

Chain of responsibility Martin Malý prezentace na předmět Návrhové vzory (PRG024) na MFF UK

Chain of responsibility Známý jako  český překlad – řetěz(ec) odpovědnosti Účel  kategorie: behaviorální návrhové (behavioral design patterns)  umožnit zasílání požadavků (zpráv) neznámým příjemcům  příjemci tvoří frontu  předávají si zprávu dokud ji někdo nezpracuje Motivace  přidat k widgetu nápovědu  chceme reakci v závislosti na kontextu ve kterém se widget nachází

Chain of responsibility – motivace jednotný předek všech widgetů ukazatel na následníka v řetězu výchozí implementace konkrétní widgety widgety mohou implementovat vlastní HandleHelp aplikační třída - zarážka pro help

Struktura Účastníci  Handler ( HandleHelp ) definuje rozhraní pro zpracování požadavků volitelně implementuje ukazatel na následníka  ConcreteHandler ( PrintButton, PrintDialog ) zachytává požadavek, který umí zpracovat může přistupovat na svého následníka  Client iniciuje požadavek předáním na objekt ConcreteHandler zapojený do řetězu Chain of responsibility – struktura

Chain of responsibility – použitelnost, výhody, nevýhody Použitelnost  chceme zaslat zprávu a nevíme kdo ji zpracuje nebo nás to nezajímá (důležitý je výsledek)  pokud více než jeden příjemce může přijmout zprávu a není a priori známo který Výhody  odděluje odesílatele od příjemců  zjednodušuje odesílatele – neobsahuje reference na všechny možné příjemce  možnost měnit řetěz dynamicky, za běhu programu Nevýhody  není zaručeno, že nějaký příjemce zprávu přijme při implementaci ale typicky vytvoříme zarážku  zpracuje požadavek na nejobecnější úrovni  nebo zahlásí chybu (kulturně)  může komplikovat ladění

Chain of responsibility – implementace Implementace  dva způsoby implementace řetězu definovat nové ukazatele (obvykle v Handleru, možno i v ConcreteHandleru) použít existující ukazatele class HelpHandler { public: HelpHandler(HelpHandler* s) : _successor(s) { } virtual void HandleHelp(); private: HelpHandler* _successor; }; void HelpHandler::HandleHelp () { if (_successor) { _successor->HandleHelp(); } výchozí implementace zpracování požadavku – předej peška dál

Chain of responsibility – příklad typedef int Topic; const Topic NO_HELP_TOPIC = -1; class HelpHandler { public: HelpHandler(HelpHandler* = 0, Topic = NO_HELP_TOPIC); virtual bool HasHelp(); virtual void SetHandler(HelpHandler*, Topic); virtual void HandleHelp(); private: HelpHandler* _successor; Topic _topic; }; HelpHandler::HelpHandler ( HelpHandler* h, Topic t ) : _successor(h), _topic(t) { } bool HelpHandler::HasHelp () { return _topic != NO_HELP_TOPIC; } void HelpHandler::HandleHelp () { if (_successor != 0) { _successor->HandleHelp(); } pomocná metoda, test na existenci nápovědy na konkrétním widgetu Komentář: Implementace abstraktního předka všech tříd využívajících kontextovou nápovědu. HelpHandler definuje ukazatele na následníka v řetězu. Pro každé téma nápovědy definujeme jednoznačný identifikátor. Jestliže pro daný widget neexistuje nápověda, použije se výchozí hodnota NO_HELP_TOPIC. Použití konkrétních hodnot uvidíme dále.

Chain of responsibility - příklad Abstraktní předek Widgetů Button class Widget : public HelpHandler { protected: Widget(Widget* parent, Topic t = NO_HELP_TOPIC); private: Widget* _parent; }; Widget::Widget (Widget* w, Topic t) : HelpHandler(w, t){ _parent = w; } class Button : public Widget { public: Button(Widget* d, Topic t = NO_HELP_TOPIC); virtual void HandleHelp(); // Widget operations that Button overrides... }; Button::Button (Widget* h, Topic t) : Widget(h, t) { } void Button::HandleHelp () { if (HasHelp()) { // offer help on the button } else { HelpHandler::HandleHelp(); } Abstraktní předek všech widgetů. Přidává navíc ukazatel na rodiče, tj. prvek, ve kterém je umístěn. Tlačítko je vždy součástí jiného widgetu.

Chain of responsibility - příklad Dialog class Dialog : public Widget { public: Dialog(HelpHandler* h, Topic t = NO_HELP_TOPIC); virtual void HandleHelp(); // Widget operations that Dialog overrides... //... }; Dialog::Dialog (HelpHandler* h, Topic t) : Widget(0) { SetHandler(h, t); } void Dialog::HandleHelp () { if (HasHelp()) { // offer help on the dialog } else { HelpHandler::HandleHelp(); } Komentář: Třída Dialog je sama widget, ale navenek existuje samostatně – není součástí jiného widgetu. Proto v konstruktoru předáváme HelpHandler.

Chain of responsibility - příklad Aplikace Třída Application není widget – dědí přímo od HelpHandler Je-li požadavek na nápovědu propagován až na tuto úroveň, může aplikace zobrazit obecnou nápovědu nebo např. seznam témat nápovědy. class Application : public HelpHandler { public: Application(Topic t) : HelpHandler(0, t) { } virtual void HandleHelp(); // application-specific operations... }; void Application::HandleHelp () { // show a list of help topics }

Chain of responsibility - příklad Vytvoření a propojení prvků Vyvolání nápovědy ze strany klienta Hint  při implementaci knihoven je vhodné použít jedinečné hodnoty konstant (UID) const Topic PRINT_TOPIC = 1; const Topic PAPER_ORIENTATION_TOPIC = 2; const Topic APPLICATION_TOPIC = 3; Application* application = new Application(APPLICATION_TOPIC); Dialog* dialog = new Dialog(application, PRINT_TOPIC); Button* button = new Button(dialog, PAPER_ORIENTATION_TOPIC); button->HandleHelp();

Chain of responsibility – související NV Známé použití  Grafické toolkity (ET++, Symantec’s TCL library, Unidraw Framework)  Okenní systémy běžně používáno pro zpracování událostí jako kliknutí myši, stisk klávesy  Distribuované systémy v řetězu (do kruhu) je zapojena množina serverů nabízejících určité služby klient předá požadavek libovolnému serveru servery si mezi sebou posílají požadavek, dokud jej některý nezpracuje Související NV  Command přesně specifikuje příjemce požadavku  Composite je-li řetez objektů využívaný součástí rozsáhlejší struktury, je tato struktura obvykle tvořena pomocí Composite vzoru  Template method využíván k řízení chování jednotlivých objektů ve struktuře vytvořené pomocí Composite

Chain of responsibility – otázky a úkoly Stručně popište význam návrhové vzoru Chain of responsibility. K čemu slouží třída Handler? Jak využijete vzor Chain of responsibility při implementaci simulátoru nápojového automatu?