Proxy 1.

Slides:



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

Mediator. Mediator - motivace  FontDialog  závislosti mezi jednotlivými ovládacími prvky jsou netriviální.
Funkce Připomeňme si program pro výpočet faktoriálu:
Základy databázových systémů
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
Singleton 1 1.
Čtvrté cvičení Objektové programování Objektový model v Javě
C++0x stručný náhled na nadcházející revizi standardu programovacího jazyka C++ (ISO/IEC 14882) Jan Ringoš.
Úvod do databází Databáze.
Chain of responsibility Martin Malý prezentace na předmět Návrhové vzory (PRG024) na MFF UK
Tvorba webových aplikací
ÚČEL AUTOMATIZACE (c) Tralvex Yeap. All Rights Reserved.
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í.
Adresářová služba Active directory
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.
Adapter. Adapter – pojem Součástka navržená k propojení dvou „nekompatibilních“ zařízení Definice slova podle Cambridge Advanced Learner's Dictionary:
C# - pointery Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
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.
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.
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ů.
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í.
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.
BIS Firewall Roman Danel VŠB – TU Ostrava.
Úvod do JavaScriptu JavaScript je p JavaScript je programovací jazyk, který se používá na webových stránkách. JavaScript je typu KLIENT - KLIENT To znamená,
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.
Metodika objektového přístupu při tvorbě překladačů. Marek Běhálek Informatika a aplikovaná matematika FEI VŠB-TU Ostrava.
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.
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.
Pokročilé programování v C++ (část B)
Vzdálená správa Tomáš Kalný.
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í.
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.
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(); //
Petr Puš Software Architect Unicorn a.s. Microsoft C# MVP.
Proxy. Proxy poskytuje bariéru mezi klientem a reálnou implementací.
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
Y36PJC Programování v jazyce C/C++
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.
Y36PJC Programování v jazyce C/C++
Decorator Radek Zikmund NPRG024, LS 2016/17.
Návrhový vzor Flyweight
Lazy load Použity informace z knihy Patterns of Enterprise Application Architecture od M. Fowlera Jan Sládek.
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í.
Přednášky z Distribuovaných systémů
Komunikační návrhové vzory
Unit of Work vzor z P of EAA (Fowler) 1.
Decorator.
Monitor Object 1.
Adapter
Composite “Spojuj a panuj”.
Bridge.
Transkript prezentace:

Proxy 1

Proxy – úvod Problém Klient má přístup k nějakému objektu Potřebujeme tento přístup ošetřit Kontrola přístupu Vzdálený přístup Cachování Load on demand Nechceme přidat práci klientovi ani objektu Proxy Jednoduchý, ale efektivní vzor Spravuje použití a přístup ke zdrojům Šetří pamět, kontroluje přístup

Proxy – motivace Příklad ze života Šek nebo kreditní karta Použití Místo peněz Prostředek k přístupu k penězím Reální subjekt Bankovní účet Proxy kontroluje a spravuje přístup k objektu, který „ochraňuje“

Proxy Proxy poskytuje bariéru mezi klientem a reálnou implementací

Proxy – struktura UČASTNÍCI Subject Proxy RealSubject Client Interface, ke kterému má klient přístup Společné rozhraní pro Proxy a RealSubject Proxy Má přístup k RealSubject Předává mu requesty, kontroluje přístup Zná některé jeho vlatnosti RealSubject Skutečný objekt Client Není schopen přistupovat k RealSubject, aniž by prošel přes Proxy

Proxy – použití Kdy ho použít Objekty leží v rozličných adresových prostorech (RP) Možnost zrychlení aplikace (VP) Objekt je nutno vytvořit na dotaz Oddálení načítání zdrojů dokud nejsou potřeba Usnadňuje přístup k pamětově náročným položkám jako obrázky nebo grafika Nutná kontrola přístupu k původnímu objektu (PP) Je vyžádána dodatečná funkcionalita při přístupu k objektu (SP, PP) 6

Proxy - typy Virtual proxy Remote proxy Synchronized proxy Zastupuje objekt - má stejné rozhraní, ale funkčnost deleguje na jiný objekt Vytváření objektů až v případě potřeby („load on demand“) Remote proxy Lokální zástupce vzdáleného objektu Řeší komunikaci s objektem Middleware: C# Remoting, XML/SOAP, ... Synchronized proxy Synchronizace přístupu ke skutečnému objektu Protection proxy Kontrola či omezování přístupů ke skutečnému objektu Smart pointers/reference Náhrada běžných ukazatelů či referencí Počítání referencí a automatické odalokování (C++ std::shared_ptr) Načítání do paměti při první dereferenci 7

