SlideShare una empresa de Scribd logo
1 de 22
Descargar para leer sin conexión
Ingegneria del Software
Introduzione al pattern…
Esempio introduttivo (1/3)



• Si pensi ad un modello di
  oggetti che rappresenta gli
  impiegati (Employee) di una
  azienda. Tra gli impiegati
  esistono , ad esempio, gli
  Ingegneri (Engineer) che
  implementano le operazioni
  definite per gli impiegati,
  secondo le proprie
  caratteristiche.


[GoF’s Design Patterns in Java
   di Franco Guidi Polanco]


                         Ingegneria del Software - A.A. 2003/2004
Esempio introduttivo (2/3)


• Il sistema comprende la possibilità di assegnare agli impiegati delle
  responsabilità:
  - un impiegato può diventare capoufficio
    (Administrative Manager)
  - ad un impiegato può essere assegnata la direzione di un progetto
    (Project Manager)

• Le responsabilità non sono esculenti tra di loro e possono essere
  assegnate più volte.

• Questi cambiamenti di tipologia di alcuni impiegati coinvolgono
  modifiche delle responsabilità definite per gli oggetti, alterandone le
  esistenti o aggiungendone nuove.



                       Ingegneria del Software - A.A. 2003/2004
Esempio introduttivo (3/3)

• Esempio di risultato atteso:




• E’ interessante definire un modo per aggiungere, ed eventualmente
  rimuovere, dinamicamente nuove responsabilità ad un oggetto
  specifico di tipo Employee.


                      Ingegneria del Software - A.A. 2003/2004
Presentazione del pattern
       Decorator
Il pattern Decorator (1/15)


•   Nome       Decorator [GoF95], conosciuto anche con il nome
               di pattern Wrapper.

•   Synopsis   Il pattern Decorator estende dinamicamente le
               funzionalità di un oggetto in maniera trasparente
               ai suoi client.

               GoF sintetizza il pattern Decorator in questo
               modo:

               “Attach additional responsabilities to an object
                dinamically. Decorators provide a flexible
                alternative to subclassing for extending
                functionality”


                     Ingegneria del Software - A.A. 2003/2004
Il pattern Decorator (2/15)

•    Context
    Rispetto all’ esempio                                   <<interface>>

    introduttivo:
    - Employee, specifica
    l’interfaccia degli impiegati a
    cui possono essere assegnate
    responsabilità dinamicamente
    - Engineer, implementa la
    classe di impiegati a cui
    possono essere affidate
    responsabilità
    - ResponsibleWorker,
    possiede il riferimento ad un
    oggetto Employee e ne
    implementa l’interfaccia
    - AdministratorManager e
    ProjectManager aggiungono
    nuove responsabilità
    all’Employee

                            Ingegneria del Software - A.A. 2003/2004
Il pattern Decorator (3/15)

• Code example
                                                 <<interface>>




                 Ingegneria del Software - A.A. 2003/2004
Il pattern Decorator (4/15)

                                               <<interface>>




    Ingegneria del Software - A.A. 2003/2004
Il pattern Decorator (5/15)


                                          <<interface>>




    Ingegneria del Software - A.A. 2003/2004
Il pattern Decorator (6/15)




    Ingegneria del Software - A.A. 2003/2004
Il pattern Decorator (7/15)




    Ingegneria del Software - A.A. 2003/2004
Il pattern Decorator (8/15)




    Ingegneria del Software - A.A. 2003/2004
Il pattern Decorator (9/15)




    Ingegneria del Software - A.A. 2003/2004
Il pattern Decorator (10/15)



                                            Project Manager
                                            Project Manager
                                             Administrative
                                               Manager
           Usa oggetti
Client                                               Engineer
         di tipo Employee




          Ingegneria del Software - A.A. 2003/2004
Il pattern Decorator (11/15)



•   Forces
              - E’ necessario estendere le funzionalità di una
                classe, ma ci sono ragioni per non farlo
                attraverso l’ereditarietà

              - E’ necessario aggiungere ed eventualmente
                rimuovere dinamicamente funzionalità ad un
                oggetto




                    Ingegneria del Software - A.A. 2003/2004
