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

1,420 views

Published on

Published in: Education, Technology
  • Be the first to comment

Lezione 02 - Delegation

  1. 1. Ingegneria del Software
  2. 2. Introduzione al pattern…
  3. 3. Problema introduttivo (1/3) Cosa accade alle persone che “giocano più ruoli”? Cosa accade alle persone che “giocano più ruoli”? Ingegneria del Software - A.A. 2003/2004
  4. 4. Problema introduttivo (2/3) L’ereditarietà non risolve il problema! L’ereditarietà non risolve il problema! Ingegneria del Software - A.A. 2003/2004
  5. 5. Pattern Delegation
  6. 6. Il pattern Delegation (1/8) • Nome Delegation (When not to use Inheritance) [Grand98] • Synopsis La delega è un modo per “estendere” e riusare le funzionalità di una classe senza ricorrere all’ereditarietà. La nuova classe simula l’ereditarietà utilizzando un’istanza della classe originale per fornire le funzionalità originali. A queste ne aggiunge di nuove. Ingegneria del Software - A.A. 2003/2004
  7. 7. Il pattern Delegation (2/8) • Context - Delegation è più generale dell’ereditarietà - L’ereditarietà è utile per relazioni del tipo “is-a- kind-of” perchè sono intrinsecamente statiche - In relazioni tra classi più dinamiche, tipo “is-a- role-played-by”, l’ereditarietà crea problemi - Esempio: Sistema per la prenotazione di biglietti aerei che prevede passeggeri, personale di linea, agente di vendita biglietti aerei, ecc. Ingegneria del Software - A.A. 2003/2004
  8. 8. Il pattern Delegation (3/8) Ingegneria del Software - A.A. 2003/2004
  9. 9. Il pattern Delegation (4/8) • Forces – L’ereditarietà è una relazione statica che non cambia nel tempo – Se una classe tenta di nascondere un metodo o una variabile ereditata da una superclasse, allora quella superclasse non dovrebbe essere estesa – Dichiarare un classe come sottoclasse di una classe utility può essere rischioso • Estendendo una classe come Vector, quest’ultima potrebbe cambiare nel tempo perdendo la compatibilità • I client potrebbero presupporre la superclasse (es. cast per passaggio di parametri) • I client potrebbero richiamare i metodi pubblici della superclasse Ingegneria del Software - A.A. 2003/2004
  10. 10. Il pattern Delegation (5/8) • Solution - Gli “attori” del pattern Delegation sono: Da Context… – Delegator – Delegate … a Solution Ingegneria del Software - A.A. 2003/2004
  11. 11. Il pattern Delegation (6/8) • Consequences - Vantaggi -Aggira i problemi dell’ereditarietà -Facile cambiare il comportamento di un oggetto a run-time - Svantaggi - Meno strutturata rispetto all’ereditarietà: relazioni tra le classi meno ovvie • Implementation - Implementazione banale • Java API usage - Le API Java presentano molti esempi di delegation pattern. - Alla base del modello ad eventi Java. Ingegneria del Software - A.A. 2003/2004
  12. 12. Il pattern Delegation (7/8) • Code example FlightSegment FlightSegment non estende la classe LuggageCompartment! Ingegneria del Software - A.A. 2003/2004
  13. 13. Il pattern Delegation (8/8) LuggageCompartment LuggageCompartment non estende Vector! • Related Patterns - Molti pattern usano il principio di delega Es. Decorator, Proxy, Observer. Ingegneria del Software - A.A. 2003/2004
  14. 14. Domande? Ingegneria del Software - A.A. 2003/2004

×