Proxy (pełnomocnik) Cel: Zastosowanie: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego.



Podobne dokumenty
Decorator (dekorator)

Remote Method Invocation 17 listopada 2010

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Prototype (prototyp) Cel: Przykład: Określenie rodzaju tworzonych obiektów poprzez wskazanie ich prototypu. Nowe instancje tworzymy kopiując prototyp.

Podejście obiektowe do budowy systemów rozproszonych

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Wywoływanie metod zdalnych

Systemy Rozproszone - Ćwiczenie 6

Aplikacje RMI

Remote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1

Wywoływanie metod zdalnych

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Builder (budowniczy) Cel: Przykład:

Aplikacje RMI Lab4

Wypożyczalnia VIDEO. Technologie obiektowe

Podejście obiektowe do budowy systemów rozproszonych

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Command (action, transaction, polecenie)

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Programowanie obiektowe i zdarzeniowe

Wzorce projektowe. dr inż. Marcin Pietroo

Wykład 4: Klasy i Metody

Aplikacja wielowątkowa prosty komunikator

Metody Metody, parametry, zwracanie wartości

Aplikacje RMI. Budowa aplikacji rozproszonych. Część 2.

Podstawy programowania obiektowego

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Tworzenie i wykorzystanie usług

Zaawansowane programowanie w C++ (PCP)

Programowanie obiektowe

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Programowanie obiektowe

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Singleton. Cel: Przykład: Zastosowanie: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej.

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu

Programowanie obiektowe i zdarzeniowe

Oprogramowanie systemów równoległych i rozproszonych Wykład 7

Plan wykładu CORBA. Cechy aplikacji rozproszonych. Aplikacje rozproszone

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Rozproszone systemy internetowe. Wprowadzenie. Koncepcja zdalnego wywołania procedury

Kurs WWW. Paweł Rajba.

Komponenty sterowane komunikatami

Konstruktor kopiujacy

Dokumentacja wstępna TIN. Rozproszone repozytorium oparte o WebDAV

Java: interfejsy i klasy wewnętrzne

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Instrukcja tworzenia aplikacji EE na bazie aplikacji prezentowanej na zajęciach lab.4 z PIO umożliwiająca przez sieć dostęp wielu użytkownikom.

WSNHiD, Programowanie 2, Lab. 3. Trwałość danych

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Projektowanie obiektowe oprogramowania Wykład 5 wzorce strukturalne Wiktor Zychla 2016

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Aplikacja wielow tkowa prosty komunikator

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

PARADYGMATY PROGRAMOWANIA Wykład 4

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Abstract Factory (fabryka abstrakcyjna)

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

UML a kod. C++, Java i C#

Programowanie obiektowe

Aplikacje w środowisku Java

Programowanie 2. Język C++. Wykład 3.

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Platformy Programistyczne Zagadnienia sieciowe i wątki

1 Atrybuty i metody klasowe

Programowanie rozproszone w języku Java

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Projektowanie Aplikacji Internetowych. Wzorce projektowe warstwy usług

Architektury Usług Internetowych. Laboratorium 3. Usługi w środowisku wielo-agentowym

Zad.30. Czy można utworzyć klasę, która implementuje oba interfejsy?

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Architektury Usług Internetowych. Laboratorium 5

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu.

Zaawansowane programowanie w C++ (PCP)

Dokumentacja do API Javy.

Klasy cd. Struktury Interfejsy Wyjątki

Programowanie Obiektowe Ćwiczenie 4

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Tworzenie i wykorzystanie usług sieciowych

Zdalne wywołanie procedur. Krzysztof Banaś Systemy rozproszone 1

Kurs programowania. Wykład 6. Wojciech Macyna. 7 kwietnia 2016

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

DYNAMICZNE PRZYDZIELANIE PAMIECI

Zaawansowane aplikacje WWW - laboratorium

Podstawy tworzenia aplikacji z wykorzystaniem języka Java ME ćwiczenia 2

Programowanie współbieżne i rozproszone

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Laboratorium 10 - Web Services

Stanowe komponenty sesyjne

Programowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Programowanie w języku Java

Aplikacje internetowe i rozproszone - laboratorium

Transkrypt:

Proxy (pełnomocnik) Cel: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego. Zastosowanie: Wszędzie tam, gdzie oczekujemy bardziej zaawansowanego odwołania do obiektu, niż zwykły wskaźnik czy referencja. Przykłady: zdalny proxy lokalna reprezentacja obiektu znajdującego się w innej przestrzeni adresowej (np. RMI), odpowiada za wysłanie żądań klienta i odebranie odpowiedzi ( ambasador ) wirtualny proxy tworzenie kosztownych obiektów na żądanie (np. ImageProxy), część danych może być przechowywana przez proxy ochronny proxy kontroluje dostęp do obiektu, dzięki temu może wyłączać pewne operacje lub przeprowadzać kontrolę ich wykonywania sprytne referencje zastępują tradycyjny wskaźnik, aby podejmować dodatkowe akcje, gdy obiekt jest udostępniany: licznik referencji (aby obiekt mógł być usunięty, gdy osiągnie on 0) lockowanie obiektów (przy dostępie współbieżnym) copy-on-write (zapobiega tworzeniu zbędnych kopii) 1/10