Il pattern Decorator (12/15)

• Solution: Gli attori sono:
- AbstractServiceIF
Specifica l’interfaccia degli
oggetti a cui possono essere
aggiunte funzionalità
dinamicamente
-ConcreteService
Implementa la classe a cui
possono essere aggiunte
funzionalità
- AbstractWrapper
Possiede il riferimento ad un
oggetto di tipo
AbstractServiceIF
e ne implementa l’interfaccia

- ConcreteWrapperX
Aggiungono nuove
responsabilità al
ConcreteService
                             Ingegneria del Software - A.A. 2003/2004
Il pattern Decorator (13/15)


•   Consequences

    - A differenza dell’ereditarietà, che determina la natura di
    tutte le istanze di una classe staticamente, il pattern
    Decorator permette di alterare dinamicamente ed
    individualmente il comportamento di oggetti aggiungendo e
    rimuovendo wrapper

    - Usando differenti combinazioni di pochi tipi di wrapper è
    possibile ottenere molti comportamenti diversi. Utilizzando
    l’ereditarietà è possibile ottenere lo stesso risultato solo
    estendendo una classe per ogni comportamento




                     Ingegneria del Software - A.A. 2003/2004
Il pattern Decorator (14/15)



- L’estrema flessibilità degli oggetti wrapper può essere
fonte di errore (combinazioni sbagliate, riferimenti circolari,
ecc.)

- Rispetto all’ereditarietà utilizzare il pattern Decorator
implica:
     - Usare meno classi (progettazione e implementazione
       semplificata)
     - Usare più oggetti (debugging più difficoltoso)




                  Ingegneria del Software - A.A. 2003/2004
Il pattern Decorator (15/15)


•   Implementation
    Nessuna informazione indispensabile

•   Java API usage
    Pattern molto utilizzato quando si lavora con GUI
    (cfr. The Design Pattern di JAMES W. COOPER)

•   Related Patterns
    – Delegation             - Filter
    – Strategy                 Il pattern Filter è una versione specializzata
                               di pattern Decoration specializzato nella
    – Template Method
                               manipolazione di Stream di dati.
                               Indizio: InputStream, BufferedReader, …


                       Ingegneria del Software - A.A. 2003/2004
Domande?




Ingegneria del Software - A.A. 2003/2004

Más contenido relacionado

Similar a Lezione 07 - Decorator

Lezione 06 - Façade
Lezione 06 - FaçadeLezione 06 - Façade
Lezione 06 - FaçadeMarco Bianchi
 
Lezione 02 - Delegation
Lezione 02 - DelegationLezione 02 - Delegation
Lezione 02 - DelegationMarco Bianchi
 
Lezione 04 - Factory method
Lezione 04 - Factory methodLezione 04 - Factory method
Lezione 04 - Factory methodMarco Bianchi
 
Design Pattern Strutturali
Design Pattern StrutturaliDesign Pattern Strutturali
Design Pattern StrutturaliRiccardo Cardin
 
Lezione 11 - Visitor
Lezione 11 - VisitorLezione 11 - Visitor
Lezione 11 - VisitorMarco Bianchi
 
Lezione 13 - Strategy
Lezione 13 - StrategyLezione 13 - Strategy
Lezione 13 - StrategyMarco Bianchi
 
Progettazione e realizzazione di un sistema software per il time logging
Progettazione e realizzazione di un sistema software per il time loggingProgettazione e realizzazione di un sistema software per il time logging
Progettazione e realizzazione di un sistema software per il time loggingVittoriano Muttillo
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptSinergia Totale
 
Acadevmy - Angular Overview
Acadevmy - Angular OverviewAcadevmy - Angular Overview
Acadevmy - Angular OverviewFrancesco Sciuti
 
Idiomatic Domain Driven Design
Idiomatic Domain Driven DesignIdiomatic Domain Driven Design
Idiomatic Domain Driven DesignAndrea Saltarello
 
