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

Slides:



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

Programovací jazyk C++
Ať se postará někdo jiný, najmeme si programátory z Číny. Čuníkům vstup zakázán.
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
1NPRG054 Vývoj vysoce výkonného software /2013 David Bednárek Domácí úkol.
● 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
Hana Kotinová Struktura a cíl práce Metody předzpracování dat Systémy předzpracování dat Historie vývoje DPT Jak program pracuje Budoucnost.
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
OSNOVA: a) Řetězce v C b) Funkce stdio.h pro řetězce c) Funkce string.h pro řetězce d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
Ing. Josef Veselý Označení šablony a vzdělávací sady viz.rozpis.
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í
Seminář C cvičení Obsluha výjimek Ing. Jan Mikulka.
C# - OOP (object oriented programming)
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.
Facade [f ə ˈ s ɑː d]f ə ˈ s ɑː d. Facade Před: Po:
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
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.
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
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
Dokumentace informačního systému
Richard Lipka Department of Computer Science and Engineering Faculty of Applied Sciences University of West Bohemia, Pilsen, Czech Republic 1.
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.
Principy OOP Objektově orientované programování vychá-zí ze třech základních principů (rysů): zapouzdření (encapsulation) dědičnost (inheritance) polymorfismus.
Textové soubory Vytváření a zpracování textových souborů.
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...
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í.
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.
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é.
Jak psát „Čistý kód“ A hlavně se v něm pak neztratit Jan Pospíšil Senior Technology
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
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++
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Typový příklad 3 – zadání 1
Návrhový vzor Flyweight
Abstract Factory.
TNPW1 JavaScript Ing. Jiří Štěpánek.
Bridge.
private var hodnota:number
C# přehled vlastností.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Decorator.
Monitor Object 1.
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.
Proxy 1.
Composite “Spojuj a panuj”.
Bridge.
Návrhový vzor Prototype.
Transkript prezentace:

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ří jej používají.“ 1

Motivace - Takhle to může začít Ještě není třeba implementovat strategy public Output RunScheduler( string algorithm, Input parameter)          {       if (algorithm == "HOCF" || algorithm == "LOCF")                      return LOCForHOCF(parameter);                           if (algorithm == "HOCFv2" || algorithm == "LOCFv2")             {                  var preprocessed = LOCForHOCFv2_preprocess(parameter); return LOCForHOCFv2(preprocessed);              }              return null;          } public Output LOCForHOCF(Input parameter) { /*…*/} public Output LOCForHOCFv2(InputPrep prep) public InputPrep LOCForHOCFv2_preprocess (Input parameter)

Motivace – Takhle to pokračuje Přidám další... Je to jen jedna větev public Output LOCForHOCF(Input parameter) { /*…*/} public Output LOCForHOCFv2(InputPrep prep) public InputPrep LOCForHOCFv2_preprocess (Input parameter) public Output MILP (InputPrep2 prep) public InputPrep2 MILP_preprocess(Input parameter) public Output RunScheduler(string algorithm, Input parameter)          {       if (algorithm == "HOCF" || algorithm == "LOCF")                      return LOCForHOCF(parameter);                           if (algorithm == "HOCFv2" || algorithm == "LOCFv2")             {                  var preprocessed = LOCForHOCFv2_preprocess(parameter); return LOCForHOCFv2(preprocessed);              } if (algorithm == "MILP" || algorithm == "LP_Heuristic")        var preprocessed = MILP_preprocess(parameter); return MILP(preprocessed);              }              return null;         

Vlastnosti takového kódu Komplexní kód Špatná čitelnost Těžká správa kódu Těžka rozšiřitelnost Důsledky Zkrátka to porušuje

Motivace – Teď už je čas to změnit ...za nějaký čas v TFS

Motivace – Případně už od začátku „Chceme, aby aplikace dělala to a tamto, ale ješte to není úplně jisté a může se to v budoucnu změnit…“

