SlideShare ist ein Scribd-Unternehmen logo
1 von 21
Lezione 22: Design
    Pattern Strutturali
       Corso di Ingegneria del Software
     Laurea Magistrale in Ing. Informatica
       Università degli Studi di Salerno



1
Outline

    ✦ Design Pattern Strutturali
     •   Adapter (class)

     •   Adapter (object)

     •   Composite

     •   Decorator

     •   Facade

     •   Proxy



2
Design Pattern Strutturali




3
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
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
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
Adapter (class)
    ✦ Esempio di struttura




7
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
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
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
Adapter (object)
     ✦ Esempio di struttura




11
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
Adapter (object)
     ✦ Esempio




13
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
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
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
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
Composite
     ✦ Esempio di struttura




18
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
Composite
     ✦ Esempio




20
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

Weitere ähnliche Inhalte

Was ist angesagt?

Lezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme ProgrammingLezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme ProgrammingAndrea Della Corte
 
Lezione 11: Accesso ai RESTful Web Services in Java
Lezione 11: Accesso ai RESTful Web Services in JavaLezione 11: Accesso ai RESTful Web Services in Java
Lezione 11: Accesso ai RESTful Web Services in JavaAndrea Della Corte
 
Lezione 6: Remote Method Invocation
Lezione 6: Remote Method InvocationLezione 6: Remote Method Invocation
Lezione 6: Remote Method InvocationAndrea Della Corte
 
Lezione 10: Web Service in Java (2)
Lezione 10: Web Service in Java (2)Lezione 10: Web Service in Java (2)
Lezione 10: Web Service in Java (2)Andrea Della Corte
 
Lezione 9: Web Service in Java
Lezione 9: Web Service in JavaLezione 9: Web Service in Java
Lezione 9: Web Service in JavaAndrea Della Corte
 
Non solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitNon solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitMaurizio Delmonte
 
Design pattern template method
Design pattern template methodDesign pattern template method
Design pattern template methodNelson Firmani
 
Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)lukebonham
 
Closure Visto Da Vicino
Closure Visto Da VicinoClosure Visto Da Vicino
Closure Visto Da Vicinodavide ficano
 
Java SE 5. Capitolo 01: Base
 Java SE 5. Capitolo 01: Base Java SE 5. Capitolo 01: Base
Java SE 5. Capitolo 01: Basebobpuley
 

Was ist angesagt? (20)

Design Pattern
Design PatternDesign Pattern
Design Pattern
 
Corso Java
Corso JavaCorso Java
Corso Java
 
Corso Java 2 - AVANZATO
Corso Java 2 - AVANZATOCorso Java 2 - AVANZATO
Corso Java 2 - AVANZATO
 
Lezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme ProgrammingLezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme Programming
 
Lezione 11: Accesso ai RESTful Web Services in Java
Lezione 11: Accesso ai RESTful Web Services in JavaLezione 11: Accesso ai RESTful Web Services in Java
Lezione 11: Accesso ai RESTful Web Services in Java
 
Lezione 6: Remote Method Invocation
Lezione 6: Remote Method InvocationLezione 6: Remote Method Invocation
Lezione 6: Remote Method Invocation
 
Java OCA teoria 1
Java OCA teoria 1Java OCA teoria 1
Java OCA teoria 1
 
Lezione 10: Web Service in Java (2)
Lezione 10: Web Service in Java (2)Lezione 10: Web Service in Java (2)
Lezione 10: Web Service in Java (2)
 
Corso Javascript
Corso JavascriptCorso Javascript
Corso Javascript
 
Lezione 9: Web Service in Java
Lezione 9: Web Service in JavaLezione 9: Web Service in Java
Lezione 9: Web Service in Java
 
Non solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitNon solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
 
Corso progettazione
Corso progettazioneCorso progettazione
Corso progettazione
 
Java OCA teoria 4
Java OCA teoria 4Java OCA teoria 4
Java OCA teoria 4
 
Design pattern template method
Design pattern template methodDesign pattern template method
Design pattern template method
 
C# Language Evolution
C# Language EvolutionC# Language Evolution
C# Language Evolution
 
Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)
 
Closure Visto Da Vicino
Closure Visto Da VicinoClosure Visto Da Vicino
Closure Visto Da Vicino
 
Corso Java 3 - WEB
Corso Java 3 - WEBCorso Java 3 - WEB
Corso Java 3 - WEB
 
Eclipse and Java
Eclipse and JavaEclipse and Java
Eclipse and Java
 
