Ingegneria del Software
Introduzione al pattern…
Problema introduttivo




              Come istanziare gli oggetti
              Come istanziare gli oggetti
              di tipo Document?
              di tipo Document?




 Ingegneria del Software - A.A. 2003/2004
Presentazione del pattern
     Factory Method
Il pattern Factory Method (1/10)

•   Nome       Factory Method [GoF95]

•   Synopsis   Il pattern permette di scrivere una classe che
               delega la creazione degli oggetti che usa,
               rendendola indipendente dalle rispettive classi

•   Context    - Situazioni in cui è desiderabile centralizzare la
                 fase di creazione degli oggetti in una classe
                 dedicata
               - Esempio:
                       Creazione di diversi tipi di documenti
                       all’interno di un’applicazione da ufficio
                       (documenti testuali, fogli di stile, ecc.)
                                                             [segue]


                     Ingegneria del Software - A.A. 2003/2004
Il pattern Factory Method (2/10)




       Ingegneria del Software - A.A. 2003/2004
Il pattern Factory Method (3/10)



•   Forces

    – Una classe può creare oggetti senza conoscere a priori quali
      sono le sottoclassi di una data classe, o quali classi
      implementano una data interfaccia.

    – L’insieme di classi che una classe può istanziare
      potrebbe essere dinamico nel tempo.




                      Ingegneria del Software - A.A. 2003/2004
Il pattern Factory Method (4/10)



•   Solution - Gli “attori” del pattern Factory Method sono:
    – Product
      Superclasse astratta o interface degli oggetti prodotti dalla
      Factory (es. Document)
    – Concrete Product
      Ogni tipo di istanza creata dalla Factory (es. MyDocument)
    – Creation Requestor
      Classe che delega la creazione di oggetti alla Factory
    – Factory IF
      Specifica delle “regole di comunicazione” con la Factory
    – Factory Class
      Implementazione della Factory



                      Ingegneria del Software - A.A. 2003/2004
Il pattern Factory Method (5/10)




             Da Context…
       Ingegneria del Software - A.A. 2003/2004
Il pattern Factory Method (6/10)




                 … a Solution

       Ingegneria del Software - A.A. 2003/2004
Il pattern Factory Method (7/10)



•   Consequences

       - La classe che richiede la creazione è indipendente dalle
         classi degli oggetti “concrete product” che utilizza

       - L’insieme degli oggetti “concrete product” che possono
         essere creati può cambiare dinamicamente




                    Ingegneria del Software - A.A. 2003/2004
Il pattern Factory Method (8/10)


•   Implementation

       - Se Factory può creare più tipi di “concrete product”, il
         metodo createProduct deve prendere
         necessariamente un parametro che gli permetta di
         decidere quale tipo di “concrete product” creare

       - Il metodo createProduct può essere implementato con:
               - cascata di if
              - hash table indicizzata con i valori passati per
                parametro contenente oggetti della classe:
                     java.lang.reflect.Contructor



                     Ingegneria del Software - A.A. 2003/2004
Il pattern Factory Method (9/10)



•   Java API usage     - Nella classe URLConnection c’è un
                         metodo chiamato getContent che
                         restituisce il contenuto di una URL (es.
                         pagina HTML, gif, jpg, ecc).
                         Esercizio: Analizzare le API java e
                                   riconoscere il pattern

•   Code example       - Esercizio: scrivere il codice dell’esempio
                         presentato nella slide successiva

•   Related Patterns - cfr. Abstract Factory, Template Method,
                       Prototype


                     Ingegneria del Software - A.A. 2003/2004
Il pattern Factory Method (10/10)




       Ingegneria del Software - A.A. 2003/2004
Laboratorio


Il nome di una persona può
essere scritto in due modi:
• Cognome, Nome
• Nome Cognome

Scrivere uno programma che
divide Nome e Cognome
correttamente utilizzando lo
schema del pattern Factory




                      Ingegneria del Software - A.A. 2003/2004
Classe “Product”: Namer




   Ingegneria del Software - A.A. 2003/2004
Classe “ConcreteProduct”: FirstFirst




        Ingegneria del Software - A.A. 2003/2004
Classe “ConcreteProduct”: LastFirst




        Ingegneria del Software - A.A. 2003/2004
Classe “Factory”: NameFactory




     Ingegneria del Software - A.A. 2003/2004
Classe “CreationRequestor”

Nel costruttore della classe che utilizza la factory:



Il metodo lanciato quando si genera l’evento di bottone
Compute premuto:




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




