Observer Martin Dráb Návrhové vzory, 2015. Co to je?  Definuje závislost 1:N mezi objekty  Závislé objekty jsou informovány o změně stavu  Konzistentní.

Slides:



Advertisements
Podobné prezentace
A1PRG - Programování – Seminář Ing. Michal Typová konverze, oblast platnosti, paměťové třídy 9 Verze
Advertisements

(instance konkrétní třídy)
ÚVOD DO C++ 3 TŘÍDY a objekty - POKRAČOVÁNÍ
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
Uživatelská rozhraní Uživatelská rozhraní 9. cvičení.
Alg51 Rozklad problému na podproblémy Postupný návrh programu rozkladem problému na podproblémy –zadaný problém rozložíme na podproblémy –pro řešení podproblémů.
Databázové systémy II Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Čtvrté cvičení Objektové programování Objektový model v Javě
J a v a Začínáme programovat Lucie Žoltá metody, objekty, konstruktor.
J a v a Začínáme programovat Lucie Žoltá. Odkazy - oficiální stránky (překladače, help, metody, vývojové prostředí NetBeans,...)
Chain of responsibility Martin Malý prezentace na předmět Návrhové vzory (PRG024) na MFF UK
Hana Kotinová Struktura a cíl práce Metody předzpracování dat Systémy předzpracování dat Historie vývoje DPT Jak program pracuje Budoucnost.
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
Seminář C++ 9. cvičení Šablony Ing. Jan Mikulka. Šablony ► template – vzory, podle kterých může překladač tvořit skupiny podobných tříd nebo funkcí, které.
Adapter. Adapter – pojem Součástka navržená k propojení dvou „nekompatibilních“ zařízení Definice slova podle Cambridge Advanced Learner's Dictionary:
Objektové orientované programování Objektově orientované problémy v PHP Lukáš Masopust 2008.
Objektové programování
Jedenácté cvičení Vlákna. Java cv112 Vlákna Operační systém Mutitasking – více úloh se v operačním programu vykonává „současně“ Java Multithreading -
Strategy. Strategy – „All-in-1“ na začátek class AStrategy { public: virtual void Algorithm()=0; protected: AStrategy(); }; class SpecificStrategy: public.
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í.
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í
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
IB111 Programování a algoritmizace
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
Dědičnost - inheritance dědičnost je jednou z forem znovupoužitelnosti dědičnost je jednou z forem znovupoužitelnosti B A Třída A je předkem třídy B Třída.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
OSNOVA: a)Funkce – úvod b) Hlavičky funkcí c) Rekurze funkcí d)Knihovny funkcí e)Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
Databázové modelování
POSLOUPNOST úkol 1_41. ZADÁNÍ Sestavte program, který doplní tabulku nepřímé úměrnosti pro hodnoty proměnné x = 1, …, n. Nepřímá úměrnost je zadána uživatelem.
STRING A UKAZATELE. Co to je řetězec? Řetězec v Javě je samostatný objekt. Je konstantní, co znamená, že jednou vytvořený řetězec nelze změnit. Chceme-li.
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
C – jak na procedury Mgr. Lenka Švancarová. C – procedury #include int main() { printf("Ahoj\n"); return(0); } #include void pozdrav(void) { printf("Ahoj\n");
Vzor na všechno. Vzor – úvod Problém .. Příklad: widgety .. Jak na to? .. Známý také jako...
FEL Komunikátor. Memory Leak program konsumuje operační paměť, kterou neumožňuje uvolnit o uvolnění paměti stará Garbage Collector ▫plně v režii Java.
PŘÍKAZ while úkol 1_42.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
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í.
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.
Proxy. Popis  Klient má přístup k nějakému objektu  Potřebujeme tento přístup ošetřit, aniž bychom přidělali klientovi práci Kontrola přístupu Vzdálený.
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ř.
Uživatelská rozhraní Uživatelská rozhraní 10. cvičení Martin Němec A
YOUR LOGO C# Entity Framework. YOUR LOGO  Entity framework nám poskytuje: -Vytváří objektový model na základě databázového schématu -Mapuje tabulky,
Proxy. Proxy poskytuje bariéru mezi klientem a reálnou implementací.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
Testování aplikací v Javě Petr Adámek IBA CZ, s.r.o. © 2010.
SOLID principy v OOP návrhu
Y36PJC Programování v jazyce C/C++
Instalace Javy ( pro Windows )
Y36PJC Programování v jazyce C/C++
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Návrhový vzor Flyweight
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ří.
Observer Struktura -každodenní použití -základní struktura -vlastnosti
Bridge.
C# přehled vlastností.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Přednášky z Distribuovaných systémů
Observer Struktura -každodenní použití -základní struktura -vlastnosti
Proxy 1.
Composite “Spojuj a panuj”.
Bridge.
Transkript prezentace:

Observer Martin Dráb Návrhové vzory, 2015

