Ingegneria del Software
Presentazione del pattern
          Proxy
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
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     1
         richiede
        il servizio
        attraverso
          il proxy

                                  2
  Il proxy esegue le operazioni                                    3
 relative alla politica di gestione
       degli oggetti Service                    Eventualmente il proxy richiama il
                                               corrispondente metodo dell’oggetto
                                                            Service

                        Ingegneria del Software - A.A. 2003/2004
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            Presentati sinteticamente
       3. Virtual Proxy             nelle prossime slide
       4. Remote Proxy

       5. Façade                   Analizzati come scheda
       6. Decorator                     di [Grand98]




                      Ingegneria del Software - A.A. 2003/2004
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
                  1                                         3
  :Client                       :AccessProxy                       :Service
               doIt()                                     doIt()
                                      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
                 1                                           3
  :Client                       :Broker/Proxy                       :Service
              doIt()                                       doIt()
                                       2                            :Service
                           Individuazione del
                             Service object
                               successivo
                    Ingegneria del Software - A.A. 2003/2004
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
Domande?




Ingegneria del Software - A.A. 2003/2004

Lezione 05 - Proxy

  • 1.
  • 2.
  • 3.
    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
  • 4.
    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
  • 5.
    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
  • 6.
    Il pattern Proxy(4/6) Solution Il client 1 richiede il servizio attraverso il proxy 2 Il proxy esegue le operazioni 3 relative alla politica di gestione degli oggetti Service Eventualmente il proxy richiama il corrispondente metodo dell’oggetto Service Ingegneria del Software - A.A. 2003/2004
  • 7.
    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
  • 8.
    Il pattern Proxy(6/6) • Related Patterns 1. Access Proxy 2. Broker/Proxy Presentati sinteticamente 3. Virtual Proxy nelle prossime slide 4. Remote Proxy 5. Façade Analizzati come scheda 6. Decorator di [Grand98] Ingegneria del Software - A.A. 2003/2004
  • 9.
    Il pattern AccessProxy 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 1 3 :Client :AccessProxy :Service doIt() doIt() 2 if (actualClient<=n) service.doIt() else // messaggio di errore Ingegneria del Software - A.A. 2003/2004
  • 10.
    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 1 3 :Client :Broker/Proxy :Service doIt() doIt() 2 :Service Individuazione del Service object successivo Ingegneria del Software - A.A. 2003/2004
  • 11.
    Il pattern VirtualProxy 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
  • 12.
    Il pattern RemoteProxy 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
  • 13.