Ingegneria del Software - A.A. 2003/2004

Lezione 04 - Factory method

  • 1.
  • 2.
  • 3.
    Problema introduttivo Come istanziare gli oggetti Come istanziare gli oggetti di tipo Document? di tipo Document? Ingegneria del Software - A.A. 2003/2004
  • 4.
  • 5.
    Il pattern FactoryMethod (1/10) • Nome Factory Method [GoF95] • Synopsis Il pattern permette di scrivere una classe che delega la creazione degli oggetti che usa, rendendola indipendente dalle rispettive classi • Context - Situazioni in cui è desiderabile centralizzare la fase di creazione degli oggetti in una classe dedicata - Esempio: Creazione di diversi tipi di documenti all’interno di un’applicazione da ufficio (documenti testuali, fogli di stile, ecc.) [segue] Ingegneria del Software - A.A. 2003/2004
  • 6.
    Il pattern FactoryMethod (2/10) Ingegneria del Software - A.A. 2003/2004
  • 7.
    Il pattern FactoryMethod (3/10) • Forces – Una classe può creare oggetti senza conoscere a priori quali sono le sottoclassi di una data classe, o quali classi implementano una data interfaccia. – L’insieme di classi che una classe può istanziare potrebbe essere dinamico nel tempo. Ingegneria del Software - A.A. 2003/2004
  • 8.
    Il pattern FactoryMethod (4/10) • Solution - Gli “attori” del pattern Factory Method sono: – Product Superclasse astratta o interface degli oggetti prodotti dalla Factory (es. Document) – Concrete Product Ogni tipo di istanza creata dalla Factory (es. MyDocument) – Creation Requestor Classe che delega la creazione di oggetti alla Factory – Factory IF Specifica delle “regole di comunicazione” con la Factory – Factory Class Implementazione della Factory Ingegneria del Software - A.A. 2003/2004
  • 9.
    Il pattern FactoryMethod (5/10) Da Context… Ingegneria del Software - A.A. 2003/2004
  • 10.
    Il pattern FactoryMethod (6/10) … a Solution Ingegneria del Software - A.A. 2003/2004
  • 11.
    Il pattern FactoryMethod (7/10) • Consequences - La classe che richiede la creazione è indipendente dalle classi degli oggetti “concrete product” che utilizza - L’insieme degli oggetti “concrete product” che possono essere creati può cambiare dinamicamente Ingegneria del Software - A.A. 2003/2004
  • 12.
    Il pattern FactoryMethod (8/10) • Implementation - Se Factory può creare più tipi di “concrete product”, il metodo createProduct deve prendere necessariamente un parametro che gli permetta di decidere quale tipo di “concrete product” creare - Il metodo createProduct può essere implementato con: - cascata di if - hash table indicizzata con i valori passati per parametro contenente oggetti della classe: java.lang.reflect.Contructor Ingegneria del Software - A.A. 2003/2004
  • 13.
    Il pattern FactoryMethod (9/10) • Java API usage - Nella classe URLConnection c’è un metodo chiamato getContent che restituisce il contenuto di una URL (es. pagina HTML, gif, jpg, ecc). Esercizio: Analizzare le API java e riconoscere il pattern • Code example - Esercizio: scrivere il codice dell’esempio presentato nella slide successiva • Related Patterns - cfr. Abstract Factory, Template Method, Prototype Ingegneria del Software - A.A. 2003/2004
  • 14.
    Il pattern FactoryMethod (10/10) Ingegneria del Software - A.A. 2003/2004
  • 15.
    Laboratorio Il nome diuna persona può essere scritto in due modi: • Cognome, Nome • Nome Cognome Scrivere uno programma che divide Nome e Cognome correttamente utilizzando lo schema del pattern Factory Ingegneria del Software - A.A. 2003/2004
  • 16.
    Classe “Product”: Namer Ingegneria del Software - A.A. 2003/2004
  • 17.
    Classe “ConcreteProduct”: FirstFirst Ingegneria del Software - A.A. 2003/2004
  • 18.
    Classe “ConcreteProduct”: LastFirst Ingegneria del Software - A.A. 2003/2004
  • 19.
    Classe “Factory”: NameFactory Ingegneria del Software - A.A. 2003/2004
  • 20.
    Classe “CreationRequestor” Nel costruttoredella classe che utilizza la factory: Il metodo lanciato quando si genera l’evento di bottone Compute premuto: Ingegneria del Software - A.A. 2003/2004
  • 21.