Upload
marco-bianchi
View
1.610
Download
0
Embed Size (px)
Citation preview
Ingegneria del Software
Dr. Marco [email protected]
Introduzione ai pattern
Ingegneria del Software - A.A. 2003/2004
Definizione di pattern
[dal vocabolario Garzanti]
[dal vocabolario Garzanti]
Alcuni esempi:
Pattern di circuito stampato Pattern graficoPattern architetturale
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 PatternsDescrivono l’organizzazione strutturale fondamentale di un sistema software in termini di sottosistemi, dei loro compiti e delle modalità di interazione.
– Design PatternsForniscono 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 PatternsPattern 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 Scacchi bisogna:
1) Imparare le regole• Nomi e movimenti possibili
dei pezzi, orientazione della scacchiera, ecc.
1) Imparare i principi• Valore relativo di certi pezzi,
valore strategico di alcune zone della scacchiera, ecc.
1) Studiare le partite dei campioni• Il gioco contiene sequenze di
mosse (pattern) che devono essere capite, memorizzate e applicate ripetutamente
• Ci sono centinaia di sequenze da imparare
Per diventare un Software Designer esperto bisogna:
1) Imparare le regole• Algoritmi, strutture dati,
linguaggi di programmazione, ecc.
1) Imparare i principi• Programmazione
strutturata, orientata agli oggetti, ecc.
1) Studiare i pattern “famosi”• I pattern devono essere
capiti, memorizzati e applicati ripetutamente
• 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 1Mark GrandWiley
• Altri riferimenti:– Design Patterns
Gamma, Helm, Johnson, VlissidesAddison-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
Le voci del catalogo “Patterns in Java”
Ingegneria del Software - A.A. 2003/2004
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
Classificazione dei pattern
Ingegneria del Software - A.A. 2003/2004
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?