State 1.

Slides:



Advertisements
Podobné prezentace
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í.
Advertisements

Strategy. Strategy – „All-in-1“ na začátek class AStrategy { public: virtual void Algorithm()=0; protected: AStrategy(); }; class SpecificStrategy: public.
Objektově orientované programování. Objektově orientovaný přístup k programování je zcela jiný způsob přemýšlení. Jedná se o moderní styl programování,
Strategické řízení školy s využitím sebehodnocení školy dle modelu CAF RNDr. Hana Žufanová.
Uvedení autoři, není-li uvedeno jinak, jsou autory tohoto výukového materiálu a všech jeho částí. Tento projekt je spolufinancován ESF a státním rozpočtem.
Inf Používání a tvorba databází. Výukový materiál Číslo projektu: CZ.1.07/1.5.00/ Šablona: III/2 Inovace a zkvalitnění výuky prostřednictvím ICT.
Období vzniku: duben _inovace_FG.9.48 Autor : Vladimír TesaříkČlověk a svět práce, finanční gramotnost, nové auto.
Pojem a význam práva Souhrn norem, stanovených uznaných státem k dosažení určitých společenských účelů, jejichž zachování je vynucováno státní mocí Objektivní.
Seminář pro žadatele o finanční podporu z Operačního programu Vzdělávání pro konkurenceschopnost Krajský úřad Jihomoravského kraje Odbor regionálního rozvoje.
Systém správy dokumentace akreditované zkušební laboratoře Bc. Jan Randl, 4912.
Formáty souborů (neboli typ souboru) obvykle určuje význam dat v elektronickém souboru. Existuje množství různých formátů, přizpůsobených pro ukládání.
Programování v jazyce C++ Dědičnost a polymorfismus.
Číslo projektu školy CZ.1.07/1.5.00/ Číslo a název šablony klíčové aktivity III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Číslo materiáluVY_32_INOVACE_OdP_S2_07.
Plánovací část projektu Cíl projektu - vychází z řešení z prognostické části, - odpovídá na otázku, čeho má být dosaženo? - představuje slovní popis účelu.
Základní škola a mateřská škola Lázně Kynžvart Autor: Mgr. Petra Šandová Název: VY_32_INOVACE_5B_INF3_16_ Téma: pro 4.,5.ročník ZŠ, vytvořeno:
PJV15 1 Vnořené ( nested ) a vnitřní ( inner ) členy Třídy či interfejsy mohou být členy tříd či interfejsů. Je-li X obalem Y a Y obalem Z, pak Z získá.
Funkce Lineární funkce a její vlastnosti 2. Funkce − definice Funkce je předpis, který každému číslu z definičního oboru, který je podmnožinou množiny.
Počitačová bezpečnost - je obor informatiky, který se zabývá zabezpečením informací v počítačích (odhalení a zmenšení rizik spojených s používáním počítače).
Mnohočleny Gymnázium a Jazyková škola s právem státní jazykové zkoušky Zlín Tematická oblast Matematika – výrazy s proměnnými Datum vytvoření
ORGANIZACE PŘIJÍMACÍHO ŘÍZENÍ 2016/2017 část I. - Přihláška na SŠ
Software =je v informatice sada všech počítačových programů používaných v počítači, které provádějí nějakou činnost. - Software je protiklad k hardwaru,
Název školy: Základní škola Pomezí, okres Svitavy
PROJEKT OP LZZ „IMPLEMENTACE AGE MANAGEMENTU V ČR“ CZ /5. 1
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
STANDARDY KVALITY V SOCIÁLNÍCH SLUŽBÁCH „SKSS“
COM – Práce s objektovým modelem jiné aplikace
Veřejná správa, Regionální rozvoj Litoměřice Jan Jůna 2012
Lineární funkce - příklady
Jednoduché účetnictví
Pracovní porada Pracovní list.
STANDARDY KVALITY V SOCIÁLNÍCH SLUŽBÁCH „SKSS“
Obrázky Ram Rom Nástupci ROM Počítačová pamět Obrázky Paměti Ram rom
Pracovní porada Pracovní list.
Programování v jazyce C++
Přístupový systém aneb kontrola vstupů
Financováno z ESF a státního rozpočtu ČR.
Jednotné principy klasifikace na GJKT
Digitální učební materiál zpracovaný v rámci projektu
Kompetenční modely Mgr. Andrea Drdáková.
Financování přímých NIV
Databáze MS ACCESS 2010.
C# konzole – Program emoce
Stimulace tvořivosti – tvůrčí řízení a vedení lidí,
Abstract Factory.
Souběh Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu ISSN: 
C# Vícevláknové aplikace
Účetní pravidla, změny v účetních odhadech a chyby
C# konzole – Program pro výpočet výrazu
Bridge.
Cvičení 4 Dědičnost objektů.
Informatika pro ekonomy přednáška 8
© 2012 STÁTNÍ ÚSTAV PRO KONTROLU LÉČIV
Portál naměřených dat 13. – , Říčany u Prahy Josef Mádlo.
Visitor 1 1.
Materiál byl vytvořen v rámci projektu
Remote login.
Jiří Vyskočil, Marko Genyg-Berezovskyj 2010
Builder „Návrhový vzor oddělující konstrukci složitých objektů od jejich reprezentace. Čímž je možné použít stejný proces konstrukce pro rozdílné reprezentace.“
Název školy: Autor: Název: Číslo projektu: Název projektu:
Analýza informačního systému
Informatika pro ekonomy přednáška 8
Vázání dat Data Binding
Lineární funkce a její vlastnosti
Grafy kvadratických funkcí
Hromadné dokumenty opakující se pro kolekci osob
Příspěvek na konferenci Příspěvková organizace slabá místa - ekonomický pohled Lektor : Ing. Jiří Lorenc.
Adapter
Slovní úlohy o společné práci − 3
Bridge.
Class Diagrams.
Transkript prezentace:

