Lezione 02 - Delegation

Post on 23-Jun-2015

1.240 views 0 download

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?