Ingegneria del Software Introduzione ai pattern 1
Definizione di pattern [dal [dal vocabolario vocabolario Garzanti] Garzanti] Alcuni esempi: Pattern architetturale Pattern di circuito stampato Pattern grafico 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] 2
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 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) 3
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 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. 4
Motivazioni: Perché Design Pattern? Rendono il codice più facile da capire Agevolano il riuso Semplificano la manutenzione Favoriscono l estendibilità Supportano la progettazione coordinata 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. 2) Imparare i principi Valore relativo di certi pezzi, valore strategico di alcune zone della scacchiera, ecc. 3) 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. 2) Imparare i principi Programmazione strutturata, orientata agli oggetti, ecc. 3) Studiare i pattern famosi I pattern devono essere capiti, memorizzati e applicati ripetutamente Ci sono centinaia di pattern da imparare 5
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 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 6
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 Prerequisiti del corso Conoscenza dei concetti OO: Ereditarietà Polimorfismo Incapsulamento Conoscenza degli strumenti OO di Java: Classi astratte Interfacce 7
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 8
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 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 9
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 10
Domande? 11