Lezione 13 - Strategy

13
Ingegneria del Software

Transcript of Lezione 13 - Strategy

Page 1: Lezione 13 - Strategy

Ingegneria del Software

Page 2: Lezione 13 - Strategy

Introduzione al pattern…

Page 3: Lezione 13 - Strategy

Ingegneria del Software - A.A. 2003/2004

Problema introduttivo

• La classe MyArray rappresenta vettori di numeri• Un suo metodo esegue la stampa dell’array secondo due

formati:– MathFormat (es. )– StandardFormat (es. )

• Questi formati potrebbero essere in futuro sostituiti da altri

Come isolare l’algoritmo di formattazione del contenuto dell’array , per farlo variare in modo indipendente dal

resto dell’implementazione della classe?

Come isolare l’algoritmo di formattazione del contenuto dell’array , per farlo variare in modo indipendente dal

resto dell’implementazione della classe?

Page 4: Lezione 13 - Strategy

Ingegneria del Software - A.A. 2003/2004

Soluzione al problema introduttivo

Page 5: Lezione 13 - Strategy

Presentazione del pattern Strategy

Page 6: Lezione 13 - Strategy

Ingegneria del Software - A.A. 2003/2004

Il pattern Strategy (1/7)

• Nome Strategy [GoF95]

• Synopsis Consente la definizione di una famiglia di algoritmi, li incapsula e li rende intercambiabili tra loro. Lo Strategy permette di cambiare l’algoritmo utilizzato indipendentemente dal client che lo usa.

• Context Cfr. esempio introduttivo

• Forces - Un programma deve fornire più varianti di un algoritmo o comportamento.

- Si vuole incapsulare “differenze comportamentali” in classi separate ed offrire un modo consistente di accesso a tali comportamenti.

Page 7: Lezione 13 - Strategy

Ingegneria del Software - A.A. 2003/2004

Il pattern Strategy (2/7)

Client

• Solution - Gli “attori” del pattern Iterator sono:

– Client: Classe che desidera ignorare “chi” e “come” implementerà un determinato algoritmo o comportamento

– AbstractStrategy: Contratto che definisce le regole di accesso alle classi che implementano l’algoritmo o comportamento sopra citato

– ConcreteStrategyX: Classi che implementano l’algoritmo o comportamento sopra citato

Page 8: Lezione 13 - Strategy

Ingegneria del Software - A.A. 2003/2004

Il pattern Strategy (3/7)

• Consequences Permette di determinare dinamicamente ilcomportamento di oggetti client eliminando cascate di if o switch

• Implementation -

• Java API usage Nel package java.util.zip:

Page 9: Lezione 13 - Strategy

Ingegneria del Software - A.A. 2003/2004

Il pattern Strategy (4/7)

• Code example

Page 10: Lezione 13 - Strategy

Ingegneria del Software - A.A. 2003/2004

Il pattern Strategy (5/7)

Page 11: Lezione 13 - Strategy

Ingegneria del Software - A.A. 2003/2004

Il pattern Strategy (6/7)

Page 12: Lezione 13 - Strategy

Ingegneria del Software - A.A. 2003/2004

Il pattern Strategy (7/7)

• Related Patterns

Adapter, Flyweight, Null Object, Template Method

Page 13: Lezione 13 - Strategy

Ingegneria del Software - A.A. 2003/2004

Domande?