Lezione 22: Design
    Pattern Strutturali
       Corso di Ingegneria del Software
     Laurea Magistrale in Ing. Informat...
Outline

    ✦ Design Pattern Strutturali
     •   Adapter (class)

     •   Adapter (object)

     •   Composite

     • ...
Design Pattern Strutturali




3
Design Pattern Strutturali

    ✦ Riguardano il modo in cui più oggetti
      sono collegati tra di loro per formare
     ...
Adapter (class)


    ✦ Il problema
     •   occorre utilizzare una classe già disponibile
         (Adaptee) insieme a un...
Adapter (class)


    ✦ Soluzione
     •   Si crea una nuova classe (Adapter) che
         implementa l’interfaccia Target...
Adapter (class)
    ✦ Esempio di struttura




7
Adapter (class)
    ✦ Conseguenze
     •   se Target non è un’interfaccia pura (“interface” in
         Java), è necessari...
Adapter (object)


    ✦ Il problema
     •   occorre utilizzare una classe già disponibile
         (Adaptee) insieme a u...
Adapter (object)

     ✦ Soluzione
      •   Si crea una nuova classe (Adapter) che implementa
          l’interfaccia Tar...
Adapter (object)
     ✦ Esempio di struttura




11
Adapter (object)
     ✦ Conseguenze
      •   l’Adapter può essere utilizzato per oggetti della
          classe Adaptee e...
Adapter (object)
     ✦ Esempio




13
Adapter (object)

     ✦ Soluzione (variante)
      •   in linguaggi come Java, l’Adapter può essere
          realizzato ...