Java SE 5. Capitolo 01: Base
 Java SE 5. Capitolo 01: Base Java SE 5. Capitolo 01: Base
Java SE 5. Capitolo 01: Base
 

Ähnlich wie Lezione 6a: Design Pattern Strutturali

Programmazione funzionale e Stream in Java
Programmazione funzionale e Stream in JavaProgrammazione funzionale e Stream in Java
Programmazione funzionale e Stream in JavaCristina Attori
 
Corso Object Oriented Analysis and Design
Corso Object Oriented Analysis and DesignCorso Object Oriented Analysis and Design
Corso Object Oriented Analysis and DesignK-Tech Formazione
 
Repository pattern slides v1.1
Repository pattern slides v1.1Repository pattern slides v1.1
Repository pattern slides v1.1Christian Nastasi
 
Dependency injection: the good parts
Dependency injection:  the good partsDependency injection:  the good parts
Dependency injection: the good partsMassimo Groppelli
 
Sencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codiceSencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codiceGiuseppe Toto
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptSinergia Totale
 
Programmazione a oggetti tramite la macchina del caffé (pt. 3)
Programmazione a oggetti tramite la macchina del caffé (pt. 3)Programmazione a oggetti tramite la macchina del caffé (pt. 3)
Programmazione a oggetti tramite la macchina del caffé (pt. 3)Marcello Missiroli
 
Design patterns - parte 1
Design patterns - parte 1Design patterns - parte 1
Design patterns - parte 1Fabio Armani
 
Delphi & Dintorni Webinar - Diventa un mago del Testing
Delphi & Dintorni Webinar - Diventa un mago del TestingDelphi & Dintorni Webinar - Diventa un mago del Testing
Delphi & Dintorni Webinar - Diventa un mago del TestingMarco Breveglieri
 
Introduzione a TypeScript
Introduzione a TypeScriptIntroduzione a TypeScript
Introduzione a TypeScriptSinergia Totale
 
Slide evento Code Refactoring JavaScript
Slide evento Code Refactoring JavaScriptSlide evento Code Refactoring JavaScript
Slide evento Code Refactoring JavaScriptLuca Pagliaro
 
WhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessiWhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessiMarco Gasparetto
 
Lezione 08 - Iterator
Lezione 08 - IteratorLezione 08 - Iterator
Lezione 08 - IteratorMarco Bianchi
 
PowerMock TDD User Group Milano
PowerMock TDD User Group MilanoPowerMock TDD User Group Milano
PowerMock TDD User Group MilanoMassimo Groppelli
 
Idiomatic Domain Driven Design
Idiomatic Domain Driven DesignIdiomatic Domain Driven Design
Idiomatic Domain Driven DesignAndrea Saltarello
 

Ähnlich wie Lezione 6a: Design Pattern Strutturali (20)

pattern
patternpattern
pattern
 
Programmazione funzionale e Stream in Java
Programmazione funzionale e Stream in JavaProgrammazione funzionale e Stream in Java
Programmazione funzionale e Stream in Java
 
Corso Object Oriented Analysis and Design
Corso Object Oriented Analysis and DesignCorso Object Oriented Analysis and Design
Corso Object Oriented Analysis and Design
 
Vaadin7
Vaadin7Vaadin7
Vaadin7
 
OOP with C#
OOP with C#OOP with C#
OOP with C#
 
Repository pattern slides v1.1
Repository pattern slides v1.1Repository pattern slides v1.1
Repository pattern slides v1.1
 
Dependency injection: the good parts
Dependency injection:  the good partsDependency injection:  the good parts
Dependency injection: the good parts
 
Sencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codiceSencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codice
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScript
 
Programmazione a oggetti tramite la macchina del caffé (pt. 3)
Programmazione a oggetti tramite la macchina del caffé (pt. 3)Programmazione a oggetti tramite la macchina del caffé (pt. 3)
Programmazione a oggetti tramite la macchina del caffé (pt. 3)
 
Design patterns - parte 1
Design patterns - parte 1Design patterns - parte 1
Design patterns - parte 1
 
Delphi & Dintorni Webinar - Diventa un mago del Testing
Delphi & Dintorni Webinar - Diventa un mago del TestingDelphi & Dintorni Webinar - Diventa un mago del Testing
Delphi & Dintorni Webinar - Diventa un mago del Testing
 
Introduzione a TypeScript
Introduzione a TypeScriptIntroduzione a TypeScript
Introduzione a TypeScript
 
Slide evento Code Refactoring JavaScript
Slide evento Code Refactoring JavaScriptSlide evento Code Refactoring JavaScript
Slide evento Code Refactoring JavaScript
 
WhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessiWhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessi
 
Lezione 08 - Iterator
Lezione 08 - IteratorLezione 08 - Iterator
Lezione 08 - Iterator
 
PowerMock TDD User Group Milano
PowerMock TDD User Group MilanoPowerMock TDD User Group Milano
PowerMock TDD User Group Milano
 
Corso Java 1 - BASE
Corso Java 1 - BASECorso Java 1 - BASE
Corso Java 1 - BASE
 
introduzione a symfony 2
introduzione a symfony 2 introduzione a symfony 2
introduzione a symfony 2
 
Idiomatic Domain Driven Design
Idiomatic Domain Driven DesignIdiomatic Domain Driven Design
Idiomatic Domain Driven Design
 

Mehr von Andrea Della Corte

Lezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web ServiceLezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web ServiceAndrea Della Corte
 
Lezione 7: Remote Method Invocation e SSL
Lezione 7: Remote Method Invocation e SSLLezione 7: Remote Method Invocation e SSL
Lezione 7: Remote Method Invocation e SSLAndrea Della Corte
 
Lezione12: Autenticazione e gestione delle sessioni in REST
Lezione12: Autenticazione e gestione delle sessioni in RESTLezione12: Autenticazione e gestione delle sessioni in REST
Lezione12: Autenticazione e gestione delle sessioni in RESTAndrea Della Corte
 
Lezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDPLezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDPAndrea Della Corte
 

Mehr von Andrea Della Corte (10)

Lezione 1: I metodi agili
Lezione 1: I metodi agiliLezione 1: I metodi agili
Lezione 1: I metodi agili
 
Lezione 5: Socket SSL/ TLS
Lezione 5: Socket SSL/ TLSLezione 5: Socket SSL/ TLS
Lezione 5: Socket SSL/ TLS
 
Lezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web ServiceLezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web Service
 
Lezione 7: Remote Method Invocation e SSL
Lezione 7: Remote Method Invocation e SSLLezione 7: Remote Method Invocation e SSL
Lezione 7: Remote Method Invocation e SSL
 
Lezione12: Autenticazione e gestione delle sessioni in REST
Lezione12: Autenticazione e gestione delle sessioni in RESTLezione12: Autenticazione e gestione delle sessioni in REST
Lezione12: Autenticazione e gestione delle sessioni in REST
 
Lezione 1: I/O in Java
Lezione 1: I/O in JavaLezione 1: I/O in Java
Lezione 1: I/O in Java
 
Lezione 3: Connessioni TCP
Lezione 3: Connessioni TCPLezione 3: Connessioni TCP
Lezione 3: Connessioni TCP
 
Lezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDPLezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDP
 
Tutorial Matlab 2009
Tutorial Matlab 2009Tutorial Matlab 2009
Tutorial Matlab 2009
 
Introduzione ai CRM
Introduzione ai CRMIntroduzione ai CRM
Introduzione ai CRM
 

Kürzlich hochgeladen

Ticonzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaTiconzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaPierLuigi Albini
 
Esperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superioreEsperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superiorevaleriodinoia35
 
Storia dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptxStoria dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptxOrianaOcchino
 
Corso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativoCorso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativovaleriodinoia35
 
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaXIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaStefano Lariccia
 
lezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldilezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldivaleriodinoia35
 
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaXI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaStefano Lariccia
 
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaIL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaRafael Figueredo
 
La seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieLa seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieVincenzoPantalena1
 

Kürzlich hochgeladen (9)

Ticonzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaTiconzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza cultura
 
Esperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superioreEsperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superiore
 
Storia dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptxStoria dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptx
 
Corso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativoCorso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativo
 
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaXIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
 
lezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldilezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldi
 
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaXI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
 
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaIL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
 
La seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieLa seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medie
 

Lezione 6a: Design Pattern Strutturali

  • 1. Lezione 22: Design Pattern Strutturali Corso di Ingegneria del Software Laurea Magistrale in Ing. Informatica Università degli Studi di Salerno 1
  • 2. Outline ✦ Design Pattern Strutturali • Adapter (class) • Adapter (object) • Composite • Decorator • Facade • Proxy 2
  • 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. 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. 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. Adapter (class) ✦ Esempio di struttura 7
  • 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. 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. 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. Adapter (object) ✦ Esempio di struttura 11
  • 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. Adapter (object) ✦ Esempio 13
  • 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. 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. 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. 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. Composite ✦ Esempio di struttura 18
  • 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. Composite ✦ Esempio 20
  • 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