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’ 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
7. 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
8. 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
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 è 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
12. 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
13. 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
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
16. 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
17. 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
18. 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
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