Ingegneria del Software Introduzione al pattern… 1 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 isolare l’algoritmo l’algoritmo di di formattazione formattazione del del contenuto contenuto Come dell’array , per farlo variare in modo indipendente dal dell’array , per farlo variare in modo indipendente dal resto dell’implementazione della classe? resto dell’implementazione della classe? Ingegneria del Software - A.A. 2003/2004 Soluzione al problema introduttivo Ingegneria del Software - A.A. 2003/2004 2 Presentazione del pattern Strategy 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. Ingegneria del Software - A.A. 2003/2004 3 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 Ingegneria del Software - A.A. 2003/2004 Il pattern Strategy (3/7) • Consequences Permette di determinare dinamicamente il comportamento di oggetti client eliminando cascate di if o switch • Implementation - • Java API usage Nel package java.util.zip: Ingegneria del Software - A.A. 2003/2004 4 Il pattern Strategy (4/7) • Code example Ingegneria del Software - A.A. 2003/2004 Il pattern Strategy (5/7) Ingegneria del Software - A.A. 2003/2004 5 Il pattern Strategy (6/7) Ingegneria del Software - A.A. 2003/2004 Il pattern Strategy (7/7) • Related Patterns Adapter, Flyweight, Null Object, Template Method Ingegneria del Software - A.A. 2003/2004 6 Domande? Ingegneria del Software - A.A. 2003/2004 7