Strategy pattern Strategy - behavioral pattern Vhodné když Používáme více algoritmů nad stejnými daty Máme různé implementace téhož algoritmu Chceme měnit chování dynamicky Hromada kódu v mnoha podmínkách Zapouzdřuje algoritmy ze společné rodiny Open/closed principle Otevřená pro rozšíření, uzavřená pro modifikaci Vyhýbat se abstraktním třídám

Struktura Účastníci Strategy ConcreteStrategy Context 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

Strategy Jak z toho ven? public interface IAlgorithm { ResultClass RunAlgorithm(InputClass input);       } public class HOCF : IAlgorithm {              CustomInputClass preprocess(InputClass input)  {/*preprocessing*/}    public OutputClass RunAlgorithm(InputClass input) { var processedInput = preprocess(input); /*compute what needs to be computed*/ return result;              }          } public class Scheduler : IScheduler{    public OutputClass runScheduler (string algName, InputClass input){          var processedInput = AlgFactory.Get(algName); return Algorithm.RunAlgorithm(input);              }          }

Strategy Ještě trochu lépe (Dependency injection) public class Scheduler : IScheduler{              /*dovoluje změnit strategii za běhu*/ public IAlgorithm Algorithm {get; set;}              public Shceduler(IAlgorithm alg){                  Algorithm  = alg;              }              public OutputClass runScheduler(InputClass input){                  return Algorithm.RunAlgorithm(input);              }          } public class Caller{              private IAlgorithmFactory _algorithmFactory;              private IScheduler _scheduler;              public Scheduler(IAlgorithmFactory algFac , IScheduler sched){ /*nastavení fieldů*/ }              public OutputClass Do(string algorithmName, InputClass input){      var alg = _algorithmFactory.Get(algorithmName); _scheduler=new Scheduler(alg); return _scheduler.RunScheduler(input);              }          }

Implementace – Chováni jednotek Rodina strategií public interface IDifficulty        {              void pickAction(ContextClass context);         }         public class EasyDifficulty : IDifficulty        {             public void pickAction(ContextClass context){                 //wait patiently untill defeated             public class HardDifficulty : IDifficulty        {             //fight for every inch             public class NightmareDiff : IDifficulty        {             public void pickAction(ContextClass context) {         //cheat for unlimited resources             }

Implementace – příklad (C#) Kontext public class Enemy : IEnemy{               public IDifficulty Difficulty { get; set; }                           public void GameTurn(){                  //... Difficulty.PickAction(context);       //...              }          }

Implementace – příklad (C#) Klientský kód public void Game() { IEnemy terran = new Enemy();                 terran.Difficulty = new EasyDifficulty(); IEnemy zerg = new Enemy(); zerg.Difficulty = new HardDifficulty(); terran.GameTurn(); \\terran-easy , zerg.GameTurn(); \\zerg hard terran.Difficulty=new NightmareDiff(); zerg.Difficulty = new EasyDifficulty(); terran.GameTurn(); \\ terran nightmare zerg.GameTurn();   \\zerg easy } Určuje Strategii Kontextu Operuje jenom na Kontextu

Implementace Jak předat kontext strategii? Předání kontextových dat v parametrech metody Nemusí být použity Můžu jich být hodně. Přistupuje jen k datům, které potřebuje Rozhraní a kontext 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 Nevý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

Aplikace Použití v praxi GUI Třídění Komprese dat Obecně Validace formulářových prvků Layout manager – různé algoritmy pro layout prvků 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íť…)

Související návrhové vzory State Chování určeno stavem Stav se může měnit implicitně, Strategii mění uživatel Command Chování zapouzdřeno v objektu

KONEC Pro více informací Dependency injeciton - https://msdn.microsoft.com/en-us/library/ff921152.aspx Tfs – https://en.wikipedia.org/wiki/Team_Foundation_Server C# Properties - https://docs.microsoft.com/en-us/dotnet/articles/csharp/programming-guide/classes-and-structs/properties