SlideShare a Scribd company logo
Ingegneria del Software
Introduzione al pattern…
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
Come isolare l’algoritmo di formattazione del contenuto
 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
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
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
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
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
Domande?




Ingegneria del Software - A.A. 2003/2004

More Related Content

Similar to Lezione 13 - Strategy

Lezione 02 - Delegation
Lezione 02 - DelegationLezione 02 - Delegation
Lezione 02 - DelegationMarco Bianchi
 
Lezione 07 - Decorator
Lezione 07 - DecoratorLezione 07 - Decorator
Lezione 07 - DecoratorMarco Bianchi
 
Lezione 00 - Introduzione ai Design Patterns
Lezione 00 - Introduzione ai Design PatternsLezione 00 - Introduzione ai Design Patterns
Lezione 00 - Introduzione ai Design PatternsMarco Bianchi
 
Catalogo corsi Emerasoft 2013 - 2014
Catalogo corsi Emerasoft 2013 - 2014Catalogo corsi Emerasoft 2013 - 2014
Catalogo corsi Emerasoft 2013 - 2014
Emerasoft, solutions to collaborate
 
Aspect Oriented Programming
Aspect Oriented ProgrammingAspect Oriented Programming
Aspect Oriented ProgrammingAndrea Bozzoni
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptSinergia Totale
 
Progettazione e realizzazione di un sistema software per il time logging
Progettazione e realizzazione di un sistema software per il time loggingProgettazione e realizzazione di un sistema software per il time logging
Progettazione e realizzazione di un sistema software per il time logging
Vittoriano Muttillo
 
Lezione 06 - Façade
Lezione 06 - FaçadeLezione 06 - Façade
Lezione 06 - FaçadeMarco Bianchi
 
Introduzione a TypeScript
Introduzione a TypeScriptIntroduzione a TypeScript
Introduzione a TypeScriptSinergia Totale
 
Design pattern template method
Design pattern template methodDesign pattern template method
Design pattern template methodNelson Firmani
 
Design patterns - parte 1
Design patterns - parte 1Design patterns - parte 1
Design patterns - parte 1
Fabio Armani
 
X-NERVal e Component NER
X-NERVal e Component NERX-NERVal e Component NER
X-NERVal e Component NER
skasof
 
PowerMock TDD User Group Milano
PowerMock TDD User Group MilanoPowerMock TDD User Group Milano
PowerMock TDD User Group Milano
Massimo Groppelli
 
Implementazione di una Web App per la verifica dei requisiti progettuali del ...
Implementazione di una Web App per la verifica dei requisiti progettuali del ...Implementazione di una Web App per la verifica dei requisiti progettuali del ...
Implementazione di una Web App per la verifica dei requisiti progettuali del ...
Luca Dalle Vedove
 
Corso introduttivo di Design Pattern in Java per Elis - 1
Corso introduttivo di Design Pattern in Java per Elis - 1Corso introduttivo di Design Pattern in Java per Elis - 1
Corso introduttivo di Design Pattern in Java per Elis - 1
Antonio Musarra
 
Lezione 01 - Singleton
Lezione 01 - SingletonLezione 01 - Singleton
Lezione 01 - SingletonMarco Bianchi
 
Un'architettura di riferimento per applicazioni enterprise
Un'architettura di riferimento per applicazioni enterpriseUn'architettura di riferimento per applicazioni enterprise
Un'architettura di riferimento per applicazioni enterpriseAlberto Lagna
 
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...
Stefano Costanzo
 
Lezione 12 - Observer
Lezione 12 - ObserverLezione 12 - Observer
Lezione 12 - ObserverMarco Bianchi
 

Similar to Lezione 13 - Strategy (20)

Lezione 02 - Delegation
Lezione 02 - DelegationLezione 02 - Delegation
Lezione 02 - Delegation
 
Lezione 07 - Decorator
Lezione 07 - DecoratorLezione 07 - Decorator
Lezione 07 - Decorator
 
Lezione 11 - Bridge
Lezione 11 - BridgeLezione 11 - Bridge
Lezione 11 - Bridge
 
Lezione 00 - Introduzione ai Design Patterns
Lezione 00 - Introduzione ai Design PatternsLezione 00 - Introduzione ai Design Patterns
Lezione 00 - Introduzione ai Design Patterns
 
Catalogo corsi Emerasoft 2013 - 2014
Catalogo corsi Emerasoft 2013 - 2014Catalogo corsi Emerasoft 2013 - 2014
Catalogo corsi Emerasoft 2013 - 2014
 
Aspect Oriented Programming
Aspect Oriented ProgrammingAspect Oriented Programming
Aspect Oriented Programming
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScript
 
Progettazione e realizzazione di un sistema software per il time logging
Progettazione e realizzazione di un sistema software per il time loggingProgettazione e realizzazione di un sistema software per il time logging
Progettazione e realizzazione di un sistema software per il time logging
 
Lezione 06 - Façade
Lezione 06 - FaçadeLezione 06 - Façade
Lezione 06 - Façade
 
Introduzione a TypeScript
Introduzione a TypeScriptIntroduzione a TypeScript
Introduzione a TypeScript
 
Design pattern template method
Design pattern template methodDesign pattern template method
Design pattern template method
 
Design patterns - parte 1
Design patterns - parte 1Design patterns - parte 1
Design patterns - parte 1
 
X-NERVal e Component NER
X-NERVal e Component NERX-NERVal e Component NER
X-NERVal e Component NER
 
PowerMock TDD User Group Milano
PowerMock TDD User Group MilanoPowerMock TDD User Group Milano
PowerMock TDD User Group Milano
 
Implementazione di una Web App per la verifica dei requisiti progettuali del ...
Implementazione di una Web App per la verifica dei requisiti progettuali del ...Implementazione di una Web App per la verifica dei requisiti progettuali del ...
Implementazione di una Web App per la verifica dei requisiti progettuali del ...
 
Corso introduttivo di Design Pattern in Java per Elis - 1
Corso introduttivo di Design Pattern in Java per Elis - 1Corso introduttivo di Design Pattern in Java per Elis - 1
Corso introduttivo di Design Pattern in Java per Elis - 1
 
Lezione 01 - Singleton
Lezione 01 - SingletonLezione 01 - Singleton
Lezione 01 - Singleton
 
Un'architettura di riferimento per applicazioni enterprise
Un'architettura di riferimento per applicazioni enterpriseUn'architettura di riferimento per applicazioni enterprise
Un'architettura di riferimento per applicazioni enterprise
 
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...
 
Lezione 12 - Observer
Lezione 12 - ObserverLezione 12 - Observer
Lezione 12 - Observer
 

Lezione 13 - Strategy

  • 3. 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 Come isolare l’algoritmo di formattazione del contenuto 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
  • 4. Soluzione al problema introduttivo Ingegneria del Software - A.A. 2003/2004
  • 6. 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
  • 7. 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
  • 8. 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
  • 9. Il pattern Strategy (4/7) • Code example Ingegneria del Software - A.A. 2003/2004
  • 10. Il pattern Strategy (5/7) Ingegneria del Software - A.A. 2003/2004
  • 11. Il pattern Strategy (6/7) Ingegneria del Software - A.A. 2003/2004
  • 12. Il pattern Strategy (7/7) • Related Patterns Adapter, Flyweight, Null Object, Template Method Ingegneria del Software - A.A. 2003/2004