State 1

State – kontext a problém chování objektu má záviset na jeho stavu, který se typicky mění za běhu Neflexibilní řešení metody obsahují větvení v závislosti na stavových proměnných často výčtové proměnné, konstanty if / else / switch Problémy přidání stavu vyžaduje upravit všechny metody opakující se kód kontroly stavu void Client::sendMessage(Message & msg) { switch(_state) { case DISCONNECTED: _startConnection(); _send(msg); break; case CONNECTED: ... } 2

State - řešení Řešení objekt „mění svou třídu“ realizováno pomocí dědičnosti pro každý stav existuje samostatná implementace objektu se společným rozhraním 3

State – TCPConnection – motivační příklad vnější rozhraní pro klienty abstraktní předek reprezentující stavy delegace funkčnosti na implementaci dle stavu implementace chování v konkrétních stavech 4

State – struktura Struktura Účastníci Context (TCPConnection) definuje rozhraní – primární pro uživatele odkazuje na podtřídy ConcreteState – určuje současný stav State (TCPState) definuje rozhraní objektů reprezentujících jednotlivé stavy Contextu ConcreteStateA, B, ... (TCPEstablished, TCPListen, TCPClosed) implementuje konkrétní chování v daném stavu 5

State – důsledky 1 Použití Context deleguje požadavky na instanci stavu ConcreteState Context může předávat referenci na sebe sama při volání metod stavu stavy mohou přistupovat přímo ke kontextu Chování konkrétního stavu je separováno v jednom objektu nové stavy se jednoduše přidávají definováním potomka State může vznikat spousta stavů lišících se v drobnostech 6

State – důsledky 2 Explicitní změna stavu Sdílení objektů State stavy kontextu nemusí být na první pohled zřejmé např. kombinace hodnot proměnných kontextu vytváření samostatných objektů pro různé stavy přechod na jiný stav je atomický (z pohledu Contextu) Sdílení objektů State stavy nemají vlastní proměnné, reprezentovaný stav je určen jejich typem Flyweight 7

stav musí umět provést změnu v Contextu State – změna stavu 1 Kdo bude stav měnit? State pattern to neříká Context Context musí znát pravidla a logiku změn pro statická kritéria změn vhodné řešení ConcreteState flexibilnější – decentralizace logiky stačí přidat novou třídu a navázat ji na „sousední stavy” vznik závislostí – stavy o sobě musejí vědět Context musí obsahovat rozhraní pro změnu stavu stav musí umět provést změnu v Contextu 8

State – změna stavu 2 Tabulkou řízený přístup Výhody Nevýhody (Vstup, Stav) → (Funkce, Stav) Výhody změna logiky nevyžaduje změnu v kódu, ale jen dat tabulky pravidelnost Nevýhody obvykle pomalejší table look-up vs. volání (virtuální metody) je složité na automatizované přechody navázat další akce přechodovým kritériím je z tabulky těžší zpětně porozumět definice přechodů velmi striktní (výjimky je těžké zakomponovat) 9

interface pro změnu stavu State – konkrétní implementace 1 Context – TCPConnection veřejné rozhraní pro klienty protected změna stavu, přátelská třída TCPState (aby stav mohl provést změnu) class TCPConnection { public: TCPConnection(); TCPConnection(TCPState*); void Open(); void Close(); void Send(); void Acknowledge(); ... protected: friend class TCPState; void ChangeState(TCPState*); private: TCPState* _state; }; počáteční stav interface pro změnu stavu instance stavu TCPConnection::TCPConnection() { _state = TCPClosed::Instance(); } TCPConnection::TCPConnection(TCPState* s) {_state = s; } void TCPConnection::ChangeState(TCPState* s) {_state = s; } void TCPConnection::Open() {_state->Open(this); } delegace 10

State – konkrétní implementace 2 statická metoda Instance - Singleton TCPState abstraktní třída interface pro chování TCPClosed konkrétní stav class TCPClosed : public TCPState { public: static TCPState* Instance(); virtual void Open(TCPConnection*); ... }; void TCPClosed::Open (TCPConnection* t) { // send SYN, receive SYN, ACK, etc. ChangeState(t, TCPEstablished::Instance()); } změna stavu class TCPState { public: virtual void Transmit(TCPConnection*, TCPOctetStream*); virtual void Open(TCPConnection*); virtual void Close(TCPConnection*); virtual void Acknowledge(TCPConnection*); virtual void Send(TCPConnection*); protected: void ChangeState(TCPConnection* t, TCPState* s) { t->ChangeState(s); }; jednotlivé operace společná metoda pro změnu stavu 11

State – nevýhody Nevýhody logika rozprostřena mezi mnoho odvozených tříd třídy s minimální funkcionalitou funkčnost ve většině stavů stejná nebo podobná duplicitní kód (dá se řešit abstract base třídou) složitá hierarchie dědičnosti (je to ale skutečně nevýhoda?) provádí-li změnu stavu Context, tak přidání nového stavu vyžaduje aktualizaci Contextu v opačném případě o sobě musí jednotlivé stavy navzájem vědět 12

State – související návrhové vzory Singleton State objekty často singletony Interpreter může využívat State k definování parse pravidel Strategy velmi podobný vzor implementace State vzoru je postavena na Strategy liší se v sémantice Bridge stejná struktura (až na možnost hiearchizace implementorů) liší se v řešeném problému State umožňuje změnu v chování objektu Bridge odstiňuje abstrakci od implementace 13

State – souhrn, použití Souhrn Použití chování objektu se mění v závislosti na stavu lokalizace dat a souvisejícího chování v oddělené třídě odstínění přechodů mezi stavy (konzistence / “atomicita”) náhrada explicitního větvení virtuálními metodami vzor neříká, kde bude logika změn stavů Použití protokoly, konečné automaty reakce na události podle stavu grafické a jiné editory hry 14