Real World UML Omid Ehsani Senior Consultant and Trainer [email protected] Sponsor Parliamo di… • • • • • L’importanza della modellazione UML in 21 minuti… Design Pattern e UML Un’applicazione reale “Agile” UML! L’importanza della modellazione L’importanza della modellazione • Spesso i team di sviluppo non fanno progettazione • Molti sviluppano applicazioni come costruirebbero la “cuccia del cane” – Manca la definizione di un’architettura – Dai requisiti si passa subito alla codifica – Si lavora più tempo e si scrive più codice Software is often treated as a SOFT science Modeling helps make it a HARD science L’importanza della modellazione • Costruiamo modelli (o blueprints) per comprendere meglio il sistema che stiamo sviluppando • La modellazione: – Ci aiuta a visualizzare il sistema come dovrebbe essere – Ci permette di specificare la struttura e il comportamento del sistema. – Ci fornisce una linea guida nella costruzione del sistema – Documenta le decisioni che prendiamo – Scompone il problema – Controlla la complessità – E’ un punto di partenza • Costruiamo modelli dei sistemi complessi perchè non siamo in grado di comprendere tali sistemi nella loro interezza Cosa è UML? • UML è un linguaggio per ... – Visualizzare – Specificare – Costruire – Documentare ... gli artefatti di un sistema software UML è il “blueprint” per la costruzione del software Cosa è UML? • UML è “Il Linguaggio” per l’analisi e la progettazione Object Oriented Contributi all’UML Booch Rumbaugh Jacobson Meyer Fusion Operation descriptions, Message numbering Before and after conditions Embley Harel Singleton classes, High-level view State charts Gamma, et.al Wirfs-Brock Frameworks, patterns, notes Shlaer - Mellor Object Lifecycles Odell Classification Responsibilities Breve storia di UML • Inizio progetto: ottobre 1994 • Proposta a OMG (Object Management Group): gennaio 1997 • Accettazione, da parte di OMG, della versione 1.1: novembre 1997 • Attualmente: UML versione 1.5 • Alle porte: UML 2.0 Panoramica su UML • UML è un linguaggio – Un linguaggio fornisce un vocabolario e le regole per combinare le parole allo scopo di comunicare – Non è una metodologia, ma è utilizzato da molti processi di sviluppo del software Panoramica su UML • UML è un linguaggio per visualizzare – La visualizzazione facilita la comunicazione e favorisce un adeguato livello di astrazione – Un’immagine vale mille parole Panoramica su UML • UML è un linguaggio per stendere specifiche – Stendere specifiche significa costruire modelli che siano precisi, non ambigui e completi – I simboli UML hanno una sintassi e una semantica ben definite Panoramica su UML • UML è un linguaggio per costruire – UML non è un ambiente di programmazione visuale ma i suoi modelli sono nati per essere tradotti in linguaggi Object Oriented Panoramica su UML • UML è un linguaggio per documentare – le specifiche funzionali – l’architettura generale – la scomposizione strutturale del sistema – le interazioni tra i componenti – la distribuzione e il deployment UML in 21 minuti... • I modelli di UML sono espressi attraverso una serie di diagrammi • Esistono diverse tipologie di diagrammi • Ogni tipologia coglie un aspetto diverso del sistema I Diagrammi di UML • • • • • • • • Use Case Diagram Sequence Diagram Collaboration Diagram Statechart (STD) Diagram Activity Diagram Component Diagram Deployment Diagram Class Diagram Use Cases Diagram • • • • Un sistema risponde ai bisogni dei suoi utenti Questi bisogni sono catturati come Use Cases Uno Use Case è un modo di usare il sistema Uno Use Case è uno schema di comportamento esibito dal sistema • La collezione degli Use Cases specifica tutti i modi di usare il sistema Actors • Un Actor è qualcuno o qualcosa che deve interagire con il sistema • Gli Actors rappresentano qualunque cosa che deve scambiare informazioni con il sistema Actors e Use Cases Perform Card Transaction Process Customer Bill Retail Institution Customer Reconcile Transactions Manage Customer Account Sponsoring Financial Institution Actors e Use Cases Perform Card Transaction Process Customer Bill Retail Institution Customer Reconcile Transactions Manage Customer Account Sponsoring Financial Institution Realizziamo gli Use Cases • Gli Interaction Diagrams permettono di ottenere il modello di come interagiscono Actors e oggetti per realizzare uno Use Case • Sono realizzati tramite due diverse, e complementari, modalità: – i Collaboration Diagrams – i Sequence Diagrams Sequence Diagrams • Un Sequence Diagram mette in evidenza: – la sequenza temporale dei messaggi – la lifetime degli oggetti – il focus of control Sequence Diagrams s:Caller :Switch r:Caller liftReceiver setDialTone() {dialing.executionTime<30 sec} *dialDigit(d) routeCall(s,n) dialing c:Conversation «create» ring() liftReceiver connect(r) connect(r,s) connect(s) Collaboration Diagrams • Un Collaboration Diagram mette in evidenza: • l’organizzazione degli oggetti che partecipano in una interazione • la lifetime degli oggetti • il focus of control Collaboration Diagrams routeCall(s,n) 1: liftReceiver 3:*dialDigit(d) :Switch s:Caller 2: setDialTone() 10: connect(r) 8: connect(r,s) 5: «create» 6: ring() 9: connect(s) r:Caller c:Conversation 7: liftReceiver Statechart (STD) Diagram • Una macchina a stati è usata per ottenere il modello di un singolo oggetto • Una macchina a stati descrive la sequenza degli stati attraverso i quali transita un oggetto durante il suo ciclo di vita in risposta a eventi, assieme alle sue risposte a tali eventi • Il diagramma che descrive la macchina a stati è detto State Transition Diagram (STD) Statechart (STD) Diagram • Uno stato è una condizione o situazione durante la vita di un oggetto nella quale l’oggetto soddisfa qualche condizione, esegue qualche attività, o aspetta per qualche evento • Un evento è la specifica di un “qualcosa” la cui durata è trascurabile rispetto alla durata del ciclo di vita dell’oggetto • Una transizione è una relazione fra due stati che indica che un oggetto passerà dall’uno all’altro come effetto di un evento o quando una specifica condizione è verificata • Una azione è una operazione atomica il cui effetto è o un cambiamento di stato o il ritorno di un valore STD per una Linea Telefonica Idle on-hook off-hook Dial Tone do: sound dial tone STD per una Linea Telefonica Idle off-hook Dial Tone do: sound dial tone digit(n) Dialing valid number digit(n) Connecting do: find connection routed Ringing do: ring bell called phone answers on-hook Connected called phone hangs up Disconnected STD per una Linea Telefonica Idle on-hook off-hook Dial Tone do: sound dial tone time-out Timed-out do: sound loud beep STD per una Linea Telefonica Idle off-hook Dial Tone do: sound dial tone digit(n) Dialing invalid number digit(n) on-hook Receiving Recorded Message do: play message message done on-hook Disconnected STD per una Linea Telefonica Idle off-hook Dial Tone do: sound dial tone on-hook Busy do: sound busy tone digit(n) Dialing valid number number busy Connecting do: find connection digit(n) STD per una Linea Telefonica Idle Dial Tone do: sound dial tone on-hook Busy do: sound busy tone digit(n) Dialing on-hook on hook/disconnect line on-hook Connecting do: find connection Timed-out do: sound loud beep time-out invalid number valid number number busy on-hook off-hook on-hook digit(n) on-hook Receiving Recorded Message do: play message message done routed Ringing do: ring bell called phone answers Connected called phone hangs up Disconnected STD per la partita degli Scacchi White’s turn do: think black moves checkmate stalemate white moves Black’s turn do: think stalemate checkmate Black wins Draw White wins Component Diagram • Un Component Diagram mostra un insieme di componenti e le loro relazioni • Un Component Diagram comunemente contiene: – Componenti – Interfacce – Relazioni di dipendenza, generalizzazione, associazione e realizzazione Un Component Diagram find.html index.html __________ __________ __________ «hyperlink» ____ __________ __________ __________ __________ ____ __________ dbacs.dll find.exe nateng.dll Deployment Diagram • Un deployment diagram è un diagramma che documenta la configurazione al run time dei nodi che partecipano al processo e i componenti che vivono in essi • Tipicamente un deployment diagram è usato per avere il modello di – Sistemi embedded – Client/server – Sistemi distribuiti Il Modello di un Sistema Client/Server servers clients 2..* «processor» caching server console Deploys http.exe rting.exe 4..* «processor» server Deploys dbadmin.exe tktmstr.exe logexec.exe Il Modello di un Sistema Distribuito Note: country servers are reachable to one another via the company’s private network :console :console :console :Internet :regional server :country server :regional server :regional server :logging server Class Diagrams • Un Class Diagram è un diagramma che mostra un insieme di classi, interfacce, e collaborazioni e le loro dipendenze • Un Class Diagram è un modello statico del sistema utilizzato per – ottenere un dizionario del sistema – avere un modello di collaborazione fra gli oggetti (p.e. per specificare quali oggetti partecipano a una transazione) – avere un modello logico dello schema del database Class Diagram multiplicity Company 1..* Department 1 aggregation 1..* Office generalization Headquarters * Location * constraint class association role member {subset} manager 1..* 1 PersonelRecord Person ContactInformation (class) name dependency interface 0..1 ISecureInformation Class Diagram Company 1..* 0..1 1 Department * Location name: Name member {subset} manager 1..* 1 Person name: Name employeeID: Integer title: String getPhoto(p: Photo) getSoundByte() getContactInformation() getPersonalRecords() 1..* Office * address: String voice: Number attributes ContactInformation address: String Headquarters PersonelRecord taxID employmentHistory PersonelRecord operations ISecureInformation Packages • Un Package è un meccanismo di uso generale per – organizzare in gruppi gli elementi che sono semanticamente simili o funzionalmente correlati – I package possono essere utilizzati oer creare gerarchie di contenitori (come i folder per il file-system) Packages e Servizi User Services Business Services Data Services Design Pattern e UML • Impariamo a leggere i Design Pattern – Per capire meglio i Pattern li “visualizziamo” con diagrammi UML – Anche quando conosciamo un Pattern non sempre ne ricordiamo la struttura, un colpo d’occhio al Class Diagram ci rinfresca la memoria • I Pattern costituiscono un vocabolario comune per la comunicazione dei concetti – Anche l’UML è un vocabolario comune, ma è “disegnato” invece che scritto o parlato Esempi di Design Pattern Factory Esempi di Design Pattern Adapter Esempi di Design Pattern Observer Un’applicazione reale • Utilizziamo l’UML per documentare l’applicazione Northwind • Manutenere i diagrammi UML in sincronia con il codice sorgente non è una sfida da poco – Molti tool di modellazione UML fanno il Reverse-Engineering, il Forward-Engineering e il Round-Trip modeling DEMO • Reverse Engineering di Northwind • Individuazione dei pattern sui diagrammi UML • Progettazione e realizzazione di un DataProvider aggiuntivo “Agile” UML! • Non correte il rischio di “over-designing” – Utilizzate UML con dosi sostenibili – Trovate il giusto livello di dettaglio da applicare ai diagrammi • Dal punto di vista di artefatti UML=Documentazione • Ricordatevi del manifesto: “Software funzionante invece che documentazione esaustiva” “Agile” UML! • Non diventate schiavi dei vostri diagrammi – Molti diagrammi possono servire per “pensare” prima di scrivere, poi possono essere gettati via! – L’obiettivo finale non è costruire modelli, ma sistemi software – Se decidete di mantenere i diagrammi dotatevi di un tool che li sincronizzi al meglio con il codice – I diagrammi di più alto livello (architetturali o concettuali) hanno un valore che giustifica la loro manutenzione nel tempo “Agile” UML! • Non ve la sentite di fare pair-programming? Provate il pair-designing! Il rendimento è garantito • La condivisione delle conoscenze è più immediata sui diagrammi che sul codice • La memoria visiva è più duratura nel tempo, le righe di codice si dimenticano Questions & Answers Sito ufficiale: http://www.uml.org/ Libri: • UML Distilled (Martin Fowler, Kendall Scott) – Addison Wesley • The Unified Modeling Language Reference (James Rambaugh, Ivar Jacobson, Grady Booch) - Addison Wesley • Writing Effective Use Cases (Alistair Cockburn) - Addison Wesley Omid Ehsani Senior Consultant and Trainer [email protected]