Studio e implementazione di uno strumento di configurazione e visualizzazione...
Studio e implementazione di uno strumento di configurazione e visualizzazione...Studio e implementazione di uno strumento di configurazione e visualizzazione...
Studio e implementazione di uno strumento di configurazione e visualizzazione...Matteo Miotto
 
Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011Gian Maria Ricci
 
Lezione 09 - Abstract Factory
Lezione 09 - Abstract FactoryLezione 09 - Abstract Factory
Lezione 09 - Abstract FactoryMarco Bianchi
 
Lezione 00 - Introduzione ai Design Patterns
Lezione 00 - Introduzione ai Design PatternsLezione 00 - Introduzione ai Design Patterns
Lezione 00 - Introduzione ai Design PatternsMarco Bianchi
 
"Angular CLI: come gestire un progetto" by Mirko Porcu
"Angular CLI: come gestire un progetto" by Mirko Porcu"Angular CLI: come gestire un progetto" by Mirko Porcu
"Angular CLI: come gestire un progetto" by Mirko PorcuThinkOpen
 
Generazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptxGenerazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptxGiacomoZorzin
 
Introduzione al Domain Driven Design (DDD)
Introduzione al Domain Driven Design (DDD)Introduzione al Domain Driven Design (DDD)
Introduzione al Domain Driven Design (DDD)DotNetMarche
 
Introduzione a TypeScript
Introduzione a TypeScriptIntroduzione a TypeScript
Introduzione a TypeScriptSinergia Totale
 

Similar a Lezione 07 - Decorator (20)

Lezione 06 - Façade
Lezione 06 - FaçadeLezione 06 - Façade
Lezione 06 - Façade
 
Lezione 02 - Delegation
Lezione 02 - DelegationLezione 02 - Delegation
Lezione 02 - Delegation
 
Lezione 04 - Factory method
Lezione 04 - Factory methodLezione 04 - Factory method
Lezione 04 - Factory method
 
Design Pattern Strutturali
Design Pattern StrutturaliDesign Pattern Strutturali
Design Pattern Strutturali
 
Lezione 11 - Visitor
Lezione 11 - VisitorLezione 11 - Visitor
Lezione 11 - Visitor
 
Lezione 13 - Strategy
Lezione 13 - StrategyLezione 13 - Strategy
Lezione 13 - Strategy
 
Progettazione e realizzazione di un sistema software per il time logging
Progettazione e realizzazione di un sistema software per il time loggingProgettazione e realizzazione di un sistema software per il time logging
Progettazione e realizzazione di un sistema software per il time logging
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScript
 
Acadevmy - Angular Overview
Acadevmy - Angular OverviewAcadevmy - Angular Overview
Acadevmy - Angular Overview
 
Idiomatic Domain Driven Design
Idiomatic Domain Driven DesignIdiomatic Domain Driven Design
Idiomatic Domain Driven Design
 
Studio e implementazione di uno strumento di configurazione e visualizzazione...
Studio e implementazione di uno strumento di configurazione e visualizzazione...Studio e implementazione di uno strumento di configurazione e visualizzazione...
Studio e implementazione di uno strumento di configurazione e visualizzazione...
 
Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011
 
Lezione 09 - Abstract Factory
Lezione 09 - Abstract FactoryLezione 09 - Abstract Factory
Lezione 09 - Abstract Factory
 
LucianoZu_CV
LucianoZu_CVLucianoZu_CV
LucianoZu_CV
 
Lezione 00 - Introduzione ai Design Patterns
Lezione 00 - Introduzione ai Design PatternsLezione 00 - Introduzione ai Design Patterns
Lezione 00 - Introduzione ai Design Patterns
 
"Angular CLI: come gestire un progetto" by Mirko Porcu
"Angular CLI: come gestire un progetto" by Mirko Porcu"Angular CLI: come gestire un progetto" by Mirko Porcu
"Angular CLI: come gestire un progetto" by Mirko Porcu
 
Generazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptxGenerazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptx
 
Introduzione al Domain Driven Design (DDD)
Introduzione al Domain Driven Design (DDD)Introduzione al Domain Driven Design (DDD)
Introduzione al Domain Driven Design (DDD)
 
