Strategy. Strategy – „All-in-1“ na začátek class AStrategy { public: virtual void Algorithm()=0; protected: AStrategy(); }; class SpecificStrategy: public.

Slides:



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

Seminář C++ 5. cvičení Dědičnost Ing. Jan Mikulka.
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.
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
1NPRG054 Vývoj vysoce výkonného software /2013 David Bednárek Domácí úkol.
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.
C++ Přednáška 3 Konstantní a statické členy tříd, ukazatel this, konstantní instance třídy Ing. Jiří Kulhánek , kat. 352, VŠB TU Ostrava 2004.
C# pro začátečníky Mgr. Jaromír Osčádal
Programování v C++ Cvičení.
Čtvrté cvičení Objektové programování Objektový model v Javě
Chain of responsibility Martin Malý prezentace na předmět Návrhové vzory (PRG024) na MFF UK
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í.
Řadicí algoritmy autor: Tadeáš Berkman.
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é.
PB161 Jmenné prostory, I/O proudy PB161 | Jmenné prostory, IO proudy PB161 – Programování v jazyce C++ Objektově Orientované Programování.
Seminář C cvičení STL, Trolltech Ing. Jan Mikulka.
Algoritmy a programovací techniky
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í
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 -
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.
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.
Čísla Desetinná čísla. čísla desetinná se v PC ukládají jiným způsobem než čísla celá – výpočty s nimi provádí dvě odlišné části procesoru při výpočtech.
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í
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.
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.
13/04/20151 Indexery (1) Členy třídy (struktury) umožňující třídě (struk- tuře) používat hranaté závorky a pracovat s ní podobně jako s polem (používat.
Databázové modelování
Metodika objektového přístupu při tvorbě překladačů. Marek Běhálek Informatika a aplikovaná matematika FEI VŠB-TU Ostrava.
Šesté cvičení Výjimky Balíky.
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...
Strategie projektu Základní parametry: Záměr projektu Cíl projektu
Pokročilé programování v C++ (část B)
PŘÍKAZ while úkol 1_42.
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í.
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.
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íž.
Iterator. C historie int * rand_numbers(int n) { int *numbers = malloc(n * sizeof(int)); int *it = numbers; while (it < numbers + n) *it++ = rand(); //
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")
SOLID principy v OOP návrhu
Programovací jazyk C++
State 1.
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ří.
Oblast platnosti identifikátoru (1)
Bridge.
C# přehled vlastností.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Scoped Locking, Strategized Locking
Composite “Spojuj a panuj”.
Bridge.
Transkript prezentace:

Strategy

Strategy – „All-in-1“ na začátek class AStrategy { public: virtual void Algorithm()=0; protected: AStrategy(); }; class SpecificStrategy: public AStrategy { public: virtual void Algorithm(); SpecificStrategy(); }; class Context { public: Context(AStrategy* s); void Algorithm(); private: AStrategy* strategy; };

Příklad: Indentace kódu v textovém editoru

Příklad: Layout managers – AWT (Border Layout)

Příklad: Layout managers – AWT (Flow Layout)

Různé algoritmy třídění záznamů dle typu klíče  Celočíselné hodnoty a řetězce je možno třídit rychle pomocí přihrádek, ostatní typy je nutno třídit algoritmem založeným na porovnávání Příklad: Třídění záznamů RadixSort - přihrádky (string) RadixSort - přihrádky (int) porovnání typu „double“ porovnání třídy „MyClass“ Algoritmus Sort QuickSort - potřebuje metodu pro porovnání, stejné schéma jako „o patro výše“

Strategy Definuje rodinu algoritmů, které zapouzdřuje a umožňuje jejich záměnu. Strategie umožňuje změnu algoritmu nezávisle na klientovi který ji používá…

Strategy - použitelnost Použitelnost  pro více souvisejících tříd lišících se pouze chováním v klientské třídě můžeme volit jedno z mnoha chování  pokud je výhodné volit z více variant algoritmů např. umožní reflektovat časovou a prostorovou náročnost  pro algoritmy používající data, o kterých by klient neměl vědět skrývá datové struktury specifické pro algoritmus

Účastníci  Context obsahuje ukazatel na abstraktní strategii chování je dáno konkrétní strategií Strategy – struktura (1)

Účastníci  Strategy abstraktní třída, definuje rozhraní společné všem algoritmům virtuální metoda Strategy – struktura (2)

Účastníci  ConcreteStrategy specifická implementace virtuální metody, čili konkrétního algoritmu Strategy – struktura (3)

Strategy – struktura… povědomé? Téměř stejné UML diagramy mají i návrhové vzory State a Bridge  bridge: odděluje abstrakci od její implementace  state: mění chování objektu podle jeho vnitřního stavu, objekt působí jako by změnil třídu

Strategy – předávání parametrů strategii (1) implementace  předání v parametrech metody mohou se předávat data, které daná strategie nepotřebuje  předání reference na kontext strategii  obecný kontext – v metodě kontextu se předá ukazatel na strukturu s parametry class Context { public: Context(AStrategy* s); void Algorithm(); private: AStrategy* strategy; int potentialParameter; }; class AStrategy { public: virtual void Algorithm(int p)=0; } class CStrategy: public AStrategy { public: virtual void Algorithm(int p) { // f(p) }; }

Strategy – předávání parametrů strategii (2) implementace  předání v parametrech metody  předání reference na kontext strategii strategie přistupuje jen k datům, které potřebuje, kontext musí se strategií více spolupracovat nutnost neustále předávat kontext  obecný kontext – v metodě kontextu se předá ukazatel na strukturu s parametry class Context { public: Context(AStrategy* s); void Algorithm(); private: friend class AStrategy; AStrategy* strategy; int potentialParameter; }; class AStrategy { public: virtual void Algorithm(Context&)=0; protected: //virtual int getNumber(Context& c) int getNumber(Context& c); // vraci private polozku kontextu } class CStrategy: public AStrategy { public: virtual void Algorithm(Context& c) { // f(this->getNumber(c)) }; }

Strategy – předávání parametrů strategii (3) implementace  předání v parametrech metody  předání reference na kontext strategii  obecný kontext – v metodě kontextu se předá ukazatel na strukturu s parametry de facto princip „propůjčení ukazatele s důvěrou v rodokmen“ od konkrétní strategie se předpokládá jisté „vychování“ (nesmí půjčovat půjčený ukazatel, musí se k datům chovat slušně) ??? Algorithm() AStrategy* potentialParam1 potentialParam2 potentialParam3 CSTRATEGY Algorithm() { } CONTEXT CSTRATEGY CONTEXT Algorithm() AStrategy* _CData* potentialParam1 potentialParam2 potentialParam3 CONTEXT CSTRATEGY Algorithm(_CData*) { } CSTRATEGY Jak se dostat k parametrům??

Strategy – předávání parametrů strategii (4) class Context { public: Context(AStrategy* s); //vytvori i data void Algorithm(); private: AStrategy* strategy; _CData* data; }; class _CData { public: int Parameter; } class AStrategy { public: virtual void Algorithm(void*)=0; } class CStrategy: public AStrategy { public: virtual void Algorithm(void* cd) { // f(((_CData*)cd)->Parameter) }; } implementace  předání v parametrech metody  předání reference na kontext strategii  obecný kontext – v metodě kontextu se předá ukazatel na strukturu s parametry de facto princip „propůjčení ukazatele s důvěrou v rodokmen“ od konkrétní strategie se předpokládá jisté „vychování“ (nesmí půjčovat půjčený ukazatel, musí se k datům chovat slušně)

Strategy – předávání parametrů strategii (5) implementace  předání v parametrech metody  předání reference na kontext strategii  obecný kontext – v metodě kontextu se předá ukazatel na strukturu s parametry konkrétní strategie musí v nejobecnější implementaci ukazatel přetypovat, aby uměla s daty pracovat – náročnější na pozornost programátora možno si pohrát s ochranou přístupu u propůjčovaných dat class Context { public: Context(AStrategy* s); //vytvori i data void Algorithm(); private: AStrategy* strategy; _CData* data; }; class _CData { private: friend class Context; _CData() {}; int Parameter; public: int getPatrameter(); } class AStrategy { public: virtual void Algorithm(void*)=0; } class CStrategy: public AStrategy { //... }

Strategy – předání strategie přes šablonu strategie jako parametr šablony  použitelné, pokud je strategie známa již v době kompilace a není ji potřeba měnit za běhu programu  není třeba definovat abstraktní třídu pro strategie  strategie je spojena s kontextem staticky – vyšší efektivita template class Context { void Operation() { theStrategy.DoAlgorithm(); } private: AStrategy theStrategy; }; class MyStrategy { public: void DoAlgorithm(); }; Context aContext;

Strategy – souvislosti závěrem Zapouzdřuje rodiny souvisejicích algoritmů Eliminuje nutnost podmiňovacích výrazů Výběr z implementací Klient musí být obeznámen s druhy Strategií Zvýšený počet objektů void Cotext::Algorithm () { switch (_strategy) { case STRICT: executeStrictAlgorithm(); break; case RELAXED: executeRelaxedAlgorithm(); break; //... } void Context::Algorithm () { _aStrategy->Algorithm(); }

Strategy – „All-in-1“ na konec class AStrategy { public: virtual void Algorithm()=0; protected: AStrategy(); }; class SpecificStrategy: public AStrategy { public: virtual void Algorithm(); SpecificStrategy(); }; class Context { public: Context(AStrategy* s); void Algorithm(); private: AStrategy* strategy; };