Ingegneria del Software




      Dr. Marco Bianchi
        bianchi74@gmail.com
Introduzione ai pattern
Definizione di pattern


                                                                    [dal vocabolario
                                                                     [dal vocabolario
                                                                       Garzanti]
                                                                        Garzanti]




Alcuni esempi:




Pattern architetturale     Pattern di circuito stampato                Pattern grafico


                         Ingegneria del Software - A.A. 2003/2004
Riguardo i pattern…



• “Ogni pattern descrive:
   – un problema che si ripresenta più volte
     nel suo ambiente,
   – gli aspetti fondamentali della soluzione
     a tale problema,
   – in modo tale che si possa riutilizzare la
     soluzione milioni di volte,
   – senza dover ripetere le stesse
     operazioni più volte”

                                 [Christopher
     Alexander]




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


•    Software Pattern
    Rappresentano soluzioni a problematiche ricorrenti
    che si incontrano durante le varie fasi di sviluppo del
    software

• I software pattern sono utili per:
    – catturare l’esperienza e la saggezza degli esperti
      “Sbagliando si impara…” vs. “Impara dai successi
      altrui…”
    – evitare di perder tempo nella ricerca di soluzioni già
      esistenti
    – creare un linguaggio che semplifichi la comunicazione e
      la comprensione tra gli addetti ai lavori


                    Ingegneria del Software - A.A. 2003/2004
Un po’ di storia


1977-1979 Christopher Alexander, un architetto, scrive due
   testi che descrivono pattern per architetture di
  costruzione e di pianificazione urbana

1987 Cunningham e Beck applicano le idee di Alexander per
  sviluppare cinque pattern per progettare User Interface

1994 Gamma, Helm, Vlissides e Johnson pubblicano il testo
  Design Patterns, successivamente soprannominato
  “Gang of Four” (GoF)




                  Ingegneria del Software - A.A. 2003/2004
Tipi di Software Pattern



•   Design Patterns      per lo sviluppo del software
             (spesso object-oriented)

•    Analysis Patterns        per definire modelli di analisi
    ricorrenti e riutilizzabili

•    Organization Patterns       per strutturare
    organizzazioni e       progetti

•   Process Patterns             per definire processi di sviluppo
       software



                     Ingegneria del Software - A.A. 2003/2004
Design Pattern

• I Design Pattern possono essere classificati in funzione del
  loro livello di astrazione/dettaglio

   – Architectural Design Patterns
        Descrivono l’organizzazione strutturale fondamentale di un sistema
        software in termini di sottosistemi, dei loro compiti e delle modalità di
        interazione.


   – Design Patterns
        Forniscono uno schema per raffinare i sottosistemi o componenti di un
        sistema software. In genere descrivono strutture ricorrenti di
        componenti comunicanti che risolvono un generico problema di
        progettazione in un particolare contesto.


   – Idioms o Coding Design Patterns
        Pattern di basso livello specifico di un linguaggio di programmazione. Un
        idioma descrive come implementare particolari aspetti dei componenti o
        le relazioni tra essi utilizzando caratteristiche del linguaggio di
        programmazione scelto.



                        Ingegneria del Software - A.A. 2003/2004
Motivazioni: Perché Design
                  Pattern?


• Rendono il codice più facile da capire

• Agevolano il riuso

• Semplificano la manutenzione

• Favoriscono l’estendibilità

• Supportano la progettazione coordinata




                  Ingegneria del Software - A.A. 2003/2004
Per diventare Software
                      Designer…
 Per diventare un Campione di                Per diventare un Software
  Scacchi bisogna:                             Designer esperto bisogna:
1) Imparare le regole
                                             1) Imparare le regole
   • Nomi e movimenti possibili
     dei pezzi, orientazione della                 • Algoritmi, strutture dati,
     scacchiera, ecc.                                linguaggi di
1) Imparare i principi                               programmazione, ecc.
   • Valore relativo di certi pezzi,         1) Imparare i principi
     valore strategico di alcune                   • Programmazione
     zone della scacchiera, ecc.
                                                     strutturata, orientata agli
