Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Lezione 07 - Decorator

866 views

Published on

Published in: Education
  • Be the first to comment

  • Be the first to like this

Lezione 07 - Decorator

  1. 1. Ingegneria del Software
  2. 2. Introduzione al pattern…
  3. 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. 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. 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
  6. 6. Presentazione del pattern Decorator
  7. 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. 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. 9. Il pattern Decorator (3/15) • Code example <<interface>> Ingegneria del Software - A.A. 2003/2004
  10. 10. Il pattern Decorator (4/15) <<interface>> Ingegneria del Software - A.A. 2003/2004
  11. 11. Il pattern Decorator (5/15) <<interface>> Ingegneria del Software - A.A. 2003/2004
  12. 12. Il pattern Decorator (6/15) Ingegneria del Software - A.A. 2003/2004
  13. 13. Il pattern Decorator (7/15) Ingegneria del Software - A.A. 2003/2004
  14. 14. Il pattern Decorator (8/15) Ingegneria del Software - A.A. 2003/2004
  15. 15. Il pattern Decorator (9/15) Ingegneria del Software - A.A. 2003/2004
  16. 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. 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. 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. 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. 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. 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
  22. 22. Domande? Ingegneria del Software - A.A. 2003/2004

×