Architettura del software: dai Casi d`Uso al Modello
Transcript
Architettura del software: dai Casi d`Uso al Modello
Architettura del software: dai Casi d’Uso al Modello Lorenzo Barbieri • Sono un Senior Trainer/Consultant in ObjectWay SpA (www.objectway.it), specializzato in architetture Microsoft .NET, Windows, SQL Server, Visual Studio Team System, Virtual PC/Virtual Server • Collaboro con UGIdotNET, INETA, Team System Rocks!, Windowserver.it e sono tra i soci fondatori di GUISA – [email protected] – www.geniodelmale.info Dove eravamo rimasti... Problema Problema Bisogni Soluzione Caratteristiche del Sistema Requisiti del Software Analisi, Design, Implementazione,... Tracciabilità Use-Case Model • Non esiste solo il Diagramma “grafico” degli Use Case • Use Case Model Survey – Lista di diagrammi, attori e breve descrizione • Use Case Specification (una per ogni Use Case) – Descrizione – Flussi (principale, secondari, eccezione) – Pre/Post Condizioni – Requisiti supplementari dello UC Giuoco del Calcio Allenatore Istruire i giocatori Giocatore Attaccare gli avversari Rinviare con le mani Portiere Effettuare rimessa dal fondo 040205 Gli Use Case non sono SOLO i disegnini • Il cuore della specifica è la Use Case Specification • In molte realtà la parte grafica non viene utilizzata, si usa solo la Use Case Survey e le varie Use Case Specificatio ...dove stiamo andando... Problema Bisogni Sistema Requisiti Analisi Design Implementazione, Etc... Tracciabilità Un piccolo ripasso... • Una classe è una definizione astratta di un oggetto – Definisce la struttura ed il comportamento di ogni oggetto della classe • Ogni oggetto e’ una istanza di una classe – Gli oggetti possono essere raggruppati in classi UML: Diagramma delle Classi • Una classe è composta da tre sezioni – Nome della classe – Struttura (attributi) – Comportamento (operazioni) • Struttura e Comportamento sono opzionali, soprattutto in fase di analisi Calciatore Calciatore UML: Stereotipi • Uno stereotipo è un elemento di modellizzazione che estende la semantica del metamodello • Ogni classe può avere al massimo uno stereotipo • Gli stereotipi comuni per le classi sono: – – – – Attore Classe Entity Classe Boundary Classe Control <<Stereotipo>> nome della classe Classi di Analisi • Di solito in analisi si usano 3 tipi di classi: – Entity, Boundary, Control – Vengono rappresentate tramite gli appositi stereotipi • L’uso di questi stereotipi porta a strutturare il modello ad oggetti: – Informazioni persistenti -> Entity – Interfacce utente -> Boundary – Flusso di controllo -> Control • L’uso di questi stereotipi serve per: – Identificare le classi principali durante l’analisi e nelle prime fasi di design – Ridurre il numero di stereotipi che si tende ad usare Classi Entity • Una classe Entity modella informazioni “persistenti” ed il loro comportamento • Generalmente modellano “entità” reali: – Clienti, Fornitori, Fatture, etc... • Molto spesso la loro definizione avviene dall’analisi di più Use Case Classi Entity • Le classi Entity vengono ricercate esaminando i nomi e i predicati nominali negli scenari degli Use Case: – – – – Oggetti Descrizioni dello stato di un oggetto Entità esterne e/o Attori Nessuno di questi casi I Nomi vanno filtrati • Termini diversi possono identificare lo stesso oggetto (ambiguità e/o incoerenza) • Bisogna valutare l’importanza dei nomi trovati – Troppi nomi -> troppi oggetti, soprattutto per l’analisi • Se gli Use Case sono fatti bene è più facile Classi Boundary • Una classe Boundary modella la comunicazione tra l’ambiente e il sistema • Ce ne sono di diverso tipo: – User Boundary (Finestre, Pagine Web, etc...) – System Boundary (comunicazione tra sistemi) – Device Boundary (sensori e altri dispositivi) Classi Boundary • Per trovare le classi Boundary bisogna: – Esaminare ogni coppia fisica di attore / scenario e creare le ovvie classi boundary – Modellare solo le astrazioni chiave • Ad esempio, identificare finestre, web form, etc... Non i singoli dettagli Classi Control • Una classe Control modella il comportamento di uno o più (pochi) Use Case • Una classe control gestisce gli oggetti controllati: – Creazione, cancellazione, esecuzione, sequenza dei metodi da chiamare, etc... Classi Control • Durante l’analisi generalmente si individua una sola classe Control per Use Case – Possiamo sempre raffinarla in seguito • Attenzione: – Una classe control comunque NON gestisce necessariamente tutto ciò che è richiesto da un UC, ma coordina oggetti che tutti insieme implementano le funzionalità dello UC Ad esempio: Dallo UC... Giocatore Allenatore Istruire i giocatori ...ad un primo Modello di Analisi Allenatore Giocatore Relativo allo Use Case specifico Rifinire il modello di Analisi • Bisogna definire fin da subito il livello di dettaglio che si vuole dare al modello di Analisi: – Individuiamo solo le Classi e le loro relazioni principali – Individuiamo anche Operazioni e Attributi principali – Andiamo più in dettaglio (si rischia di entrare troppo nel modello di Design) Relazioni tra le Classi • Gli oggetti definiscono il comportamento di un sistema collaborando uno con l’altro • Le relazioni definiscono la modalità di collaborazione: – Associazione – Aggregazione Associazioni • Un’associazione è un collegamento semantico bi-direzionale tra classi • Le associazioni sono rappresentate nei diagrammi delle classi con una linea continua che collega le classi associate <<controller>> IstruireGiocatoriMgr <<boundary>> Lavagna Associazioni: nomi e/o ruoli • Per chiarire il significato, un’associazione può essere nominata tramite una etichetta posizionata lungo la linea dell’associazione Allenatore Allena> Giocatore • Alternativamente si può specificare su un lato o su entrambi un ruolo chedenota lo scopo o la capacità con la quale una classe si associa con un’altra Presidente proprietario dipendente Giocatore Indicatori di Molteplicità • Ogni estremità di un’associazione può contenere un indicatore di molteplicità Indeterminata Uno Zero o molti Uno o molti Zero o uno Da ... a ... Intervalli disgiunti 1 0..* 1..* 0..1 2..4 2, 4 ..6 * Aggregazione • L’Aggregazione è una forma specializzata di Associazione, nella quale un insieme è relazionato alle sue parti Squadra 1 11..* Giocatori Verificare l’Aggregazione • Per verificare che si tratti effettivamente di Aggregazione e non di Associazione bisogna capire se si può dire “è parte di”: – Operazioni sull’insieme applicate anche alle parti? – Attributi dall’insieme applicabili a tutte o ad alcune parti? • L’Aggregazione è implicitamente asimmetrica • Nel dubbio è meglio usare l’Associazione!!! Operazioni e Attributi • Le Operazioni definiscono come un oggetto agisce e reagisce ai messaggi che riceve – Una operazione dovrebbe fare una cosa (precisa) e farla bene – Le operazioni si ricavano leggendo i flussi o gli eventuali diagrammi di sequenza/comunicazione presenti UC • Un Attributo e’ una caratteristica di una classe. – Gli attributi sono estratti dal testo del problema (nomi scartati in precedenza), dalla definizione della classe e/o attraverso l’esperienza del dominio Scoprire le Operazioni dai Diagrammi di Interazione • I messaggi mostrati nei diagrammi di sequenza e/o comunicazione presenti negli Use Case sono solitamente operazioni della classe ricevente Allenatore Lavagna Scrive lo schema Allenatore ScrivereSchema(Dettagli) Lavagna UML: Operazioni e Attributi • Gli Attributi vanno nel secondo comparto • Le Operazioni vanno nel terzo comparto <<boundary>> Lavagna Larghezza Altezza Tipo ScrivereSchema(Dettagli) Ripasso: Incapsulamento • Incapsulamento e’ nascondere dettagli di implementazione al mondo esterno. – Proteggere lo stato interno degli oggetti. – Proteggere il codice del client dalle modifiche realizzative dell’oggetto stesso. Passaggio da Analisi a Design • Le classi di analisi rappresentano entità concettuali che compongono un modello logico (Modello di Analisi) del sistema sotto sviluppo – Descrive e modella COME dovrà fare il sistema, non COME dovrà farlo • Il Modello di Design invece è una astrazione del modello di implementazione e del relativo codice sorgente – Descrive e modella un’astrazione di COME il sistema realizzerà i requisiti richiesti Dove siamo: Modello di analisi • E’ una rappresentazione minima del sistema, sufficiente a catturare i requisiti e la logica essenziale del sistema • Un buon modello di analisi (modello logico) – Considera tutti i requisiti funzionali (use cases) – NON deve modellare i requisiti non funzionali • Un modello di analisi contiene: – classi e loro collaborazioni • rappresentano il comportamento dinamico dettagliato negli UC • tracciabilità fra ogni req. funzionale e le classi che lo realizzano Dove andiamo: Modello di Design • Nasce come raffinamento del Modello di Analisi ma dipende anche dai requisiti non funzionali • Cosa contiene: – Layer e Sottosistemi – Classi di design • Definisce completamente le dipendenze, le associazioni (ass./ compos./aggreg.), le generalizzazioni fra le diverse classi • Per le operazioni definisce la Signature completa: – Nome operazione, tipo di ritorno, parametri, Visibilità, se è di istanza o di classe (statica) • Per gli attributi definisce: – Nome, Tipo, valori iniziali o di default, visibilità Ha senso separare i modelli di Analisi e Design ? • Vantaggi: – Permette la realizzazione di uno stesso Modello di Analisi su diverse Architetture – In sistemi molto complessi aiuta a verificare le assunzioni iniziali • Svantaggi: – Costo di manutenzione per la sincronizzazione dei modelli (se non li mantengo sincronizzati è inutile farne due) Analisi Design Evoluzione delle Classi di Analisi • Una Classe di Analisi può diventare: – – – – – – Una singola classe di Design Una parte di una classe Una classe aggregata Un gruppo di classi che ereditano da una stessa classe Un gruppo di classi funzionalmente relazionate Una relazione • Una Classe di Analisi potrebbe non essere più necessaria in Design • Una Relazione fra Classi di Analisi può diventare una Classe Evoluzione delle Classi Boundary • Le Classi Boundary diventano Form, WebForm, WebService, controlli grafici, interfacce a sottosistemi, o classi wrapper per dispositivi hardware Evoluzione delle Classi Entity • Rappresentano tipicamente oggetti persistenti (su DB o altro) • La loro evoluzione dipende da come verranno modellate (Dataset vs. Custom Entities ad esempio) e da una serie di altri parametri: – Attributi e loro legami – Operazioni sulle Entity – Dipendenze con altre parti del sistema • Molto spesso bisogna modellarle cercando di ridurre al minimo la dipendenza da specifici modelli di persistenza Evoluzione delle Classi Control • Queste classi rappresenteranno puri oggetti software – Sono le classi più difficili da progettare – Sono responsabili della gestione dei flussi di eventi di UC e coordinano molte azioni – Gli oggetti control incapsulano la logica che non è relativa alle interfacce utente o ai dati e che viene indicata come Business Logic Evoluzione delle Classi Control e Pattern • La progettazione di queste classi richiede spesso l’uso e la conoscenza di Pattern di vario livello • Un Pattern è una soluzione comune a problemi comuni – E’ un modo per non reinventare la ruota – Permette l’uso di una soluzione già adottata • I Pattern possono diventare i mattoncini di tanti progetti • Per approfondire: Webcast Introduzione ai design pattern Ripasso: Ereditarietà • L’Ereditarietà identifica la relazione di “è un” oppure “tipo di” • Si riferisce alle classi e non agli oggetti: – non ha nome – non ha senso parlare di molteplicità Calciatore Attaccante Difensore Portiere Generalizzazione Calciatore Attaccante Difensore Portiere Allenatore Persona Calciatore Difensore Portiere Attaccante Allenatore AllenatorePortieri Specializzazione Persona Persona Calciatore Difensore Portiere Attaccante Allenatore AllenatorePortieri Ripasso: Ereditarietà • Durante l’Analisi, l’ereditarietà viene utilizzata solo se strettamente necessario • Durante il Design, l’ereditarietà è raffinata per: – Aumentare il riuso – Incorporare classi di implementazione o di libreria • Aggregazione e Ereditarietà vengono spesso confuse: – Ereditarietà: “è un” o “tipo di” – Aggregazione: “ha un” o “è parte di” Diagrammi di Interazione • I diagrammi di interazione descrivono l’insieme di messaggi che un gruppo di oggetti si scambiano per effettuare una certa operazione, o per raggiungere uno scopo • Ce ne sono di due tipi: – diagrammi di Sequenza: mostrano in ordine temporale quali messaggi si scambiano gli oggetti – diagrammi di Comunicazione (ex collaborazione): mostrano le collaborazioni tra i vari oggetti e possono includere il flusso dei dati • Ognuno fornisce una vista diversa della stessa interazione Sequenza Oggetto2: Classe2 Oggetto1 Oggetto: Classe 1:xxxxxx 2: yyyyy 3: zzzzzz 4: kkkkkkk 5: mmmmm 6: nnnnn Oggetto3 Diagrammi di Comunicazione • Equivale al Diagramma di Collaborazione di UML1.x • E’ un modo alternativo per rappresentare i messaggi scambiati da un insieme di oggetti 2: yyyyyyy 1: xxxxxxx 3: zzzzzzzz Oggetto1 4: kkkkkk Oggetto:classe ...cosa manca Problema Bisogni Sistema Requisiti Analisi Design Implementazione, Etc... Tracciabilità Un ulteriore modello: Modello di Implementazione • Nel Modello di Implementazione sono rappresentati – – – – Processi Componenti Sottosistemi logici Deployment • Bisogna valutare attentamente se farlo – In UML, utile per modellare, può diventare complesso e poco utile in pratica – Con altri strumenti (Team System for Software Architects ad esempio) più legati all’implementazione specifica Ricordatevi di compilare il modulo di Feedback DOMANDE?