Introduzione a TypeScript
Introduzione a TypeScriptIntroduzione a TypeScript
Introduzione a TypeScript
 
Tesi di Laurea
Tesi di LaureaTesi di Laurea
Tesi di Laurea
 

Último

CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...Nguyen Thanh Tu Collection
 
Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.camillaorlando17
 
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptxProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptxlorenzodemidio01
 
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024IISGiovanniVallePado
 
Tosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxTosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxlorenzodemidio01
 
Una breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereUna breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereMarco Chizzali
 
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptxTeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptxteccarellilorenzo
 
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptxAdducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptxsasaselvatico
 
LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................giorgiadeascaniis59
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxlorenzodemidio01
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....giorgiadeascaniis59
 
TeccarelliLorenzo-i4stilidellapitturaromana.docx
TeccarelliLorenzo-i4stilidellapitturaromana.docxTeccarelliLorenzo-i4stilidellapitturaromana.docx
TeccarelliLorenzo-i4stilidellapitturaromana.docxteccarellilorenzo
 
Storia-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptxStoria-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptxteccarellilorenzo
 
Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................giorgiadeascaniis59
 
TeccarelliLorenzo-Mitodella.cavernaa.pdf
TeccarelliLorenzo-Mitodella.cavernaa.pdfTeccarelliLorenzo-Mitodella.cavernaa.pdf
TeccarelliLorenzo-Mitodella.cavernaa.pdfteccarellilorenzo
 
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxlorenzodemidio01
 
Presentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticaPresentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticanico07fusco
 

Último (17)

CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
 
Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.
 
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptxProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
 
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
 
Tosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxTosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptx
 
Una breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereUna breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opere
 
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptxTeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
 
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptxAdducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
 
LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
 
TeccarelliLorenzo-i4stilidellapitturaromana.docx
TeccarelliLorenzo-i4stilidellapitturaromana.docxTeccarelliLorenzo-i4stilidellapitturaromana.docx
TeccarelliLorenzo-i4stilidellapitturaromana.docx
 
Storia-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptxStoria-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptx
 
Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................
 
TeccarelliLorenzo-Mitodella.cavernaa.pdf
TeccarelliLorenzo-Mitodella.cavernaa.pdfTeccarelliLorenzo-Mitodella.cavernaa.pdf
TeccarelliLorenzo-Mitodella.cavernaa.pdf
 
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
 
Presentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticaPresentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informatica
 

