SlideShare a Scribd company logo
1 of 16
Download to read offline
Ingegneria del Software
Introduzione al pattern…
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 famiglie
    di 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 poter
    istanziare 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




2
                                   3




    Ingegneria del Software - A.A. 2003/2004
Presentazione del pattern
    Abstract Factory
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       Definizione interfacce
                                        per ogni prodotto

             - E’ desiderabile poter configurare il sistema per
               lavorare con l’insieme di prodotti appartenenti
               ad una stessa famiglia        Definizione Factory

             - Non si vuole legare il client ad una factory
               specifica, cioè ad una particolare famiglia di
               prodotti        Definizione Abstract Factory



                   Ingegneria del Software - A.A. 2003/2004
Il pattern Abstract Factory (3/8)

   Da Context…
  … a Solution




• 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 metodo
      statico
    - Se il client deve lavorare con una famiglia di prodotti per
      volta si può usare una variabile statica per settare la factory
      concreta 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 diversi
      sistemi nativi di GUI


                      Ingegneria del Software - A.A. 2003/2004
Il pattern Abstract Factory (6/8)


•   Code example

    public class Client
                    Client      {

         public void doIt () {
            ArchitectureToolkit af;
            af = ArchitectureToolkit.getFactory(ArchitectureToolkit.EMBER);
            CPU cpu = af.createCPU();
            //...
         }
    }




                             Ingegneria del Software - A.A. 2003/2004
Il pattern Abstract Factory (7/8)

public abstract class ArchitectureToolkit
                        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() ;
}
                        Ingegneria del Software - A.A. 2003/2004
Il pattern Abstract Factory (8/8)



•   Related Patterns
                         Factory Method, Singleton




                       Ingegneria del Software - A.A. 2003/2004
Domande?




Ingegneria del Software - A.A. 2003/2004

More Related Content

Similar to Lezione 09 - Abstract Factory

Lezione 06 - Façade
Lezione 06 - FaçadeLezione 06 - Façade
Lezione 06 - FaçadeMarco Bianchi
 
Relazione Progetto cRio
Relazione Progetto cRioRelazione Progetto cRio
Relazione Progetto cRioDario Mazza
 
Configurazione automatica di ambienti di testing per reti di calcolatori - te...
Configurazione automatica di ambienti di testing per reti di calcolatori - te...Configurazione automatica di ambienti di testing per reti di calcolatori - te...
Configurazione automatica di ambienti di testing per reti di calcolatori - te...Bruno Interlandi
 
Generazione di diagrammi ArchiMate da modelli ontologici di EA e meta modello...
Generazione di diagrammi ArchiMate da modelli ontologici di EA e meta modello...Generazione di diagrammi ArchiMate da modelli ontologici di EA e meta modello...
Generazione di diagrammi ArchiMate da modelli ontologici di EA e meta modello...Matteo Busanelli
 
Liferay - Quick Start 1° Episodio
Liferay - Quick Start 1° EpisodioLiferay - Quick Start 1° Episodio
Liferay - Quick Start 1° EpisodioAntonio Musarra
 
Generazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptxGenerazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptxGiacomoZorzin
 
Visual Studio Performance Tools
Visual Studio Performance ToolsVisual Studio Performance Tools
Visual Studio Performance ToolsAndrea Tosato
 
Sperimentazione di Tecnologie di Deep Learning su Sistemi Embedded
Sperimentazione di Tecnologie di Deep Learning su Sistemi EmbeddedSperimentazione di Tecnologie di Deep Learning su Sistemi Embedded
Sperimentazione di Tecnologie di Deep Learning su Sistemi EmbeddedMathiasPoloPerucchin
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptSinergia Totale
 
Lezione 07 - Decorator
Lezione 07 - DecoratorLezione 07 - Decorator
Lezione 07 - DecoratorMarco Bianchi
 
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 loggingVittoriano Muttillo
 
Il web service e i sistemi embedded - Tesi - cap2
Il web service e i sistemi embedded - Tesi - cap2Il web service e i sistemi embedded - Tesi - cap2
Il web service e i sistemi embedded - Tesi - cap2pma77
 