Adapter (object)

     ✦ Esempio
      •   Gestione degli eventi in Java 1.1 e successivi (es.
          ActionListener, M...
Composite

     ✦ Il problema
      •   il sistema deve gestire oggetti (Component) che
          possono essere sia ogget...
Composite

     ✦ Soluzione
      •   Si definisce una classe Composite che implementa
          l’interfaccia di Componen...
Composite
     ✦ Esempio di struttura




18
Composite

     ✦ Conseguenze
      •   semplifica il client (nascondendo la differenza tra
          componenti semplici ...
Composite
     ✦ Esempio




20
Composite


     ✦ Esempio
      •   la gerarchia di componenti grafici in AWT
          ‣   ogni componente grafico deriv...
Upcoming SlideShare
Loading in...5
×

Lezione 6a: Design Pattern Strutturali

1,646

Published on

http://bizarro.iobloggo.com

✦ Design Pattern Strutturali
• Adapter (class)
• Adapter (object)
• Composite
• Decorator
• Facade
• Proxy

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,646
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Lezione 6a: Design Pattern Strutturali

  1. 1. Lezione 22: Design Pattern Strutturali Corso di Ingegneria del Software Laurea Magistrale in Ing. Informatica Università degli Studi di Salerno 1
  2. 2. Outline ✦ Design Pattern Strutturali • Adapter (class) • Adapter (object) • Composite • Decorator • Facade • Proxy 2
  3. 3. Design Pattern Strutturali 3
  4. 4. Design Pattern Strutturali ✦ Riguardano il modo in cui più oggetti sono collegati tra di loro per formare strutture complesse ✦ Usano l’ereditarietà e il polimorfismo per comporre interfacce diverse o implementazioni diverse di una stessa interfaccia 4
  5. 5. Adapter (class) ✦ Il problema • occorre utilizzare una classe già disponibile (Adaptee) insieme a una libreria di classi sviluppata in maniera indipendente; la libreria richiede una particolare interfaccia (Target) che non è presente nell’Adaptee 5
  6. 6. Adapter (class) ✦ Soluzione • Si crea una nuova classe (Adapter) che implementa l’interfaccia Target ed eredita l’implementazione della classe Adaptee • L’implementazione nell’Adapter dei metodi di Target richiama i metodi di Adaptee 6
  7. 7. Adapter (class) ✦ Esempio di struttura 7
  8. 8. Adapter (class) ✦ Conseguenze • se Target non è un’interfaccia pura (“interface” in Java), è necessaria l’ereditarietà multipla (non presente in tutti i linguaggi) • PROBLEMA: un Adapter adatta un singolo Adaptee; se c’è una gerarchia di Adaptee occorre realizzare una gerarchia parallela di Adapter • viene creato un unico oggetto che funge sia da Adaptee che da Target (basso overhead a tempo di esecuzione) • PROBLEMA: complicata la situazione in cui un Adaptee deve essere adattato a diversi Target 8
  9. 9. Adapter (object) ✦ Il problema • occorre utilizzare una classe già disponibile (Adaptee) insieme a una libreria di classi sviluppata in maniera indipendente; la libreria richiede una particolare interfaccia (Target) che non è presente nell’Adaptee 9
  10. 10. Adapter (object) ✦ Soluzione • Si crea una nuova classe (Adapter) che implementa l’interfaccia Target e contiene un riferimento a un oggetto della classe Adaptee (tipicamente passato al costruttore) • L’implementazione nell’Adapter dei metodi di Target richiama i metodi dell’oggetto Adaptee 10
  11. 11. Adapter (object) ✦ Esempio di struttura 11
  12. 12. Adapter (object) ✦ Conseguenze • l’Adapter può essere utilizzato per oggetti della classe Adaptee e di tutte le classi derivate • se necessario, è possibile cambiare a run time l’oggetto Adaptee associato a un Adapter • uno stesso oggetto Adaptee può essere associato a diversi Adapter per Target diversi • PROBLEMA: l’Adapter e l’Adaptee rimangono due oggetti distinti; questo comporta un overhead di memoria 12
  13. 13. Adapter (object) ✦ Esempio 13
  14. 14. Adapter (object) ✦ Soluzione (variante) • in linguaggi come Java, l’Adapter può essere realizzato come classe interna (eventualmente anonima) dell’Adaptee ‣ in questo modo l’Adapter ha accesso a tutte le componenti private della classe Adaptee ‣ potrebbe richiedere una modifica/estensione della classe Adaptee, quindi si tratta di una soluzione ibrida tra Class Adapter e Object Adapter ‣ si evita di aggiungere nuove classi visibili all’esterno 14
  15. 15. Adapter (object) ✦ Esempio • Gestione degli eventi in Java 1.1 e successivi (es. ActionListener, MouseAdapter etc.) ‣ per associare un’azione a un evento, tipicamente si crea un object adapter (usando una classe anonima) che implementa i metodi dell’interfaccia Listener appropriata richiamando metodi dell’oggetto che effettivamente eseguirà l’azione 15
  16. 16. Composite ✦ Il problema • il sistema deve gestire oggetti (Component) che possono essere sia oggetti semplici che oggetti complessi composti da più oggetti semplici (eventualmente in maniera gerarchica) • si vuole rendere il client che usa questi oggetti indipendente dal fatto che stia manipolando un componente semplice o un oggetto composto 16
  17. 17. Composite ✦ Soluzione • Si definisce una classe Composite che implementa l’interfaccia di Component, e mantiene al suo interno una collezione di Component • il Composite implementa i metodi di Component invocando a sua volta i metodi dei componenti da cui è costituito 17
  18. 18. Composite ✦ Esempio di struttura 18
  19. 19. Composite ✦ Conseguenze • semplifica il client (nascondendo la differenza tra componenti semplici e composti) • rende più semplice l’aggiunta di nuovi tipi di componenti • PROBLEMA: non è facile porre dei vincoli sulla composizione (es. un oggetto può contenere solo componenti di un certo tipo) 19
  20. 20. Composite ✦ Esempio 20
  21. 21. Composite ✦ Esempio • la gerarchia di componenti grafici in AWT ‣ ogni componente grafico deriva da java.awt.Component ‣ la classe java.awt.Container definisce un Component che può contenere altri componenti (es. Window) 21

×