Virtual proxy – příklad použití Prohlížeč obrázků Seznam všech obrázků ve složce a jejich zobrazení Špatný přístup – získáme seznam obrázků a všechny fotky nahrajeme do paměti Lepší řešení – zobrazení fotky na vyžádání (load on demand) Ušetříme práci a paměť – nezobrazené fotky se vůbec nenačtou Elegantní realizace řešení – PROXY

Virtual proxy – příklad Real object interface IImage { void DrawImage(); Size GetSize(); }; Interface class RealImage : IImage { public RealImage(fileName) { // skutecne nacitani obrazku // pomale loadImage(fileName); } public void DrawImage() { // renderovani obrazku public Size GetSize(fileName) { return new Size(data.cols, data.rows); }; Proxy public class ImageProxy : IImage { private string fileName; private Image image; private Size size; public ImageProxy(string fileName) { this.fileName = fileName; } public void DrawImage() { GetImage().DrawImage(); public Size GetSize() { if (size.IsEmpty) size = GetImge().GetSize(); return size; private Image GetImage() { if (image == null) image = new RealImage(fielName); return image; } } IImage CreateImage(string fileName) { return new ImageProxy(fileName); } IImage img1 = CreateImage(“img1.png”); IImage img2 = CreateImage(“img2.png”); img1.showImage(); // z disku img1.showImage(); // z paměti img2.showImage(); // z disku

Protection proxy – příklad Vytvoření neměnitelné kolekce Řešení problému absence const v C#: Omezení rozhraní Protection proxies (wrappers)‏ public interface ICollection<T> { bool Contains(T item); bool Add(T item); //.... } public class ReadOnlyCollection<T> : ICollection<T> { private ICollection<T> c; public ReadOnlyCollection(ICollection<T> c) { this.c = c; } public bool Contains(T item) { return c.Contains(item); } public void Add(T item) { throw new NotSupportedException(); } //... } public static ICollection<T> AsReadOnly(this Collection<T> c) { return new ReadOnlyCollection<T>(c); // vytvoření seznamu List list = new List<int>(); // příprava dat apod. // nyní se vytvoří neměnná kolekce ICollection<int> c = list.AsReadOnly(); 10

Synchronization proxy – příklad Standardní kolekce nejsou v C# thread-safe Umožňuje vyšší rychlost Volitelné řešení: synchronization proxies (wrappers) Myšlenkově identické s předchozí ReadOnlyCollection public class SynchronizedCollection<T> : ICollection<T> { private ICollection<T> c; public SynchronizedCollection(ICollection<T> c) { this.c = c; } public bool Contains(T item) { lock(c) { return c.Contains(item); } } public bool Add(T item) { lock(c) { return c.Add(item); } //... public static ICollection<T> MakeThreadSafe(ICollection<T> c) { return new SynchronizedCollection<T>(c); // typický příklad ICollection<string> l = MakeThreadSafe(new List<string>()); 11

Remote proxy – C# Remoting public interface IComputation { public int Execute(); } public class Computation : MarshalByRefObject, IComputation { public int Execute() { // operace na serveru } // server var channel = new TcpServerChannel(5000); ChannelServices.RegisterChannel(channel, true); RemotingConfiguration.RegisterWellKnownServiceType( typeof(Computation), "computation", WellKnownObjectMode.SingleCall); // klient var channel = new TcpClientChannel(); ChannelServices.RegisterChannel(channel, true); IComputation remoteObject = (IComputation) Activator.GetObject( typeof(IComputation), "tcp://localhost:5000/computation"); remoteObject.Execute(); 12

Proxy +/- Výhody Nevýhody Zjednodušení cílového kódu Zapouzdření optimalizací a strategie přistupování k objektu Oddělení administrativního kódu od funkcionality Transparentní a snadný návrhový vzor Nevýhody Snižení efektivity vrstva navíc, reference navíc ne vždy to vadí (přístup k externím datům je mnohem pomalejší) Tvorba sady proxy pro větší subsystém může být zdlouhavá Řešení: automatizace pomocí např. Reflection – opět citelné zpomalení Klient o proxy vrstvě jakoby neví nezná možné vedlejší účinky (připojování k síti, náročné operace) 13

Proxy – související NV Adapter Decorator Také tvoří mezivrstvu Jiný účel Adapter: rozdílné rozhraní, stejná funkčnost Proxy: stejné rozhraní, rozdílná funkčnost   Decorator Podobná struktura, ale jiný účel - přidává funkčnost Musí po celou dobu běhu držet fyzickou instanci skutečného objektu U proxy ještě nemusí existovat nebo může být např. na jiném počítači 14