Simulatore Grafico Per Reti Ottiche A Pacchetto
Simulatore Grafico Per Reti Ottiche A PacchettoSimulatore Grafico Per Reti Ottiche A Pacchetto
Simulatore Grafico Per Reti Ottiche A PacchettoFedele Mantuano
 
Lezione 01 - Singleton
Lezione 01 - SingletonLezione 01 - Singleton
Lezione 01 - SingletonMarco Bianchi
 
PowerMock TDD User Group Milano
PowerMock TDD User Group MilanoPowerMock TDD User Group Milano
PowerMock TDD User Group MilanoMassimo Groppelli
 
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!DotNetCampus
 
Signal r to the-max
Signal r to the-maxSignal r to the-max
Signal r to the-maxDotNetCampus
 
Del furia signalr-to-the-max
Del furia   signalr-to-the-maxDel furia   signalr-to-the-max
Del furia signalr-to-the-maxDotNetCampus
 

Similar to Lezione 09 - Abstract Factory (20)

Lezione 06 - Façade
Lezione 06 - FaçadeLezione 06 - Façade
Lezione 06 - Façade
 
Cac Es3 2009
Cac Es3 2009Cac Es3 2009
Cac Es3 2009
 
Relazione Progetto cRIO
Relazione Progetto cRIORelazione Progetto cRIO
Relazione Progetto cRIO
 
Relazione Progetto cRio
Relazione Progetto cRioRelazione Progetto cRio
Relazione Progetto cRio
 
Configurazione automatica di ambienti di testing per reti di calcolatori - te...
Configurazione automatica di ambienti di testing per reti di calcolatori - te...Configurazione automatica di ambienti di testing per reti di calcolatori - te...
Configurazione automatica di ambienti di testing per reti di calcolatori - te...
 
Generazione di diagrammi ArchiMate da modelli ontologici di EA e meta modello...
Generazione di diagrammi ArchiMate da modelli ontologici di EA e meta modello...Generazione di diagrammi ArchiMate da modelli ontologici di EA e meta modello...
Generazione di diagrammi ArchiMate da modelli ontologici di EA e meta modello...
 
Liferay - Quick Start 1° Episodio
Liferay - Quick Start 1° EpisodioLiferay - Quick Start 1° Episodio
Liferay - Quick Start 1° Episodio
 
Generazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptxGenerazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptx
 
Visual Studio Performance Tools
Visual Studio Performance ToolsVisual Studio Performance Tools
Visual Studio Performance Tools
 
Sperimentazione di Tecnologie di Deep Learning su Sistemi Embedded
Sperimentazione di Tecnologie di Deep Learning su Sistemi EmbeddedSperimentazione di Tecnologie di Deep Learning su Sistemi Embedded
Sperimentazione di Tecnologie di Deep Learning su Sistemi Embedded
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScript
 
Lezione 07 - Decorator
Lezione 07 - DecoratorLezione 07 - Decorator
Lezione 07 - Decorator
 
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
 
Il web service e i sistemi embedded - Tesi - cap2
Il web service e i sistemi embedded - Tesi - cap2Il web service e i sistemi embedded - Tesi - cap2
Il web service e i sistemi embedded - Tesi - cap2
 
Simulatore Grafico Per Reti Ottiche A Pacchetto
Simulatore Grafico Per Reti Ottiche A PacchettoSimulatore Grafico Per Reti Ottiche A Pacchetto
Simulatore Grafico Per Reti Ottiche A Pacchetto
 
Lezione 01 - Singleton
Lezione 01 - SingletonLezione 01 - Singleton
Lezione 01 - Singleton
 
PowerMock TDD User Group Milano
PowerMock TDD User Group MilanoPowerMock TDD User Group Milano
PowerMock TDD User Group Milano
 
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
 
Signal r to the-max
Signal r to the-maxSignal r to the-max
Signal r to the-max
 
Del furia signalr-to-the-max
Del furia   signalr-to-the-maxDel furia   signalr-to-the-max
Del furia signalr-to-the-max
 

More from Marco Bianchi

