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í.

Slides:



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

Stručný úvod do UML.
Seminář C++ 5. cvičení Dědičnost Ing. Jan Mikulka.
Mediator. Mediator - motivace  FontDialog  závislosti mezi jednotlivými ovládacími prvky jsou netriviální.
Ing. Jan Mittner MySQL Workbench 2. Základy práce s databází 3. Subversion 2.
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.
Ing. Jan Mittner Rozšíření modelu 2. Vazba 1:n 3. Vazba m:n 2.
ÚVOD DO CPP 7 Dědičnost - pokračování
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
Singleton 1 1.
Čtvrté cvičení Objektové programování Objektový model v Javě
Objekty v CLIPSu RNDr. Jiří Dvořák, CSc.
Chain of responsibility Martin Malý prezentace na předmět Návrhové vzory (PRG024) na MFF UK
Páté cvičení Dědičnost Interface Abstarktní třídy a metody
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í
Operační systémy.
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.
Facade [f ə ˈ s ɑː d]f ə ˈ s ɑː d. Facade Před: Po:
Informatika pro ekonomy II přednáška 10
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ů.
Dependency injection Předávání závislostí Petr Kalivoda
6. cvičení Polymorfismus
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í.
Algoritmizace a programování Objektově orientované programování - 16 Mgr. Josef Nožička IKT Algoritmizace a programování
PB161 Principy OOP - rozhraní, dědičnost PB161 | Principy OOP - Dědičnost, rozhraní
IB111 Programování a algoritmizace
Dokumentace informačního systému
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.
Databázové modelování
Principy OOP Objektově orientované programování vychá-zí ze třech základních principů (rysů): zapouzdření (encapsulation) dědičnost (inheritance) polymorfismus.
JADEGen Nástroj pro generování chování z prostředí Agent Studio Implementace (ver0.1)
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.
Pokročilé programování v C++ (část B)
Foreign key mapping Jakub Chalupa Naim Ashhab ČVUT FEL
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í.
Visitor. Visitor - motivace Existující struktura typů Unit Character Main Hero Monster Environment Wall Magic Wall Stone Tree Mnoho nezávislých operací.
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ř.
Composite “ Spojuj a panuj ”. Zakladní vlastnosti Výslovnost  kompozit, ne kompozajt Účel  Popisuje, jak postavit strukturované hierarchie tříd, v níž.
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é.
Strategy. Motivace Ze života - jak to taky může vypadat (R): source("../algorithms/HOCForLOCF.R") source("../algorithms/HOCForLOCFv2.R") source("../MILP/MILP.R")
Vývojová prostředí Objektově Orientované Programování OB21-OP-EL-KON-DOL-M Orbis pictus 21. století.
SOLID principy v OOP návrhu
Úvod do C# - OOP Jaroslav BURDYS 4IT.
State 1.
Decorator Radek Zikmund NPRG024, LS 2016/17.
Návrhový vzor Flyweight
Abstract Factory.
Polymorfismus = Mnohotvarost
Informatika pro ekonomy přednáška 8
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ří.
Bridge.
C# přehled vlastností.
ZAL – 7. cvičení 2016.
Decorator.
Monitor Object 1.
Proxy 1.
Adapter
Composite “Spojuj a panuj”.
Bridge.
Návrhový vzor Prototype.
Transkript 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í 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: _send(msg); break;... }

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

State –TCPConnection – motivační příklad vnější rozhraní pro klienty implementace chování v konkrétních stavech abstraktní předek reprezentující stavy

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 State – struktura

State – důsledky 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 Explicitní změna stavu  vytváření samostatných objektů pro různé stavy přechod na jiný stav je atomický (z pohledu Contextu) Sdílení objektů State  instance nemají proměnné, stav je reprezentovaný pouze jejich typem  často nemají žádný vlastní stav, jen chování (typ) Flyweight

State – změna stavu 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

State – změna stavu 2 Tabulkou řízený přístup  (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)

State – konkrétní implementace 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

State – konkrétní implementace TCPState  abstraktní třída  interface pro chování TCPClosed  konkrétní stav 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 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()); } statická metoda Instance - Singleton změna stavu

State – související NV Singleton  State objekty často singletony Flyweight  State objekty obsahují pouze chování pro svůj typ, data v Contextu  sdílení State objektů 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 záměru: State objekty lze chápat jako strategie 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 implementaci

State – souhrn, použití Souhrn  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 aktivní nástroj - různé funkce  hry