1) Studiare le partite dei                           oggetti, ecc.
   campioni
   • Il gioco contiene sequenze di
                                             1)    Studiare i pattern
     mosse (pattern) che devono                   “famosi”
     essere capite, memorizzate e                  • I pattern devono essere
     applicate ripetutamente                         capiti, memorizzati e
   • Ci sono centinaia di sequenze                   applicati ripetutamente
     da imparare
                                                   • Ci sono centinaia di pattern
                                                     da imparare



                        Ingegneria del Software - A.A. 2003/2004
Come è descritto un pattern

• Generalmente la descrizione di un pattern include:
   – Una descrizione del problema, tra cui:
      • un esempio concreto
      • una soluzione specifica al problema concreto
   – Considerazioni che guidano alla formulazione di una
     soluzione generica
   – Una soluzione generica
   – Le conseguenze, positive e negative, nell’utilizzare una
     data soluzione per risolvere un problema
   – Un elenco di pattern simili


• I cataloghi di pattern presentano una scheda,
  contenente le informazioni sopra elencate, per ogni
  pattern


                    Ingegneria del Software - A.A. 2003/2004
Il “catalogo” di riferimento del corso



• Testo di riferimento del corso:
    Patterns in Java – Volume 1
    Mark Grand
    Wiley



• Altri riferimenti:
   – Design Patterns
     Gamma, Helm, Johnson,
     Vlissides
     Addison-Wesley




                   Ingegneria del Software - A.A. 2003/2004
Riferimenti on-line