Co to je?  Definuje závislost 1:N mezi objekty  Závislé objekty jsou informovány o změně stavu  Konzistentní stav souboru objektů  Vazba mezi objekty je velmi volná  Vyšší znovupoužitelnost kódu  Také známé jako publish-subscribe  Hlavní protagonisté  Observer je informován o změně stavu subjektu. Na subjektu jinak nezávislý.  Subjekt o změnách svého stavu informuje observery, které se za tímto účelem zaregistrovaly.  Poskytuje rozhraní na registrování a odregistrování observerů  Registrovaných observerů může být libovolné množství  O jednotlivých observerech neví nic

Rozhraní a třídy

Jak to (teoreticky) funguje

Vlastnosti  Abstraktní vazba mezi subjektem a observerem  Subjekt nezná konkrétní třídy observerů, pouze obecný interface  Každý z aktérů může patřit do jiné vrstvy (nízkoúrovňové subjekty mohou informovat observery vyšší úrovně)  Broadcast  Subjekt jej provádí automaticky  Je zodpovědnost konkrétního observeru, zda notifikaci o změně stavu subjektu bude ignorovat či ne  Neznámá cena změny stavu subjektu  I malá změna stavu subjektu může být drahá, pokud je zaregistrováno mnoho observerů, nebo je zpracování notifikace náročné

Učebnicový příklad class Subject { public: virtual ~Subject() { } virtual void attach(Observer *o) { obSet_.insert(o); } virtual void detach(Observer *o) { obSet_.remove(o); } virtual void notify() { for (auto o : obSet_) o->update(); } protected: Subject() { } private: std::set obSet_; }; class Observer { public: virtual ~Observer() { } virtual void update() = 0; protected: Observer() { } };

Učebnicový příklad II class Clock : public Subject { public: unsigned int getSeconds() { return timeInSeconds_ % 60; } unsigned int getMinutes() { return (timeInSeconds_ / 60) % 60; } unsigned int getHours() { return (timeInSeconds_ / 3600) % 24; } void tick() { ++timeInSeconds_; notify(); } private: unsigned int timeInSeconds_; }; class AnalogClock : public Observer { public: virtual void update() { // draw the clock } AnalogClock(Clock *aClock) : clock_(aClock) { clock_->attach(this); } private: Clock *clock_; }; class DigitalClock : public Observer { public: virtual void update() { // draw the clock } DigitalClock(Clock *aClock) : clock_(aClock) { clock_->attach(this); } private: Clock *clock_; };

Učebnicový příklad III int main() { Clock *timer = new Clock(); DigitalClock *dc = new DigitalClock(timer); AnalogClock *ac = new AnalogClock(timer); while (true) { Sleep(1000); timer->tick(); } return 0; }

Implementace  Mapování subjektů na observery  Každý subjekt si pamatuje své observery (seznam, jiná struktura)  Globální datová struktura (hash. tabulka) mapující subjekty na obeservery  Pozorování více než jednoho subjektu  void Observer::Update(Subject *s);  Kdy notifikovat observery?  Provede subjekt po každé změně stavu  Notifikace jsou automatické („nezapomenutelné“)  Zbytečné notifikace při sekvenci malých změn stavu  Provede klient poté, co dokončí změnu stavu subjektu  Notifikace až po dokončení sekvence malých úprav  Větší náchylnost k chybám

Implementace II  Mazání subjektů  Mazání subjektu zneplatní reference na něj uložené v jeho observerech  Lze vyřešit speciálním druhem notifikace  Rozumnější cílení notifikací  Obrana proti nechtěnému broadcastu  Observer při registraci specifikuje, jaké druhy notifikací (změn stavu subjektu) jej zajímají

Push a pull model  Subjekt může v rámci notifikace poskytnout určité informace o změně svého stavu, čímž může observerům ušetřit práci.  Push model  Subjekt předává prakticky všechny informace v rámci notifikace (v parametrech metody update)  Windows PS Notify Routines  Pull model  Subjekt v rámci notifikací nepředává žádné informace  Je na observerech, aby si v rámci metody update zjistili, co se změnilo  \Callback\SetSystemTime, Windows kernel

ChangeManager

Využití v praxi  Windows (low-level)  PS Notify Routines  Callback objects (observer v C)  Monitorování registru/FS...  Listenery v Javě  ….

Callback Objects (Windows)  ExCreateCallback  Získá odkaz na callback objekt, nebo vytvoří nový objekt  ObDereferenceObject  Odevzdání odkazu na callback objekt zpět systému  ExRegisterCallback  Subject::Attach  ExUnregisterCallback  Subject::Detach  ExNotifyCallback  Subject::Notify  Příklady:  \Callback\SetSystemTime  \Callback\ProcessorAdd

PS Notify Routines (Windows)  Opět pouze prostředky jazyka C => práce s callbacky  Uživatel píše jen observera  Vhodné obalit vlastním subjektem (počet registrovatelných callbacků je omezen (8-64?))  Registrace  PsSetCreateProcessNotifyRoutine(_ProcessCallback, FALSE);  Deregistrace  PsSetCreateProcessNotifyRoutine(_ProcessCallback, TRUE);  Notifikace (provádí systém)  void _ProcessCallback(HANDLE ParentId, HANDLE ProcessId, BOOLEAN Create);