Návrhový vzor Flyweight

Slides:



Advertisements
Podobné prezentace
Formátování diplomové práce
Advertisements

Vytvoření dokumentu bylo financováno ze zdrojů Evropského sociálního fondu a státního rozpočtu ČR. Název projektu: Výuka programování na střední škole.
Programovací jazyk C++
Základy databázových systémů
 Informací se data a vztahy mezi nimi stávají vhodnou interpretací pro uživatele, která odhaluje uspořádání, vztahy, tendence a trendy  Existuje celá.
Selektory 1 1. Selektor elementu Deklarované styly budou použité při každém vyskytování elementu v dokumentu. Selektor elementu se obvykle používá pro.
Přednáška č. 5 Proces návrhu databáze
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
TVORBA WEBOVÝCH STRÁNEK
Č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í.
Páté cvičení Dědičnost Interface Abstarktní třídy a metody
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é.
Adresářová služba Active directory
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 -
Relační databáze.
Databázové systémy. Práce s daty Ukládání dat Aktualizace dat Vyhledávání dat Třídění dat Výpočty a agregace.
Strategy. Strategy – „All-in-1“ na začátek class AStrategy { public: virtual void Algorithm()=0; protected: AStrategy(); }; class SpecificStrategy: public.
Základní pojmy Systém je abstrakce, kterou si lidé vytvářejí v procesu poznávání jako nástroj zkoumání reálných objektů.
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
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í.
Návrhový vzor Factory v JAVA API Martin Kot Katedra informatiky VŠB – Technická univerzita Ostrava
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.
Databázové systémy I Cvičení č. 8 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Brána k poznání Dokončení první fáze – základní značky HTML.
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.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
Richard Lipka Department of Computer Science and Engineering Faculty of Applied Sciences University of West Bohemia, Pilsen, Czech Republic 1.
13/04/20151 Datový typ třída – class (1) Datový typ definovaný uživatelem Poskytuje mechanismus pro modelování entit, s nimiž manipulují aplikace Charakterizuje.
Databázové modelování
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...
FEL Komunikátor. Memory Leak program konsumuje operační paměť, kterou neumožňuje uvolnit o uvolnění paměti stará Garbage Collector ▫plně v režii Java.
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í.
Databázové systémy I Cvičení č. 8 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2015.
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ř.
© 2016 InterSystems Corporation. All rights reserved. Integrace OAuth 2.0 a OpenID Connect.
Zahradnická fakulta v Lednici S4U – Seminář o Univerzitním informačním systému 23. – 25. dubna 2008 S 4 U – Seminář o Univerzitním informačním systému.
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA:
Proxy. Proxy poskytuje bariéru mezi klientem a reálnou implementací.
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")
as4u advanced system for you
SOLID principy v OOP návrhu
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Výukový materiál zpracován v rámci projektu
Soubor Soubor v informatice označuje pojmenovanou sadu dat uloženou na nějakém datovém médiu, se kterou lze pracovat nástroji operačního systému jako.
Výukový materiál zpracován v rámci projektu
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Typový příklad 3 – zadání 1
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í.
ZAL – 7. cvičení 2016.
Monitor Object 1.
Proxy 1.
Composite “Spojuj a panuj”.
Bridge.
Návrhový vzor Prototype.
Transkript prezentace:

Návrhový vzor Flyweight Hodně objektů? Sdílet. 1 1 1

Naivní textový editor Požadavky Naivní řešení Problém nové znakové sady práce s bloky, formátování simulace vzhledu dokumentu Naivní řešení znak, řádek, stránka = třída výskyt v dokumentu = objekt objekty nesou svoji identitu Problém hodně objektů (paměť) nesou hodně dat (paměť) které se téměř neliší 2 2 2

Objekt flyweight – sdílení jedné kopie flyweight je sdílený objekt, který se může současně vyskytovat ve více různých souvislostech. Objekt flyweight identita bez kontextu Vnitřní (intristic) stav data v objektu nezávislý na kontextu nebrání sdílení Vnější (extrinsic) kontext flyweight o něm neví ukládá a počítá ho klient Volání flyweight zná svůj stav volající klient předá kontext logicky fyzicky 3 3 3

Textový editor pomocí vzoru Flyweight Abstraktní třída Glyph na grafické objekty Potomek Character je flyweight Potomci Row a Column nejsou sdílené 4 4 4

Součásti vzoru Flyweight IFlyweight interface s metodami Flyweight : IFlyweight (znak) přístup k instanci odkudkoliv datové položky na vnitřní stav data nezávisí na kontextu UnsharedFlyweight: IFlyweight (řádek, sloupec) Flyweight bez sdílení FlyweightFactory vytváří a spravuje flyweighty zabezpečuje sdílení a přístup Client používá reference na flyweighty poskytuje flyweightům kontext 5 5 5

Předpoklady použití – Checklist 1 Návrhový vzor Flyweight má smysl použít jenom pokud jsou splněny všechny z následujících podmínek. Velké množství objektů v aplikaci chceme prostor pro redukci počtu objektů Objekty uchovávají hodně dat vzhledem k tomu kolik jich je chceme prostor pro redukci paměti Stav objektů může být uchováván kontextuálně např. znak se může svůj font dozvědět od svého řádku Po odstranění kontextuálního stavu zůstane malá množina různých objektů Nezáleží na identitě objektů metoda Equals() vrátí true pro dva výskyty téhož znaku 6 6 6

Pravidla pro implementaci – Checklist 2 Implementace vyžaduje úplné oddělení vnitřního stavu od vnějšího kontextu pro každý objekt flyweight. Kontext uchovávat jako metadata vyhledat a dopočítat pro konkrétní flyweight předat jako parametr při volání flyweightu Vnitřní stav minimalizovat rozmanitost datová položka flyweightu nic víc než identita Správa sdílených flyweightů instance vytváří jenom factory klienti získávají instance jenom od factory, nevytváří vlastní 7 7 7

Kontext jako metadata 8 8 8

Pořadí volání metod FlyweightFactory vytváří nové instance potomků Flyweight FlyweightFactory vrací referenci na dříve vytvořenou instanci Client nevytváří instance přímo, aby bylo zajištěné řádné sdílení Client musí oznámit továrně až objekty přestane používat Objekty Flyweight by měly být neměnné z pohledu Clienta Client spravuje externí stav a předává ho při volání metod 9 9 9

identita = interní stav Implementace – 10 000 linek různých barev Graphics graphics = canvas.GetGraphics(); for(int i = 0; i < 10000; i++) { Line line = LineFactory.GetLine(GetRandomColor()); line.Draw(graphics, randomX(), randomY(), randomX(), randomY()); } klient public class LineFactory { private static Dictionary<Color, Line> linesByColor = new ...; public static Line GetLine(Color color) { if(!linesByColor.ContainsKey(color)) linesByColor.Add(color, new Line(color)); return line; } public class Line { private Color _color; public Line(Color color) { _color = color; } public void Draw(Graphics graphics, int x1, int y1, int x2, int y2) { graphics.SetColor(color); graphics.DrawLine(x1, y1, x2, y2); identita = interní stav kontext 10 10 10

Shrnutí Příklady použití Výhody Nevýhody textové editory Návrhový vzor Flyweight je užitečný jenom pro aplikace s velkým počtem jednoduchých a podobných objektů. Příklady použití textové editory boxing malých intů v Javě dekorace ve hrách obrázky na webové stránce buttony, scrollbary, checkboxy… Výhody úspora paměti méně instancí = menší zátěž GC a alokátoru Nevýhody dopočítávání kontextu více vytíží CPU specifické použití 11 11 11