Strategy. Motivace Ze života - jak to taky může vypadat (R): source("../algorithms/HOCForLOCF.R") source("../algorithms/HOCForLOCFv2.R") source("../MILP/MILP.R")

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
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ů.
● SWIG - Simplified Wrapper and Interface Generator ● + google a diskusní fóra ● nástroj zjednodušující (a sjednocující)
Č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í.
Kapitoly z metodologie pedagogického výzkumu Prostředí pro výuku algoritmů Vojtěch Ouška.
Adapter. Adapter – pojem Součástka navržená k propojení dvou „nekompatibilních“ zařízení Definice slova podle Cambridge Advanced Learner's Dictionary:
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.
PRÁCE S VLÁKNY A APLIKAČNÍ DOMÉNY V.NET FRAMEWORK APLIKACÍCH Architektura technologie.NET Jan Martinovič, FEI - Katedra Informatiky.
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ů.
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í.
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.
Systémy pro podporu managementu 2 Inteligentní systémy pro podporu rozhodování 1 (DSS a znalostní systémy)
PHP Vytváření formuláře.
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é.
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í.
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í.
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ř.
Iterator. C historie int * rand_numbers(int n) { int *numbers = malloc(n * sizeof(int)); int *it = numbers; while (it < numbers + n) *it++ = rand(); //
CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics Jazyk C# a platforma.NET ZS 2015/2016 Pavel Ježek
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é.
SOLID principy v OOP návrhu
Jazyk C# a platforma .NET ZS 2016/2017
Mediator Několik slov o překladu slova do češtiny (prostředník, zprostředkovatel), vyzdvihnutí počeštěného slova mediátor. 1 1.
Programovací jazyk C++
State 1.
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Jakub Brodský Ondřej Radosta
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ří.
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Bridge.
C# přehled vlastností.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Decorator.
Monitor Object 1.
Proxy 1.
Composite “Spojuj a panuj”.
Bridge.
Návrhový vzor Prototype.
Transkript prezentace:

Strategy

Motivace Ze života - jak to taky může vypadat (R): source("../algorithms/HOCForLOCF.R") source("../algorithms/HOCForLOCFv2.R") source("../MILP/MILP.R") runScheduler <- function(input, "parameters") { if (algorithm == "HOCF" || algorithm == "LOCF" ) { result <- LOCForHOCF("parameters") } else if (algorithm == "HOCFv2" || algorithm == "LOCFv2" ){ preprocessed <- preprocess(input) result <- LOCForHOCFv2(preprocessed, "parameters") } else if (algorithm == "MILP" || algorithm == "LP_Heuristic" ){ preprocessed <- MILP_preprocess(input) result<- MILP(preprocessed, "parameters") } else { return(NULL) } return (result) }

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 trvá si to pročíst ještě déle trvá to upravit a když to ještě potřebujeme rozšířit...

Motivace (konkrétně) ■ Jak z toho ven? public interface Ialgorithm { ResultClass runAlgorithm(InputClass input,int flags) } public class HOCF: Ialgorithm { InputClass preprocess(InputClass input) {/*preprocessing*/} public OutputClass runAlgorithm(InputClass input,int flags) { var processedInput = preprocess(input); /*compute what needs to be computed*/ return result; } static void Main(string[] args) { var factory = new AlgorithmFactory(); Ialgorithm toRun = factory.getAlgorithm("HOCF"); result = toRun.runAlgorithm(/*input*/); }

Strategy pattern ■ Strategy - behavioral pattern ■ Kdy je použití strategie vhodné ❑ Používáme více algoritmů nad stejnými daty ❑ Máme různé implementace téhož algoritmu ❑ Chceme mít možnost měnit chování dynamicky ❑ Potřebujeme skrýt detaily a datové struktury implementace ■ Zapouzdřuje algoritmy ze společné rodiny ❑ ukládání do různych formátů ❑ operace nad obrazem ❑ chování AI ve hrách v závislosti na obtížnosti/rase

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 – příklad (C#) ■ Strategická hra a chováni jednotek public interface IDifficulty { void pickAction(ContextClass context); } public class EasyDifficulty: IDifficulty { public void pickAction(ContextClass context) { //wait patiently untill defeated } public class HardDifficulty: IDifficulty { public void pickAction(ContextClass context) { //fight for every inch } public class NightmareDiff: IDifficulty { public void pickAction(ContextClass context) { //cheat for unlimited resources } public class Enemy { IDifficulty difficulty; String race; public Enemy(String race) { this.race = race; } public void setDifficulty(IDifficulty level) { this.difficulty = level; } public void gameTurn() { //... difficulty.pickAction(context); //... } Rodina strategií Kontext

Implementace – příklad (C#) ■ Klientský kód public class Main { public static void main(String[] args) { Enemy[] enemies = new Enemy[] { new Enemy("Terran"), new Enemy("Zerg"), new Enemy("Protoss") }; enemies[0].setDifficulty(new EasyDifficulty()); enemies[1].setDifficulty(new HardDifficulty()); enemies[2].setDifficulty(new NightmareDiff()); foreach (var e in enemies) e.gameTurn(); enemies[0].setDifficulty(new NightmareDiff()); enemies[1].setDifficulty(new EasyDifficulty()); foreach (var e in enemies) e.gameTurn(); } Operuje jenom na Kontextu Určuje Strategii Kontextu

Implementace pomocí delegátů (C#) class Enemy { public delegate void Action(Difficulty); Action pickAction; public void setDifficulty(Difficulty level) { pickAction = level; } public static void Main(String[] args) { var e1 = new Enemy("protoss"); e1.setDifficulty( (Context context) => { /*do something*/ }); } v případě, že algoritmus není příliš složitý/nepotřebuje si uchovávat data

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;

Implementace ■ Jak předat kontext strategii? ❑ Předání kontextových dat v parametrech metody ■ Mohou se předávat data, které daná strategie nepotřebuje ■ Spousta parametrů, na které musíme myslet. ❑ Předání reference na kontext strategii ■ Strategie přistupuje jen k datům, které potřebuje ■ Kontext musí být se strategií lépe provázaný a rozhraní musí být dobře navržené. ■ Strategie může být pro kontextovou třídu volitelná ❑ Defaultní Strategie ❑ Pokud uživatel nechce, nemusí nic nastavovat

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) šé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

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

KONEC