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.

Slides:



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

Funkce Připomeňme si program pro výpočet faktoriálu:
Programovací jazyk C++
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.
Pole, ukazatele a odkazy
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
Uživatelská rozhraní Uživatelská rozhraní 9. cvičení.
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.
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ů.
Polymorfismus Dědičnost
Čtvrté cvičení Objektové programování Objektový model v Javě
Větvení cykly J a v a Začínáme programovat Lucie Žoltá.
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í.
Páté cvičení Dědičnost Interface Abstarktní třídy a metody
Kapitoly z metodologie pedagogického výzkumu Prostředí pro výuku algoritmů Vojtěch Ouška.
Ing. Josef Veselý Označení šablony a vzdělávací sady viz.rozpis.
Seminář C cvičení STL, Trolltech Ing. Jan Mikulka.
C# - Exceptions (výjimky)
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.
Strategy. Strategy – „All-in-1“ na začátek class AStrategy { public: virtual void Algorithm()=0; protected: AStrategy(); }; class SpecificStrategy: public.
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
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í
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
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.
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.
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.
Netrvaloppa21 Vytvořte třídu Student pro reprezentaci struktury student na ZČU. Atributy třídy budou fakulta a osobniCislo. Název třídy: Student proměnné.
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.
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...
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í.
ÚPLNÁ PODMÍNKA V JAVĚ úkol 1_29.
NEÚPLNÁ PODMÍNKA V JAVĚ úkol 1_26. ZADÁNÍ Napište zdrojový kód k zadanému vývojovému diagramu.
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í.
ZADÁNÍ Sestavte program, který vytiskne n hvězdiček.
PŘÍKAZ for úkol 1_47.
Visitor. Visitor - motivace Existující struktura typů Unit Character Main Hero Monster Environment Wall Magic Wall Stone Tree Mnoho nezávislých operací.
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ý.
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ř.
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++
Y36PJC Programování v jazyce C/C++
Návrhový vzor Flyweight
Abstract Factory.
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í.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Decorator.
Monitor Object 1.
Composite “Spojuj a panuj”.
Bridge.
Návrhový vzor Prototype.
Transkript prezentace:

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 rozšiřitelnost { if (conditionA) { /*algorithm A*/ } else if (conditionB) { /*algorithm B*/ } else if (conditionC) { /*algorithm C*/ } else if... }

Motivace (konkrétně) class compressor {... public: compressor(std::string format) {...} void compress(std::vector data) { if (format == “zip”) { /*compress using zip*/ } else if (format == “tar.gz”) { /*compress using tar.gz*/ }... } }; Tento přístup funguje, nicméně je náročný na údržbu, přidávání a odebírání algoritmů.

Motivace (konkrétně) Přístup pomocí Strategie Chceme umět komprimovat data zadaným algoritmem struct c_zip { std::vector operator()(std::vector data) { /*compress using zip and return result*/ } }; template class compressor {... public: void compress(std::vector data) { C_ALG c_alg; std::vector c_data = c_alg(data); } }; struct c_tar_gz { std::vector operator()(std::vector data) { /*compress using tar.gz and return result*/ } };

Strategy pattern Strategy - behavioral pattern  Známý též jako Policy pattern Situace, kdy se to hodí  Chceme více algoritmů nad stejnými daty  Chceme různé implementace téhož algoritmu  Chceme mít možnost měnit chování dynamicky  Potřeba skrýt detaily a datové struktury implementace Zapouzdřuje algoritmy ze společné rodiny  Např.: ukládání do různych formátů, operace nad obrazem, GUI layouty

Struktura Účastníci  Strategy Interface, definuje rozhraní společné všem algoritmům  ConcreteStrategy Implementace konkrétního algoritmu - strategie  Context Je mu nastaven ConcreteStrategy objekt Spravuje referenci na Strategy objekt Může zpřístupňovat data/API konkrétním ConcreteStrategy objektům

Implementace Sdílení dat mezi kontextem a strategií  Předání kontextových dat v parametrech metody Mohou se předávat data, které daná strategie nepotřebuje  Předání reference na kontext strategii Strategie přistupuje jen k datům, které potřebuje Kontext musí se strategií více spolupracovat a musí mít dobré API Strategie může být pro kontextovou třídu volitelná  Defaultní Strategie  Pokud uživatel nechce, nemusí nic nastavovat

Implementace – příklad (Java) Strategická hra a chováni jednotek public interface IBehaviour { public void moveCommand(); } public class AgressiveBehaviour implements IBehaviour { public void moveCommand() { // ATTACK } public class DefensiveBehaviour implements IBehaviour { public int moveCommand() { // RUN AWAY } public class NormalBehaviour implements IBehaviour { public int moveCommand() { // IGNORE EVERYBODY } public class Unit { IBehaviour behaviour; String name; public Unit(String name) { this.name = name; } public void setBehaviour(IBehaviour behaviour) { this.behaviour = behaviour; } public void move() {... behaviour.moveCommand();... }... // additional API for Strategy } Rodina strategií Kontext

Implementace – příklad (Java) Klientský kód public class Main { public static void main(String[] args) { Unit u1 = new Unit("Megatron"); Unit u2 = new Unit("Optimus Prime"); Unit u3 = new Unit("R2D2"); u1.setBehaviour(new AgressiveBehaviour()); u2.setBehaviour(new DefensiveBehaviour()); u3.setBehaviour(new NormalBehaviour()); u1.move(); u2.move(); u3.move(); u1.setBehaviour(new DefensiveBehaviour()); u2.setBehaviour(new AgressiveBehaviour()); u1.move(); u2.move(); u3.move(); } Operuje jenom na Kontextu Určuje Strategii Kontextu

Implementace pomocí šablony (C++) Strategie jako parametr šablony  Kdy? Strategie je známa již v době překladu Nemění se za běhu programu  Výhody Není třeba definovat abstraktní třídu Strategie spojena s kontextem během kompilace – vyšší efektivita template class Context { public: void Operation() { s_.execute(); } private: Strategy s_; }; class MyStrategy { public: void execute(); }; Context myContext;

Vlastnosti Výhody  Zapouzdření algoritmu  Převod výběru algoritmu (switch/if) na dědičnost  Rozšiřitelnost chování  Konkrétní chování lze určit za běhu Nevýhody  Overhead  Klient musí umět vybrat strategii

Použití v praxi  GUI Validace formulářových prvků Layout manager – různé algoritmy pro layout prvků  Úprava obrazu Různé operace nad obrazem  Třídění Možnost vybírat strategii třídění dle okolností  Komprese dat Různé metody komprese dat  Obecně Nahrávání, ukládání a generování výsledků v různých formátech Operace výstupu (konzole, soubor, síť…) Použití optimalizovaných implementací dle prostředí (např. pomocí Factory metody) Váš šéf: „Chceme, aby aplikace dělala to a tamto, ale ješte to není úplně jisté a může se to v budoucnu změnit…“ Aplikace

Související návrhové vzory State  Chování určeno stavem  Stav se může měnit implicitně, Strategii mění uživatel Template method  Template method používá dědičnost pro změnu části algoritmu  Strategy používá delegaci pro změnu celého algoritmu Flyweight  Pokud používáme velké množství Strategií, které si nedrží stav, můžeme použít Flyweight