Ingegneria del Software
Introduzione al pattern…
Ingegneria del Software - A.A. 2003/2004
Problema introduttivo n.1
• Si deve realizzare un’applicazione con GUI in grado di lavorare su piattaforme diverse (es. MS-Windows, MacOS, ecc).
• Il look and feel delle GUI dipende dalla piattaforma.
• Si crea una classe astratta per ogni oggetto grafico (text field, list box, ecc.) a poi si scrivono le relative sottoclassi concrete per ogni piattaforma considerata.
• Per rendere robusta l’applicazione bisogna assicurarsi che tutti gli oggetti creati siano quelli progettati per funzionare sulla piattaforma che si sta utilizzando
Come ottenere questa garanzia?Come ottenere questa garanzia?
Ingegneria del Software - A.A. 2003/2004
Problema introduttivo n.2
• Si deve realizzare un programma che permette di eseguire in remoto procedure di diagnostica sui computer prodotti dalla Stellar Microsystem
• La Stellar ha progettato due famigliedi computer che si distinguono per le diverse architetture hardware, con componenti solo funzionalmente simili:– Chip CPU di Enginola– Chip in tecnologia RISC
chiamati ember, superember e ultraember
• Il programma di diagnostica deve poteristanziare il set di componenti giusto a seconda del tipo di computer da analizzare
Ingegneria del Software - A.A. 2003/2004
Soluzione al problema introduttivo n.2
Ingegneria del Software - A.A. 2003/2004
1
23
Presentazione del pattern Abstract Factory
Ingegneria del Software - A.A. 2003/2004
Il pattern Abstract Factory (1/8)
• Nome Abstract Factory [GoF95], conosciuto anche con il nome di Kit Pattern o Toolkit Pattern
• Synopsis Presenta un interfaccia per la creazione di famiglie di prodotti, in modo tale che il cliente non abbia conoscenza delle loro classi concrete. Questo consente:- di assicurarsi che il client crei soltanto prodotti
vincolati fra di loro- l’utilizzo di diverse famiglie di prodotti da parte
dello stesso client.
• Context Cfr. esempio introduttivo
Ingegneria del Software - A.A. 2003/2004
Il pattern Abstract Factory (2/8)
• Forces - Un sistema che lavora con molti prodotti diversi dovrebbe funzionare indipendentemente dallo specifico prodotto
- E’ desiderabile poter configurare il sistema per lavorare con l’insieme di prodotti appartenenti ad una stessa famiglia
- Non si vuole legare il client ad una factory specifica, cioè ad una particolare famiglia di prodotti
Definizione interfacceper ogni prodotto
Definizione Factory
Definizione Abstract Factory
Ingegneria del Software - A.A. 2003/2004
Il pattern Abstract Factory (3/8)
… a SolutionDa Context…
• Solution –Gli “attori” del pattern sono:
– Client
– AbstractFactory
– ConcreteFactoryX
–WidgetY
– ProductXWidgetY
Ingegneria del Software - A.A. 2003/2004
Il pattern Abstract Factory (4/8)
• Consequences
- E’ facile aggiungere nuove famiglie di prodotti
- L’AbstractFactory assicura la creazione e l’utilizzo di una famiglia consistente di oggetti
- Può risultare molto impegnativo aggiungere nuovi widget o modificare uno già esistente
Ingegneria del Software - A.A. 2003/2004
Il pattern Abstract Factory (5/8)
• Implementation- E’ raccomandabile implementare la classe AbstractFactory
come classe astratta e il metodo getFactory come metodostatico
- Se il client deve lavorare con una famiglia di prodotti pervolta si può usare una variabile statica per settare la factoryconcreta da usare
- Cfr. voce implementation del pattern Factory Method
• Java API usage- La classe java.awt.Toolkit è una abstract factory usata per
creare oggetti che interagiscono correttamente con i diversisistemi nativi di GUI
Ingegneria del Software - A.A. 2003/2004
Il pattern Abstract Factory (6/8)
• Code example
public class Client {
public void doIt () {ArchitectureToolkit af;af = ArchitectureToolkit.getFactory(ArchitectureToolkit.EMBER);CPU cpu = af.createCPU();//...
}}
Client
Ingegneria del Software - A.A. 2003/2004
Il pattern Abstract Factory (7/8)
public abstract class ArchitectureToolkit {public final static int ENGINOLA = 900;public final static int EMBER = 901;
// ...static final ArchitectureToolkit getFactory(int architecture) {
switch (architecture) {case ENGINOLA:
return new EnginolaToolkit();case EMBER:
return new EmberToolkit();// ...
}}
public abstract CPU createCPU() ;public abstract MMU createMMU() ;
}
ArchitectureToolkit
Ingegneria del Software - A.A. 2003/2004
Il pattern Abstract Factory (8/8)
• Related PatternsFactory Method, Singleton
Ingegneria del Software - A.A. 2003/2004
Domande?
Top Related