Unified Modeling Language
Da Wikipedia, l'enciclopedia libera.
In ingegneria del software, UML (Unified Modeling Language, "linguaggio di modellazione unificato") è un linguaggio di modellazione e specifica basato sul paradigma object-oriented. Il nucleo del linguaggio fu definito nel 1996 da Grady Booch, Jim Rumbaugh e Ivar Jacobson (detti "i tre amigos") sotto l'egida dello OMG, che tuttora gestisce lo standard di UML. Il linguaggio nacque con l'intento di unificare approcci precedenti (dovuti ai tre padri di UML e altri), raccogliendo le best practices nel settore e definendo così uno standard industriale unificato.
UML svolge un'importantissima funzione di lingua franca nella comunità della progettazione e programmazione a oggetti. Gran parte della letteratura di settore usa UML per descrivere soluzioni analitiche e progettuali in modo sintetico e comprensibile a un vasto pubblico.
L'ultima versione del linguaggio, la 2.0, è stata consolidata nel 2004 e ufficializzata da OMG nel 2005. UML 2.0 riorganizza molti degli elementi della versione precedente (1.5) in un quadro di riferimento ampliato e introduce molti nuovi strumenti, inclusi alcuni nuovi tipi di diagrammi. Sebbene OMG indichi UML 2.0 come la versione "corrente" del linguaggio, la transizione è di fatto ancora in corso; le stesse specifiche pubblicate da OMG sono ancora non completamente aggiornate e il supporto dei tool a UML 2.0 è, nella maggior parte dei casi, appena abbozzato.
Indice
|
[modifica] Applicazioni
Di per sé, UML è solo un linguaggio di modellazione, e non definisce alcuna specifica metodologia per la creazione di modelli (o alcun processo software). UML può quindi essere utilizzato nel contesto di diversi approcci metodologici. La OMG gestisce uno standard metodologico, correlato a UML ma proposto come specifica indipendente, detto RUP.
UML consente di costruire modelli object-oriented per rappresentare domini di diverso genere. Nel contesto dell'ingegneria del software, viene usato soprattutto per descrivere il dominio applicativo di un sistema software e/o il comportamento e la struttura del sistema stesso. Il modello è strutturato secondo un insieme di viste che rappresentano diversi aspetti della cosa modellata (funzionamento, struttura, comportamento, e così via), sia a scopo di analisi che di progetto, mantenendo la tracciabilità dei concetti impiegati nelle diverse viste. Oltre che per la modellazione di sistemi software, UML viene non di rado impiegato per descrivere domini di altri tipi, come sistemi hardware, strutture organizzative aziendali, processi di business.
Lo standard UML, gestito da OMG, definisce una sintassi e delle regole di interpretazione; non si tratta quindi di una metodologia di progettazione e per questo motivo può essere adottato con diverse metodologie o in ambiti diversi da quello informatico. UML = FDP
[modifica] Caratteristiche generali
La notazione UML è semi-grafica e semi-formale; un modello UML è costituito da una collezione organizzata di diagrammi correlati, costruiti componendo elementi grafici (con significato formalmente definito), elementi testuali formali, ed elementi di testo libero. Ha una semantica molto precisa e un grande potere descrittivo.
Il linguaggio è stato progettato con l'obiettivo esplicito di facilitare il supporto software alla costruzione di modelli e l'integrazione di questo supporto con gli ambienti integrati di sviluppo. OMG, in particolare, gestisce una famiglia di standard correlata a UML, detta Model Driven Architecture (MDA), che ha lo scopo di fornire le fondamenta concettuali e semantiche per lo sviluppo di ambienti evoluti di roundtrip engineering in cui la modellazione UML, in qualche misura, possa sostituire di fatto la programmazione tradizionale. Sebbene questo obiettivo sia ancora da raggiungere, molti IDE comprendono strumenti di modellazione in UML e forniscono meccanismi automatici di traduzione parziale dei diagrammi UML in codice e viceversa. Viceversa, molti ambienti software dedicati alla modellazione in UML consentono di generare codice in diversi linguaggi.
UML è un linguaggio di modellazione general purpose, che fornisce concetti e strumenti applicabili in tutti i contesti. Poiché particolari domini applicativi o famiglie di applicazioni potrebbero aver bisogno di concetti ulteriori e specifici, UML fornisce un meccanismo standard che consente di estendere il linguaggio. Una estensione di UML per un particolare contesto viene detta un profilo UML.
[modifica] Storia
I linguaggi per la modellazione object-oriented iniziarono a svilupparsi in diversi contesti a partire dagli anni '80. Si trattava di notazioni di varia natura, che consentivano di descrivere la struttura di un sistema software a oggetti (in termini di classi e relazioni fra classi) ed eventualmente il suo comportamento dinamico. La proliferazione di queste notazioni diede luogo a quelle che furono poi battezzate "guerre dei metodi" (method wars), con diversi progettisti, o organizzazioni, che adottavano e sostenevano una particolare notazione a scapito di altre adottate altrove. Intorno alla metà degli anni '90 diversi metodi e linguaggi iniziarono a fondersi, e si iniziò a delineare la possibilità di una integrazione dei principali formalismi in una notazione universalmente accettabile.
Fra le metodologie e le notazioni più apprezzate e diffuse del periodo spiccavano OMT (Object Modeling Technique) di Jim Rumbaugh, e il cosiddetto metodo Booch di Grady Booch, entrambi ricercatori presso Rational Software. Il lavoro di unificazione iniziò con loro; in seguito si unì a questo sforzo Jacobson con la sua software house Objectory. Il primo risultato congiunto di questo team fu OOSE (Object Oriented Software Engineering).
Mentre "i tres amigos" operavano per unificare i propri approcci all'analisi e alla progettazione a oggetti, il progetto fu accolto sotto l'egida dell'OMG (Object Management Group), un consorzio fondato con l'obiettivo di creare e gestire standard nel contesto dello sviluppo del software a oggetti. Nel 1995, l'OMG raccolse tutti i principali metodologisti del settore in un incontro internazionale per discutere della notazione unificata. Nel 1996 l'OMG emise una RFP (Request for Proposal) per tale notazione. Nello stesso anno, Booch, Rumbaugh e Jacobson misero a punto le release 0.9 e 0.91 di UML. Il progetto fu ben accolto dalla comunità internazionale e innumerevoli grandi organizzazioni si unirono a Rational per proseguirlo (per esempio Digital, Hewlett-Packard, IBM, Microsoft, Oracle e Unisys). Questo gruppo esteso realizzò, nel 1997, UML 1.0, che fu sottoposto alla OMG come risposta alla RFP dell'anno precedente.
La release 1.1 di UML contribuì a consolidare la semantica del linguaggio e incluse elementi tratti da una proposta avanzata indipendentemente all'OMG da un gruppo composto da IBM, ObjectTime, Ptech e altre.
[modifica] UML 2.0
La versione 2.0 di UML, ufficializzata da OMG nel 2005, presenta numerose novità rispetto alla precedente versione 1.5, che resta comunque quella più diffusamente supportata dai tool di modellazione e citata nella letteratura.
Fra le principali novità di UML 2.0 si possono citare:
- ampliamento, razionalizzazione e revisione del metamodello, inclusa una definizione più rigorosa del concetto di stereotipo e dei meccanismi di estensione (profili)
- introduzione del linguaggio formale OCL come parte integrante di UML
- numerosi nuovi elementi per la costruzione dei diagrammi tradizionali
- alcuni nuovi tipi di diagrammi:
- Composite Structure Diagram
- Package Diagram
- Interaction Overview Diagram
- Timing Diagram
- supporto per l'approccio Model Driven Architecture
Alcuni elementi di modello e diagrammi hanno cambiato nome; per esempio, i Collaboration Diagram si chiamano ora Communication Diagram.
[modifica] Aspetti della modellazione
UML consente di descrivere un sistema secondo tre aspetti principali, per ciascuno dei quali si utilizzano un insieme di tipi di diagrammi specifici (che possono poi essere messi in relazione fra loro):
- il modello funzionale (functional model) rappresenta il sistema dal punto di vista dell'utente, ovvero ne descrive il suo comportamento così come esso è percepito all'esterno, prescindendo dal suo funzionamento interno. Questo tipo di modellazione corrisponde, in ingegneria del software, all'analisi dei requisiti. La modellazione funzionale utilizza gli Use Case Diagram (diagrammi dei casi d'uso).
- il modello a oggetti (object model) rappresenta la struttura e sottostruttura del sistema utilizzando i concetti object-oriented di classe, oggetto, le relazioni fra classi e fra oggetti. In ingegneria del software, questo tipo di modellazione può essere utilizzata sia nella fase di analisi del dominio che nelle varie fasi di progetto a diversi livelli di dettaglio. Utilizza class diagram (diagrammi delle classi), object diagram (diagrammi degli oggetti), e deployment diagram (diagrammi di deployment).
- il modello dinamico (dynamic model) rappresenta il comportamento degli oggetti del sistema, ovvero la loro evoluzione nel tempo e le dinamiche delle loro interazioni. È strettamente legato al modello a oggetti e viene impiegato negli stessi casi. Utilizza i sequence diagram (diagrammi di sequenza), gli activity diagram (diagrammi delle attività) e gli statechart diagram (diagrammi degli stati).
[modifica] Struttura di un modello UML
Un modello UML è costituito da:
- Viste: mostrano i diversi aspetti del sistema per mezzo di un insieme di diagrammi.
- Diagrammi: permettono di descrivere graficamente le viste logiche.
- Elementi del modello: concetti che permettono di realizzare vari diagrammi (es. attori, classi, packages, oggetti, e così via).
[modifica] Le Viste
Lo strato più esterno dell’UML è costituito dalle seguenti viste:
- Vista dei casi d'uso (Use Case View) utilizzata per analizzare i requisiti utente. Obiettivo di questo livello di analisi è studiare il sistema considerandolo come una scatola nera. È necessario concentrarsi su cosa il sistema deve fare astraendosi il più possibile dal come: è necessario individuare tutti gli attori, i casi d'uso e le relative associazioni. Importante è dettagliare i requisiti del cliente, capirne i desideri più o meno consapevoli, cercare di prevedere i possibili sviluppi futuri, ecc.
- Vista di progettazione (Design View) descrive come le funzionalità del sistema devono essere realizzate; in altre parole analizza il sistema dall'interno (scatola trasparente).
- Vista di implementazione (Implementation View) descrive i packages, le classi e le reciproche dipendenze.
- Vista dei processi (Process View) individua i processi e le entità che li eseguono sia per un utilizzo efficace delle risorse, sia per poter stabilire l'esecuzione parallela degli oggetti.
- Vista di sviluppo (Deployment View) mostrano l'architettura fisica del sistema e definisce la posizione delle componenti software nella struttura stessa.
[modifica] I diagrammi classici (UML 1.x)
[modifica] Diagramma dei casi d'uso
Per approfondire, vedi la voce Use Case Diagram. |
I diagrammi dei casi d'uso (UCD) modellano il comportamento esterno di un sistema in termini delle funzioni che esso mette a disposizione agli attori che interagiscono con essi (utenti, altri sistemi software, ecc.). Gli UCD sono il diagramma principale nella Vista dei casi d'uso. In molti modelli di processo software basati su UML, i casi d'uso sono la vista principale del sistema (processi "use case driven").
[modifica] Class Diagram
Per approfondire, vedi la voce Class Diagram. |
[modifica] Object Diagram
Per approfondire, vedi la voce Object Diagram. |
[modifica] Statechart Diagram
Per approfondire, vedi la voce Statechart Diagram. |
[modifica] Activity Diagram
Per approfondire, vedi la voce Activity Diagram. |
[modifica] Sequence Diagram
Per approfondire, vedi la voce Sequence Diagram. |
[modifica] Communication Diagram
Nota: questo tipo di diagramma si chiamava "Collaboration Diagram" in UML 1.x
Per approfondire, vedi la voce Communication Diagram. |
[modifica] Component Diagram
Per approfondire, vedi la voce Component Diagram. |
[modifica] Deployment Diagram
Per approfondire, vedi la voce Deployment Diagram. |
[modifica] Relazioni fra diagrammi
In particolare, il diagramma delle classi ed i diagrammi di interazione vengono usati per modellare la realizzazione dei casi d'uso, mentre il diagramma dei componenti e quello di deployment permettono di specificare l'architettura di sistema che dovrà implementare i casi d'uso. Un ruolo specifico può, però, essere svolto dai diagrammi di stato e di attività. È possibile utilizzare un diagramma di stato per rappresentare l'evoluzione degli stati, cioè delle condizioni in cui il sistema si può trovare durante l'esecuzione del caso d'uso. Ed è possibile rappresentare, con un diagramma di attività, la sequenza dei passi e le condizioni che specificano uno o più scenari del caso d'uso. I diagrammi UML permettono la modellazione della struttura statica e del comportamento dinamico di un sistema. Il sistema è rappresentato come un insieme di oggetti (moduli software) che collaborano e reagiscono ad eventi esterni per eseguire attività a beneficio dei clienti (utilizzatori). Certi modelli UML enfatizzano alcuni aspetti del sistema e ne ignorano altri, che possono essere evidenziati da altri modelli. Insieme, tutti i modelli forniscono una descrizione completa del sistema e possono essere classificati in tre gruppi:
- modelli dello stato (vista statica): descrivono le strutture statiche dei dati, e si possono ottenere utilizzando per esempio i diagrammi delle classi;
- modelli del comportamento (vista operativa): descrivono la collaborazione tra oggetti. Ci sono molte tecniche di visualizzazione per la modellazione del comportamento, come il diagramma dei casi d'uso, il diagramma di sequenza, il diagramma di collaborazione e il diagramma di attività;
- modelli del cambiamento di stato (vista dinamica): descrivono gli stati permessi dal sistema nel tempo. La prima tecniche di visualizzazione è il diagramma degli stati, basato su un modello di evoluzione degli stati di un oggetto.
[modifica] Nuovi diagrammi introdotti in UML 2.0
[modifica] Package Diagram
Per approfondire, vedi la voce Package Diagram. |
[modifica] Composite Structure Diagram
Per approfondire, vedi la voce Composite Structure Diagram. |
[modifica] Timing Diagram
Per approfondire, vedi la voce Timing Diagram. |
[modifica] Interaction Overview Diagram
Per approfondire, vedi la voce Interaction Overview Diagram. |
[modifica] Estendibilità e profili
UML include tre meccanismi che consentono l'estensione della sua sintassi e della sua semantica da parte dell'utente: stereotipi, tagged values e constraints. Questi strumenti possono essere usati nel contesto di un modello per esprimere concetti altrimenti non rappresentabili in UML, o non rappresentabili in modo chiaro, sufficientemente astratto, e così via. I profili UML sono collezioni di stereotipi, tagged values e constraints che specializzano il linguaggio per particolari domini applicativi o per l'uso di UML in congiunzione con particolare tecnologie. Fra i profili riconosciuti ufficialmente da OMG si trovano profili per CORBA, per i sistemi distribuiti, per sistemi con vincoli di QoS e per sistemi real-time.
[modifica] Tool software per UML
Esistono moltissimi strumenti software per la modellazione in UML, e moltissimi ambienti integrati di sviluppo che includono funzioni di modellazione in UML.
[modifica] Strumenti freeware e open source
Si riportano qui alcuni strumenti freeware e open source per la modellazione in UML. Si veda anche il sito ufficiale di UML per un elenco aggiornato. La maggior parte di questi tool supportano solo parzialmente (o non supportano affatto) la versione 2.0 di UML.
- ArgoUML [1] – un tool UML basato su Java
- ATL [2]
- BOUML [3], sotto GPL ;
- Dia [4] – un tool per creare diagrammi GTK+/GNOME che supporta anche UML [5].
- Eclipse – con lo Eclipse Modeling Framework (EMF) e UML 2.0
- Fujaba [6] – piattaforma di sviluppo UML/Java; ne esiste una versione per Eclipse.
- MonoUML – progetto basato sulla piattaforma Mono, GTK+ e ExpertCoder.
- NetBeans [7] – plugin per l'ambiente NetBeans di Sun
- StarUML [8] – Piattaforma MDA UML open source (in GPL)
- Umbrello UML Modeller – componente del KDE.
- UML Pad [9]
- UMLet [10] – un tool basato su Java.
[modifica] Strumenti commerciali
- Altova UModel 2005 [11]
- ARTiSAN Studio [12]
- Borland Together
- Cadifra UML Editor
- ConceptDraw [13]
- I-Logix Rhapsody [14]
- Jude
- Modelistic JME
- Microsoft Visio
- Objecteering/UML [15]
- OmniGraffle
- Poseidon for UML
- Rational Rose, di Rational Software, è di gran lunga lo strumento più noto e diffuso. È anche il primo ambiente UML della storia: due dei tre padri di UML lavoravano inizialmente per la Rational Software.
- Rational Software Architect – come sopra
- SMARTDRAW [16]
- Sparx Enterprise Architect
- Select Component Factory [17]
- swREUSER
- Telelogic System Architect [18]
- Unimodeler [19]
- Visual Paradigm [20]
[modifica] Voci correlate
- Programmazione orientata agli oggetti
- Analisi (ingegneria del software)
- Analisi dei requisiti
- Analisi del dominio
- Analisi orientata agli oggetti
- Design pattern
- Progetto (ingegneria del software)
- Progetto orientato agli oggetti
[modifica] Bibliografia
- Grady Booch, James Rumbaugh, Ivar Jacobson: Unified Modeling Language User Guide, Addison-Wesley 1999
- Ivar Jacobson, Grady Booch, James Rumbaugh: Unified Software Development Process, Addison-Wesley 1999
- James Rumbaugh, Ivar Jacobson, Grady Booch: Unified Modeling Language Reference Manual, Addison-Wesley 2004 (tratta UML 2.0)
- Martin Fowler: Uml Distilled : Applying the Standard Object Modeling Language, Addison-Wesley 2003 (tratta UML 2.0)
- Craig Larman: Applying Uml and Patterns: An Introduction to Object-Oriented Analysis and Design and the Unified Process, Prentice Hall 2005
- Robert C. Martin: UML for Java Programmers, Addison Wesley 2003 (UML e la programmazione in Java
[modifica] Collegamenti esterni
- Sito ufficiale dell'UML
- Tutorial presso Sparx Systems
- Mokabyte fornisce un libro online su UML (richiede registrazione)
- Il sito internazionale su UML
- Il sito ATL
- UML Jokes