Your SlideShare is downloading. ×
Lezione 02 - Delegation
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Lezione 02 - Delegation

1,232
views

Published on

Published in: Education, Technology

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,232
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
35
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Ingegneria del Software
  • 2. Introduzione al pattern…
  • 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. Problema introduttivo (2/3) L’ereditarietà non risolve il problema! L’ereditarietà non risolve il problema! Ingegneria del Software - A.A. 2003/2004
  • 5. Pattern Delegation
  • 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. 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. Il pattern Delegation (3/8) Ingegneria del Software - A.A. 2003/2004
  • 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. 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. 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. Il pattern Delegation (7/8) • Code example FlightSegment FlightSegment non estende la classe LuggageCompartment! Ingegneria del Software - A.A. 2003/2004
  • 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. Domande? Ingegneria del Software - A.A. 2003/2004