SlideShare uma empresa Scribd logo
1 de 22
Baixar para ler offline
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

Mais conteúdo relacionado

Semelhante 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
 

Semelhante 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

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
 
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
 
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
 
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
 
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
 
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
 
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
 

Último (8)

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
 
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
 
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
 
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
 
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
 
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
 
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
 

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