Lezione 02 - Delegation
-
Upload
marco-bianchi -
Category
Education
-
view
1.240 -
download
0
Transcript of Lezione 02 - Delegation
Ingegneria del Software
Introduzione al pattern…
Ingegneria del Software - A.A. 2003/2004
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
Problema introduttivo (2/3)
L’ereditarietà non risolve il problema! L’ereditarietà non risolve il problema!
PatternDelegation
Ingegneria del Software - A.A. 2003/2004
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
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
Il pattern Delegation (3/8)
Ingegneria del Software - A.A. 2003/2004
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
Il pattern Delegation (5/8)
Da Context…
… a Solution
• Solution - Gli “attori” delpattern Delegation sono:
– Delegator
– Delegate
Ingegneria del Software - A.A. 2003/2004
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
Il pattern Delegation (7/8)
• Code example
FlightSegment FlightSegment non estende laclasse LuggageCompartment!
Ingegneria del Software - A.A. 2003/2004
Il pattern Delegation (8/8)
• Related Patterns - Molti pattern usano il principio di delegaEs. Decorator, Proxy, Observer.
LuggageCompartment LuggageCompartmentnon estende Vector!
Ingegneria del Software - A.A. 2003/2004
Domande?