21
Ingegneria del Software Dr. Marco Bianchi [email protected]

Lezione 00 - Introduzione ai Design Patterns

Embed Size (px)

Citation preview

Page 1: Lezione 00 - Introduzione ai Design Patterns

Ingegneria del Software

Dr. Marco [email protected]

Page 2: Lezione 00 - Introduzione ai Design Patterns

Introduzione ai pattern

Page 3: Lezione 00 - Introduzione ai Design Patterns

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

Page 4: Lezione 00 - Introduzione ai Design Patterns

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]

Page 5: Lezione 00 - Introduzione ai Design Patterns

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

Page 6: Lezione 00 - Introduzione ai Design Patterns

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)

Page 7: Lezione 00 - Introduzione ai Design Patterns

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

Page 8: Lezione 00 - Introduzione ai Design Patterns

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.

Page 9: Lezione 00 - Introduzione ai Design Patterns

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

Page 10: Lezione 00 - Introduzione ai Design Patterns

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

Page 11: Lezione 00 - Introduzione ai Design Patterns

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

Page 12: Lezione 00 - Introduzione ai Design Patterns

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

Page 13: Lezione 00 - Introduzione ai Design Patterns

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

Page 14: Lezione 00 - Introduzione ai Design Patterns

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

Page 15: Lezione 00 - Introduzione ai Design Patterns

Le voci del catalogo “Patterns in Java”

Page 16: Lezione 00 - Introduzione ai Design Patterns

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

Page 17: Lezione 00 - Introduzione ai Design Patterns

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

Page 18: Lezione 00 - Introduzione ai Design Patterns

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

Page 19: Lezione 00 - Introduzione ai Design Patterns

Classificazione dei pattern

Page 20: Lezione 00 - Introduzione ai Design Patterns

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

Page 21: Lezione 00 - Introduzione ai Design Patterns

Ingegneria del Software - A.A. 2003/2004

Domande?