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

Slides:



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

Funkce Připomeňme si program pro výpočet faktoriálu:
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
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.
Singleton 1 1.
Polymorfismus Dědičnost
Č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š.
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.
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í
C# - funkce a procedury Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
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í.
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í.
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
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.
Ú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á,
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.
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.
Factory Method. Motivace – tisk Knihovna tiskne dokumenty do pdf File Open() Close() Print() PresentationWritingDrawing Knihovna tiskne obrázky do pdf.
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í.
Prototyp. O čem to bude? Prototyp Účel  vytváření objektů  nový objekt se vytváří kopírováním (klonováním) vzoru – prototypu.
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í.
Petr Chmelař UIFS FIT VUT JAVA pro PDB Kafe? Jako C++ Zrníčka 1 / 12 Java rychlokvaška pro PDB [ ]
Chain of Responsibility. Chain of responsibility - účel Účel  Umožňuje zrušení vazby mezi odesílatelem a příjemcem požadavku  Umožňuje zaslání požadavku.
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ř.
TCP, CORBA, RMI Jan Růžička Institute of geoinformatics VSB-TU Ostrava 17.listopadu 15, Ostrava-Poruba,
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.
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++
Y36PJC Programování v jazyce C/C++
Generické typy jsou třídy či interfejsy deklarující tzv. typové parametry jimiž: systematizují typovou kontrolu kompilátorem, vyjadřují jasněji smysl,
Návrhový vzor Flyweight
Abstract Factory.
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ří.
RMI = Remote Method Invocation
Bridge.
Reflexe jako introspekce
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.
Proxy 1.
Adapter
Composite “Spojuj a panuj”.
Bridge.
Transkript prezentace:

Proxy

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

Proxy – úvod 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ý přístup Cachování Load on demand  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  Proxy Š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 – struktura UČASTNÍCI  Subject Interface, ke kterému má klient přístup  Proxy a RealSubject Implementují společné rozhraní Subject  Client Není schopen přistupovat k RealSubject, aniž by prošel přes Proxy  Proxy Má přístup k RealSubject Předává mu requesty, kontroluje přístup Zná některé jeho vlatnosti  RealSubject Skutečný objekt

Proxy – použití Kdy ho použít  Objekty leží v rozličných adresových prostorech  Objekt je nutno vytvořit na dotaz  Nutná kontrola přístupu k původnímu objektu  Je vyžádána dodatečná funkcionalita při přístupu k objektu Lze také využít pro  Oddělení kódu implementace od přístupu ke konkrétní knihovně  Přístup k pamětově náročným položkám, jako obrázky nebo grafika  Oddálení načítání zdrojů dokud nejsou potřeba  Možnost zrychlení aplikace

Proxy – příklad použití Příklad  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) Elegantní realizace řešení – PROXY