Lezione 07 - Decorator

  • 3. Esempio introduttivo (1/3) • Si pensi ad un modello di oggetti che rappresenta gli impiegati (Employee) di una azienda. Tra gli impiegati esistono , ad esempio, gli Ingegneri (Engineer) che implementano le operazioni definite per gli impiegati, secondo le proprie caratteristiche. [GoF’s Design Patterns in Java di Franco Guidi Polanco] Ingegneria del Software - A.A. 2003/2004
  • 4. Esempio introduttivo (2/3) • Il sistema comprende la possibilità di assegnare agli impiegati delle responsabilità: - un impiegato può diventare capoufficio (Administrative Manager) - ad un impiegato può essere assegnata la direzione di un progetto (Project Manager) • Le responsabilità non sono esculenti tra di loro e possono essere assegnate più volte. • Questi cambiamenti di tipologia di alcuni impiegati coinvolgono modifiche delle responsabilità definite per gli oggetti, alterandone le esistenti o aggiungendone nuove. Ingegneria del Software - A.A. 2003/2004
  • 5. Esempio introduttivo (3/3) • Esempio di risultato atteso: • E’ interessante definire un modo per aggiungere, ed eventualmente rimuovere, dinamicamente nuove responsabilità ad un oggetto specifico di tipo Employee. Ingegneria del Software - A.A. 2003/2004
  • 7. Il pattern Decorator (1/15) • Nome Decorator [GoF95], conosciuto anche con il nome di pattern Wrapper. • Synopsis Il pattern Decorator estende dinamicamente le funzionalità di un oggetto in maniera trasparente ai suoi client. GoF sintetizza il pattern Decorator in questo modo: “Attach additional responsabilities to an object dinamically. Decorators provide a flexible alternative to subclassing for extending functionality” Ingegneria del Software - A.A. 2003/2004
  • 8. Il pattern Decorator (2/15) • Context Rispetto all’ esempio <<interface>> introduttivo: - Employee, specifica l’interfaccia degli impiegati a cui possono essere assegnate responsabilità dinamicamente - Engineer, implementa la classe di impiegati a cui possono essere affidate responsabilità - ResponsibleWorker, possiede il riferimento ad un oggetto Employee e ne implementa l’interfaccia - AdministratorManager e ProjectManager aggiungono nuove responsabilità all’Employee Ingegneria del Software - A.A. 2003/2004
  • 9. Il pattern Decorator (3/15) • Code example <<interface>> Ingegneria del Software - A.A. 2003/2004
  • 10. Il pattern Decorator (4/15) <<interface>> Ingegneria del Software - A.A. 2003/2004
  • 11. Il pattern Decorator (5/15) <<interface>> Ingegneria del Software - A.A. 2003/2004
  • 12. Il pattern Decorator (6/15) Ingegneria del Software - A.A. 2003/2004
  • 13. Il pattern Decorator (7/15) Ingegneria del Software - A.A. 2003/2004
  • 14. Il pattern Decorator (8/15) Ingegneria del Software - A.A. 2003/2004
  • 15. Il pattern Decorator (9/15) Ingegneria del Software - A.A. 2003/2004
  • 16. Il pattern Decorator (10/15) Project Manager Project Manager Administrative Manager Usa oggetti Client Engineer di tipo Employee Ingegneria del Software - A.A. 2003/2004
  • 17. Il pattern Decorator (11/15) • Forces - E’ necessario estendere le funzionalità di una classe, ma ci sono ragioni per non farlo attraverso l’ereditarietà - E’ necessario aggiungere ed eventualmente rimuovere dinamicamente funzionalità ad un oggetto Ingegneria del Software - A.A. 2003/2004
  • 18. Il pattern Decorator (12/15) • Solution: Gli attori sono: - AbstractServiceIF Specifica l’interfaccia degli oggetti a cui possono essere aggiunte funzionalità dinamicamente -ConcreteService Implementa la classe a cui possono essere aggiunte funzionalità - AbstractWrapper Possiede il riferimento ad un oggetto di tipo AbstractServiceIF e ne implementa l’interfaccia - ConcreteWrapperX Aggiungono nuove responsabilità al ConcreteService Ingegneria del Software - A.A. 2003/2004
  • 19. Il pattern Decorator (13/15) • Consequences - A differenza dell’ereditarietà, che determina la natura di tutte le istanze di una classe staticamente, il pattern Decorator permette di alterare dinamicamente ed individualmente il comportamento di oggetti aggiungendo e rimuovendo wrapper - Usando differenti combinazioni di pochi tipi di wrapper è possibile ottenere molti comportamenti diversi. Utilizzando l’ereditarietà è possibile ottenere lo stesso risultato solo estendendo una classe per ogni comportamento Ingegneria del Software - A.A. 2003/2004
  • 20. Il pattern Decorator (14/15) - L’estrema flessibilità degli oggetti wrapper può essere fonte di errore (combinazioni sbagliate, riferimenti circolari, ecc.) - Rispetto all’ereditarietà utilizzare il pattern Decorator implica: - Usare meno classi (progettazione e implementazione semplificata) - Usare più oggetti (debugging più difficoltoso) Ingegneria del Software - A.A. 2003/2004
  • 21. Il pattern Decorator (15/15) • Implementation Nessuna informazione indispensabile • Java API usage Pattern molto utilizzato quando si lavora con GUI (cfr. The Design Pattern di JAMES W. COOPER) • Related Patterns – Delegation - Filter – Strategy Il pattern Filter è una versione specializzata di pattern Decoration specializzato nella – Template Method manipolazione di Stream di dati. Indizio: InputStream, BufferedReader, … Ingegneria del Software - A.A. 2003/2004