• The Design Patterns – J.W.Cooper
  (http://www.patterndepot.com/put/8/JavaPatterns.htm)

• Thinking in Pattern – B. Eckel
  (http://www.mindview.net/)

• Patterns Home Page:
  http://www.hillside.net/patterns/

• Patterns Discussion FAQ:
  http://g.oswego.edu/dl/pd-FAQ/pd-FAQ.html




                   Ingegneria del Software - A.A. 2003/2004
Prerequisiti del corso


• Conoscenza dei concetti OO:
   – Ereditarietà
   – Polimorfismo
   – Incapsulamento


• Conoscenza degli strumenti OO di Java:
   – Classi astratte
   – Interfacce




                       Ingegneria del Software - A.A. 2003/2004
Le voci del catalogo
 “Patterns in Java”
Elementi di un pattern in “Patterns in Java”
                        (1/3)



•   Pattern Name
    – Titolo della sezione
    – Riferimento bibliografico

•   Synopsis
    – Esposizione sintetica e sistematica del pattern


•   Context
    – Descrizione del problema che il pattern risolve


•   Forces
    – Riassunto delle considerazioni che conducono alla
      soluzione generica presentata nella sezione Solutions


                    Ingegneria del Software - A.A. 2003/2004
Elementi di un pattern in “Patterns in Java”
                        (2/3)




•   Solution
    – Descrizione di una soluzione generica al problema che il
      pattern risolve

•   Consequences
    – Spiegazione delle implicazioni, positive e negative,
      nell’utilizzo del pattern

•   Implementation
    – Presentazione degli aspetti da considerare in fase di
      implementazione
    – In alcuni casi, descrizioni di varianti e/o semplificazioni



                     Ingegneria del Software - A.A. 2003/2004
Elementi di un pattern in “Patterns in Java”
                        (3/3)




•   Java API Usage
    – Eventuale presentazione di utilizzo del pattern
      all’interno delle API Java

•   Code Example
    – Codice di esempio che mostra un semplice utilizzo
      pratico del pattern

•   Related Patterns
    – Elenco di pattern in qualche modo correlati




                     Ingegneria del Software - A.A. 2003/2004
Classificazione dei pattern
Classificazione dei pattern

•   Creazionali
    – Forniscono meccanismi per la creazione di oggetti
       • Es. Factory Method


•   Strutturali
    – Gestiscono la separazione tra interfaccia e implementazione e
      le modalità di composizione tra oggetti
       • Es. Adapter – Adatta l’interfaccia di una classe secondo necessità


•   Comportamentali
    – Consentono la modifica del comportamento degli oggetti
      minimizzando la necessità di cambiare il codice
       • Es. Iterator – Fornisce una modalità di accesso sequenziale ad un
         insieme di elementi, indipendentemente dalla         loro natura




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




Ingegneria del Software - A.A. 2003/2004

Lezione 00 - Introduzione ai Design Patterns

  • 1.
    Ingegneria del Software Dr. Marco Bianchi bianchi74@gmail.com
  • 2.
  • 3.
    Definizione di pattern [dal vocabolario [dal vocabolario Garzanti] Garzanti] Alcuni esempi: Pattern architetturale Pattern di circuito stampato Pattern grafico Ingegneria del Software - A.A. 2003/2004
  • 4.
    Riguardo i pattern… •“Ogni pattern descrive: – un problema che si ripresenta più volte nel suo ambiente, – gli aspetti fondamentali della soluzione a tale problema, – in modo tale che si possa riutilizzare la soluzione milioni di volte, – senza dover ripetere le stesse operazioni più volte” [Christopher Alexander] Ingegneria del Software - A.A. 2003/2004
  • 5.
    Software Pattern • Software Pattern Rappresentano soluzioni a problematiche ricorrenti che si incontrano durante le varie fasi di sviluppo del software • I software pattern sono utili per: – catturare l’esperienza e la saggezza degli esperti “Sbagliando si impara…” vs. “Impara dai successi altrui…” – evitare di perder tempo nella ricerca di soluzioni già esistenti – creare un linguaggio che semplifichi la comunicazione e la comprensione tra gli addetti ai lavori Ingegneria del Software - A.A. 2003/2004
  • 6.
    Un po’ distoria 1977-1979 Christopher Alexander, un architetto, scrive due testi che descrivono pattern per architetture di costruzione e di pianificazione urbana 1987 Cunningham e Beck applicano le idee di Alexander per sviluppare cinque pattern per progettare User Interface 1994 Gamma, Helm, Vlissides e Johnson pubblicano il testo Design Patterns, successivamente soprannominato “Gang of Four” (GoF) Ingegneria del Software - A.A. 2003/2004
  • 7.
    Tipi di SoftwarePattern • Design Patterns per lo sviluppo del software (spesso object-oriented) • Analysis Patterns per definire modelli di analisi ricorrenti e riutilizzabili • Organization Patterns per strutturare organizzazioni e progetti • Process Patterns per definire processi di sviluppo software Ingegneria del Software - A.A. 2003/2004
  • 8.
    Design Pattern • IDesign Pattern possono essere classificati in funzione del loro livello di astrazione/dettaglio – Architectural Design Patterns Descrivono l’organizzazione strutturale fondamentale di un sistema software in termini di sottosistemi, dei loro compiti e delle modalità di interazione. – Design Patterns Forniscono uno schema per raffinare i sottosistemi o componenti di un sistema software. In genere descrivono strutture ricorrenti di componenti comunicanti che risolvono un generico problema di progettazione in un particolare contesto. – Idioms o Coding Design Patterns Pattern di basso livello specifico di un linguaggio di programmazione. Un idioma descrive come implementare particolari aspetti dei componenti o le relazioni tra essi utilizzando caratteristiche del linguaggio di programmazione scelto. Ingegneria del Software - A.A. 2003/2004
  • 9.
    Motivazioni: Perché Design Pattern? • Rendono il codice più facile da capire • Agevolano il riuso • Semplificano la manutenzione • Favoriscono l’estendibilità • Supportano la progettazione coordinata Ingegneria del Software - A.A. 2003/2004
  • 10.
    Per diventare Software Designer… Per diventare un Campione di Per diventare un Software Scacchi bisogna: Designer esperto bisogna: 1) Imparare le regole 1) Imparare le regole • Nomi e movimenti possibili dei pezzi, orientazione della • Algoritmi, strutture dati, scacchiera, ecc. linguaggi di 1) Imparare i principi programmazione, ecc. • Valore relativo di certi pezzi, 1) Imparare i principi valore strategico di alcune • Programmazione zone della scacchiera, ecc. strutturata, orientata agli 1) Studiare le partite dei oggetti, ecc. campioni • Il gioco contiene sequenze di 1) Studiare i pattern mosse (pattern) che devono “famosi” essere capite, memorizzate e • I pattern devono essere applicate ripetutamente capiti, memorizzati e • Ci sono centinaia di sequenze applicati ripetutamente da imparare • Ci sono centinaia di pattern da imparare Ingegneria del Software - A.A. 2003/2004
  • 11.
    Come è descrittoun pattern • Generalmente la descrizione di un pattern include: – Una descrizione del problema, tra cui: • un esempio concreto • una soluzione specifica al problema concreto – Considerazioni che guidano alla formulazione di una soluzione generica – Una soluzione generica – Le conseguenze, positive e negative, nell’utilizzare una data soluzione per risolvere un problema – Un elenco di pattern simili • I cataloghi di pattern presentano una scheda, contenente le informazioni sopra elencate, per ogni pattern Ingegneria del Software - A.A. 2003/2004
  • 12.
    Il “catalogo” diriferimento del corso • Testo di riferimento del corso: Patterns in Java – Volume 1 Mark Grand Wiley • Altri riferimenti: – Design Patterns Gamma, Helm, Johnson, Vlissides Addison-Wesley Ingegneria del Software - A.A. 2003/2004
  • 13.
    Riferimenti on-line • TheDesign Patterns – J.W.Cooper (http://www.patterndepot.com/put/8/JavaPatterns.htm) • Thinking in Pattern – B. Eckel (http://www.mindview.net/) • Patterns Home Page: http://www.hillside.net/patterns/ • Patterns Discussion FAQ: http://g.oswego.edu/dl/pd-FAQ/pd-FAQ.html Ingegneria del Software - A.A. 2003/2004
  • 14.
    Prerequisiti del corso •Conoscenza dei concetti OO: – Ereditarietà – Polimorfismo – Incapsulamento • Conoscenza degli strumenti OO di Java: – Classi astratte – Interfacce Ingegneria del Software - A.A. 2003/2004
  • 15.
    Le voci delcatalogo “Patterns in Java”
  • 16.
    Elementi di unpattern in “Patterns in Java” (1/3) • Pattern Name – Titolo della sezione – Riferimento bibliografico • Synopsis – Esposizione sintetica e sistematica del pattern • Context – Descrizione del problema che il pattern risolve • Forces – Riassunto delle considerazioni che conducono alla soluzione generica presentata nella sezione Solutions Ingegneria del Software - A.A. 2003/2004
  • 17.
    Elementi di unpattern in “Patterns in Java” (2/3) • Solution – Descrizione di una soluzione generica al problema che il pattern risolve • Consequences – Spiegazione delle implicazioni, positive e negative, nell’utilizzo del pattern • Implementation – Presentazione degli aspetti da considerare in fase di implementazione – In alcuni casi, descrizioni di varianti e/o semplificazioni Ingegneria del Software - A.A. 2003/2004
  • 18.
    Elementi di unpattern in “Patterns in Java” (3/3) • Java API Usage – Eventuale presentazione di utilizzo del pattern all’interno delle API Java • Code Example – Codice di esempio che mostra un semplice utilizzo pratico del pattern • Related Patterns – Elenco di pattern in qualche modo correlati Ingegneria del Software - A.A. 2003/2004
  • 19.
  • 20.
    Classificazione dei pattern • Creazionali – Forniscono meccanismi per la creazione di oggetti • Es. Factory Method • Strutturali – Gestiscono la separazione tra interfaccia e implementazione e le modalità di composizione tra oggetti • Es. Adapter – Adatta l’interfaccia di una classe secondo necessità • Comportamentali – Consentono la modifica del comportamento degli oggetti minimizzando la necessità di cambiare il codice • Es. Iterator – Fornisce una modalità di accesso sequenziale ad un insieme di elementi, indipendentemente dalla loro natura Ingegneria del Software - A.A. 2003/2004
  • 21.