Prohlížeč obrázků Interface Image { void showImage() ; Size getSize(); }; Interface Image { void showImage() ; Size getSize(); }; class RealImage implements Image { public RealImage(fileName) { // skutecne nacitani obrazku // pomale loadImage(fileName); } public void showImage() { // renderovani obrazku } public Size getSize(fileName) { return new Size(data.cols, data.rows); } }; class RealImage implements Image { public RealImage(fileName) { // skutecne nacitani obrazku // pomale loadImage(fileName); } public void showImage() { // renderovani obrazku } public Size getSize(fileName) { return new Size(data.cols, data.rows); } }; public class ImageProxy : Image { String fileName; Image proxifiedImage; public ImageProxy(String fileName){ this.fileName = fileName; } public void showImage() { if (proxifiedImage == null) proxifiedImage = new RealImage(fileName); proxifiedImage.showImage(); } public Size getSize() { return HdrInfo.loadSize(fileName); } }; public class ImageProxy : Image { String fileName; Image proxifiedImage; public ImageProxy(String fileName){ this.fileName = fileName; } public void showImage() { if (proxifiedImage == null) proxifiedImage = new RealImage(fileName); proxifiedImage.showImage(); } public Size getSize() { return HdrInfo.loadSize(fileName); } }; Interface Proxy RealObject ImageProxy img1 = new ImageProxy(“img1.png”); ImageProxy img2 = new ImageProxy(“img2.png”); Img1.showImage();//z disku Img1.showImage();//z paměti Img2.showImage();//z disku ImageProxy img1 = new ImageProxy(“img1.png”); ImageProxy img2 = new ImageProxy(“img2.png”); Img1.showImage();//z disku Img1.showImage();//z paměti Img2.showImage();//z disku

Proxy - typy Virtual proxy  Vytváření objektů až v případě potřeby („load on demand“)  Transparentní provádění optimalizací (Cache proxy, Copy-on-write proxy) Remote proxy  Lokální zástupce vzdáleného objektu  Middleware: Java RMI, CORBA, XML/SOAP,... Protection proxy  Kontrola či omezování přístupů ke skutečnému objektu Synchronization proxy  Synchronizace vláken před voláním metod objektu Smart pointers/reference  Náhrada běžných ukazatelů (např. v C++) či referencí  Počítání referencí a automatické odalokování  Načítání do paměti při první dereferenci

Proxy – implementace Abstraktní proxy pro subjekty více typů  Pracuje-li se skutečným objektem jen pomocí rozhraní, může být typově nezávislá  Konkrétní instanci lze přiřadit např. v konstruktoru: Přetížení „->“ v C++ jako proxy  Stejná obsluha všech požadavků  Virtual proxy – ImagePtr, Real Subject – Image Implementace: Image* ImagePtr::LoadImage () { if (image_ == 0) image_ = LoadFile(_imageFile); return image_; } Image* ImagePtr::operator-> () { return LoadImage(); } Image& ImagePtr::operator* () { return *LoadImage(); } Použití: ImagePtr image = ImagePtr("ImgFileName"); image->Draw(Point(0, 0)); // (image.operator->())->Draw(Point(0, 0)) Graphic * g = new GraphicProtectionProxy(new Image);

Protection proxy - Java Řešení problému absence const v Javě:  Omezená rozhraní  Protection proxies (wrappers)‏ public interface java.util.Collection { boolean contains(Object o); boolean add(E o); //.... } public class UnmodifiableCollection implements Collection { private Collection c; public UnmodifiableCollection(Collection c) { this.c = c; } public boolean contains(Object o) { return c.contains(o); } public boolean add(E o) { throw new UnsupportedOperationException(); } //... } public static Collection unmodifiableCollection(Collection c) { return new UnmodifiableCollection (c); } // vytvoření seznamu List list = new ArrayList(); // příprava dat apod. // nyní se vytvoří neměnná kolekce Collection c = Collections.unmodifiableCollection(list);

Synchronization proxy - Java Standardní kolekce nejsou v Javě thread-safe  Umožňuje vyšší rychlost Volitelné řešení: synchronization proxies (wrappers)  Myšlenkově identické s předchozí unmodifiableCollection public class SynchronizedCollection implements Collection { private Collection c; private Object myLock; public SynchronizedCollection(Collection c) { this.c = c; } public boolean contains(Object o) { synchronized(myLock) {return c.contains(o);} } public boolean add(E o) { synchronized(myLock) {return c.add(o);} } //... } public static Collection synchronizedCollection(Collection c) { return new SynchronizedCollection (c); } // typický příklad List l = Collections.synchronizedList(new LinkedList());

Známé využití - Java RMI (Remote Method Invocation) public interface HelloIntf extends Remote { public String sayHello() throws RemoteException; } public class Hello extends UnicastRemoteObject implements HelloIntf { public Hello() throws RemoteException { } public String sayHello() throws RemoteException { return "Hello World!"; } public class Server { public static void main(String[] args) { try { Naming.rebind("Hello", new Hello()); } catch (Exception e) { } } public class Client { public static void main(String[] args) { try { HelloIntf hello =(HelloIntf)Naming.lookup("/localhost/Hello"); System.out.println(hello.sayHello()); } catch (Exception e) { } }

Proxy +/- Vý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)

Proxy – související NV Adapter  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 či může být např. na jiném počítači