Lezione 12 - Observer
Lezione 12 - ObserverLezione 12 - Observer
Lezione 12 - ObserverMarco Bianchi
 
Lezione 02 - Delegation
Lezione 02 - DelegationLezione 02 - Delegation
Lezione 02 - DelegationMarco Bianchi
 
Lezione 03 - Interface
Lezione 03 - InterfaceLezione 03 - Interface
Lezione 03 - InterfaceMarco 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
 
Applicazioni del TAL e dell'Information retrieval nel settore giuridico
Applicazioni del TAL e dell'Information retrieval nel settore giuridicoApplicazioni del TAL e dell'Information retrieval nel settore giuridico
Applicazioni del TAL e dell'Information retrieval nel settore giuridicoMarco Bianchi
 

More from Marco Bianchi (6)

Lezione 12 - Observer
Lezione 12 - ObserverLezione 12 - Observer
Lezione 12 - Observer
 
Lezione 05 - Proxy
Lezione 05 - ProxyLezione 05 - Proxy
Lezione 05 - Proxy
 
Lezione 02 - Delegation
Lezione 02 - DelegationLezione 02 - Delegation
Lezione 02 - Delegation
 
Lezione 03 - Interface
Lezione 03 - InterfaceLezione 03 - Interface
Lezione 03 - Interface
 
Lezione 00 - Introduzione ai Design Patterns
Lezione 00 - Introduzione ai Design PatternsLezione 00 - Introduzione ai Design Patterns
Lezione 00 - Introduzione ai Design Patterns
 
Applicazioni del TAL e dell'Information retrieval nel settore giuridico
Applicazioni del TAL e dell'Information retrieval nel settore giuridicoApplicazioni del TAL e dell'Information retrieval nel settore giuridico
Applicazioni del TAL e dell'Information retrieval nel settore giuridico
 

Lezione 09 - Abstract Factory

  • 3. 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
  • 4. 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 famiglie di 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 poter istanziare il set di componenti giusto a seconda del tipo di computer da analizzare Ingegneria del Software - A.A. 2003/2004
  • 5. Soluzione al problema introduttivo n.2 Ingegneria del Software - A.A. 2003/2004
  • 6. 1 2 3 Ingegneria del Software - A.A. 2003/2004
  • 7. Presentazione del pattern Abstract Factory
  • 8. 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
  • 9. Il pattern Abstract Factory (2/8) • Forces - Un sistema che lavora con molti prodotti diversi dovrebbe funzionare indipendentemente dallo specifico prodotto Definizione interfacce per ogni prodotto - E’ desiderabile poter configurare il sistema per lavorare con l’insieme di prodotti appartenenti ad una stessa famiglia Definizione Factory - Non si vuole legare il client ad una factory specifica, cioè ad una particolare famiglia di prodotti Definizione Abstract Factory Ingegneria del Software - A.A. 2003/2004
  • 10. Il pattern Abstract Factory (3/8) Da Context… … a Solution • Solution – Gli “attori” del pattern sono: – Client – AbstractFactory – ConcreteFactoryX – WidgetY – ProductXWidgetY Ingegneria del Software - A.A. 2003/2004
  • 11. 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
  • 12. Il pattern Abstract Factory (5/8) • Implementation - E’ raccomandabile implementare la classe AbstractFactory come classe astratta e il metodo getFactory come metodo statico - Se il client deve lavorare con una famiglia di prodotti per volta si può usare una variabile statica per settare la factory concreta 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 diversi sistemi nativi di GUI Ingegneria del Software - A.A. 2003/2004
  • 13. Il pattern Abstract Factory (6/8) • Code example public class Client Client { public void doIt () { ArchitectureToolkit af; af = ArchitectureToolkit.getFactory(ArchitectureToolkit.EMBER); CPU cpu = af.createCPU(); //... } } Ingegneria del Software - A.A. 2003/2004
  • 14. Il pattern Abstract Factory (7/8) public abstract class ArchitectureToolkit 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() ; } Ingegneria del Software - A.A. 2003/2004
  • 15. Il pattern Abstract Factory (8/8) • Related Patterns Factory Method, Singleton Ingegneria del Software - A.A. 2003/2004