2/10 Struktura: Struktura dynamiczna:

Składniki: Proxy Przechowuje referencję do rzeczywistego obiektu (RealSubject). Ma ten sam interfejs, co RealSubject, dzięki czemu może go zastąpić. Kontroluje dostęp do rzeczywistego obiektu; może też odpowiadać za jego tworzenie i usuwanie. Inne możliwe odpowiedzialności: zdalny proxy będzie odpowiadał za wysyłanie żądań do innej przestrzeni adresowej może wymagać to np. nawiązania połączenia i wysyłania/ odbierania zakodowanych danych korzystając z określonego protokołu. wirtualny proxy może przechowywać część danych rzeczywistego obiektu lub samodzielnie spełniać część żądań (np. ImageProxy może przechowywać i udostępniać rozmiary rzeczywistego obrazka). ochronny proxy może kontrolować możliwość wykonania danego żądania (np. możliwość kasowania rekordów przez danego użytkownika). Proxy oddelegowuje żądania do rzeczywistego obiektu (RealSubject). Subject Interfejs wspólny dla RealSubject i Proxy dzięki temu Proxy może być używany tam, gdzie klient oczekuje RealSubject. RealSubject Definiuje rzeczywisty obiekt, kryjący się za Proxy. 3/10

4/10 Implementacja: interface Subject { void request(); void request(double value1, double value2); double request(int data); class RealSubject implements Subject {... class Proxy implements Subject { private RealSubject realsubject; public Proxy() { realsubject = new RealSubject(); public void request() { realsubject.request(); public void request(double value1, double value2) { realsubject.request(value1, value2); public double request(int data) { return realsubject.request(data); //... Client... Subject subject = new Proxy(); subject.request(); subject.request(subject.request(10), 2.5);

Zdalny proxy interface MailBox { void send(string message); String receive(string message); class MailBoxProxy implements MailBox { private String host; public MailBox(String host) { this.host = host; void send(string message) { try { Socket connection = new Socket(host); OutputStream os = connection.getoutputstream(); ObjectOutputStream oos; oos = new ObjectOutputStream(os); oos.writeobject(message); connection.close(); catch (Exception ex) { /*...*/ String receive(string message) { /*...*/ 5/10

Wirtualny proxy interface Image { int width(); int height(); void setpixel(int x, int y, Color color); Color getpixel(int x, int y); class ImageProxy implements Image { private RealImage realimage = null; private int width, height; public ImageProxy(int width, int height) { this.width = width; this.height = height; public int width() { return width; public int height() { return height; public void setpixel(int x, int y, Color color) { if(realimage == null) realimage = new RealImage(width, height); realimage.setpixel(x, y, color); public Color getpixel(int x, int y) { /*... */ 6/10

Ochronny proxy interface Database { Result addrecord(record rec); Result removerecord(record rec); Result changerecord(record rec); class DatabaseProxy implements Database { private RealDatabase realdatabase; private DatabaseProxy() { realdatabase = new RealDatabase(); public Result addrecord(record rec) { if(user.currentuser().has(userprivileges.add)) return realdatabase.addrecord(rec); else return Result.ERROR; public Result removerecord(record rec) { return Result.ERROR; public Result changerecord(record rec) { /*... */ 7/10

Sprytne referencje (licznik referencji w C++) template<class E> class SmartPointer { E* realsubject; int* licznik; public: SmartPointer(E* s) { s = s; licznik = new int(1); SmartPointer(const SmartPointer& sp) { realsubject = sp.realsubject; licznik = sp.licznik; ++(*licznik); ~SmartPointer() { if(--(*licznik) == 0) delete realsubject; E* operator->() { return realsubject; ; int main() { SmartPointer<Stos> p1 = new Stos(10); p1->push(3); p1->push(7); if ( /*... */ ) { SmartPointer<Stos> p2 = p1; p2->pop(); /*... */ return 0; 8/10

9/10 Sprytne referencje (copy-on-write) interface Subject { int readoperation(); void writeoperation(int value); class Proxy implements Subject { private RealSubject realsubject; private Licznik licznik; public Proxy() { realsubject = new RealSubject(); licznik = new Licznik(1); public Proxy(Proxy p) { // kopia płytka realsubject = p.realsubject; licznik = p.licznik; licznik.increment(); public int readoperation() { return realsubject.readoperation();

10/10 Sprytne referencje (copy-on-write) public void writeoperation(int value) { if(licznik.value() > 1) { licznik.decrement(); // kopia głęboka realsubject = realsubject.clone(); licznik = new Licznik(1); realsubject.writeoperation(value); Powiązania: Adapter używa podobnej struktury, by zmieniać interfejs obiektów Dekorator zbliżony w implementacji, choć stawia nacisk na inne cele: dodawanie funkcjonalności do obiektu. Niektóre rodzaje proxy (np. ochronny proxy) mogą być realizowane jako dekoratory.