Ingegneria del Software Presentazione del pattern Proxy 1 Il pattern Proxy (1/6) • Nome Proxy • Synopsis Pattern molto generale che occorre in molti altri pattern, ma raramente nella sua forma pura. Il pattern Proxy permette l’utilizzo indiretto di un oggetto in modo trasparente al client. Con il termine trasparente si evidenzia il fatto che il client non si accorge di utilizzare un oggetto che si frappone tra lui e quello a cui è effettivamente interessato. Ingegneria del Software - A.A. 2003/2004 Il pattern Proxy (2/6) • Context Un oggetto proxy è un oggetto che riceve chiamate di metodi per conto di un altro oggetto. :Client Le motivazioni che fanno nascere l’esigenza di frapporre tra client e server un oggetto proxy determinano il nome specifico del pattern (cfr. Related Pattern). Esempio d’uso: HTTP Proxy - un intermediario fra web browser e http server - caching di documenti a cui accedono frequentemente diversi browser Ingegneria del Software - A.A. 2003/2004 2 Il pattern Proxy (3/6) • Forces I motivi che conducono alla definizione di una soluzione generica sono legati a politiche di gestione dell’oggetto che si trova “dietro” il proxy. Ad esempio: - evitare di accedere direttamente (location transparency) - garantire sicurezza - garantire efficienza -… La gestione di un servizio deve essere fornita in modo tale che risulti trasparente ai client. Ingegneria del Software - A.A. 2003/2004 Il pattern Proxy (4/6) Solution Il client richiede il servizio attraverso il proxy 1 2 Il proxy esegue le operazioni relative alla politica di gestione degli oggetti Service 3 Eventualmente il proxy richiama il corrispondente metodo dell’oggetto Service Ingegneria del Software - A.A. 2003/2004 3 Il pattern Proxy (5/6) • Consequences - Dipendono dalla particolare politica di gestione adottata dal proxy • Implementation - Banale • Code example - Nessuno Ingegneria del Software - A.A. 2003/2004 Il pattern Proxy (6/6) • Related Patterns 1. Access Proxy 2. Broker/Proxy 3. Virtual Proxy 4. Remote Proxy Presentati sinteticamente nelle prossime slide 5. Façade 6. Decorator Analizzati come scheda di [Grand98] Ingegneria del Software - A.A. 2003/2004 4 Il pattern Access Proxy 1. Access Proxy (non documentato su Patterns in Java) Il pattern Access Proxy viene utilizzato per far rispettare una politica di sicurezza nell’accesso ad oggetti che erogano determinati servizi. Esempio: Il servizio può essere erogato ad un massimo di n client contemporaneamente :Client 1 doIt() :AccessProxy 3 doIt() :Service 2 if (actualClient<=n) service.doIt() else // messaggio di errore Ingegneria del Software - A.A. 2003/2004 Il pattern Broker/Proxy 2. Broker [non documentato su Grand98] Il pattern Proxy è a volte usato con il pattern Broker per fornire un sistema trasparente finalizzato al ridirezionamento di una richiesta di servizio verso un service object selezionato dall’oggetto Broker/Proxy. Esempio: Il Broker/Proxy ridireziona i client con una politica Round Robin sulle istanze Service multithread disponibili :Service :Client 1 doIt() :Broker/Proxy 3 doIt() 2 :Service :Service Individuazione del Service object successivo Ingegneria del Software - A.A. 2003/2004 5 Il pattern Virtual Proxy 3. Virtual Proxy [Larman98 – documentato su Grand98] Usato per creare l’illusione che l’oggetto che eroga un servizio esista anche se non è ancora stato istanziato. Ciò è utile quando la creazione dell’oggetto è costosa e il servizio potrebbe non essere necessario. Un Virtual Proxy si frappone tra il client e l’oggetto Service ritardando la creazione di quest’ultimo al momento dell’effettiva richiesta di servizio. Esempio: Un programma per la visualizzazione di testi deve gestire informazioni riguardanti file. Il programma è in grado di visualizzare il nome di un file, il testo completo, o trovare e visualizzare una singola riga. Queste informazioni sono racchiuse all’interno di un unico oggetto… Ingegneria del Software - A.A. 2003/2004 Il pattern Remote Proxy 4. Remote Proxy [non documentato su Grand98] Usato per nascondere il fatto che il service object sia in esecuzione su una macchina diversa da quella su cui è in esecuzione il client. In questo pattern il proxy viene chiamato stub. Esempio: La Remote Method Invocation (RMI) che consente l’interazione di oggetti Java distribuiti. Ingegneria del Software - A.A. 2003/2004 6 Domande? Ingegneria del Software - A.A. 2003/2004 7