Unified Modeling Language: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Djdomix (discussione | contributi)
CheckWikiBOT (discussione | contributi)
m Bot: inserimento portale (via JWB)
 
(273 versioni intermedie di oltre 100 utenti non mostrate)
Riga 1:
{{Nota disambigua||UML (disambigua)|UML}}
In [[ingegneria del software]], '''UML''' ('''U'''nified '''M'''odeling '''L'''anguage, "linguaggio di modellazione unificato") è un [[linguaggio di modellazione]] e [[linguaggio di specifica|specifica]] standard basato su concetti ''[[programmazione orientata agli oggetti|object-oriented]]''. Il nucleo del linguaggio fu definito nel [[1996]] da [[Grady Booch]], [[Jim Rumbaugh]] e [[Ivar Jacobson]] (detti "i tre gringos") sotto l'egida dello [[Object Management Group|OMG]], che tuttora gestisce lo standard di UML. Il linguaggio nacque con l'intento di unificare le notazioni di modellazione sviluppate in precedenza, indipendentemente, dai tre padri di UML. In questo senso, il linguaggio rappresenta la ''summa'' delle ''[[best practice]]s'' nel campo della modellazione a oggetti.
[[File:UML logo.svg|frameless|right]]
[[File:UML Diagrams.jpg|thumb|upright=1.4|Raccolta di diagrammi UML]]
In [[ingegneria del software]], '''UML''' (''Unified Modeling Language'', "linguaggio di modellizzazione unificato") è un [[linguaggio di modellazione]] e [[linguaggio di specifica|di specifica]] basato sul [[paradigma object-oriented|paradigma orientato agli oggetti]]. Il nucleo del linguaggio fu definito nel 1996 da [[Grady Booch]], [[Jim Rumbaugh]] e [[Ivar Jacobson]] (detti "i tre amigos") sotto l'egida dell'[[Object Management Group|Object Management Group (OMG)]], consorzio che tuttora gestisce lo standard UML.
 
== Storia ==
Il linguaggio consente di rappresentare in [[modello]] un [[sistema software]] ''object-oriented'' secondo numerosi aspetti (funzionali, strutturali, dinamici) e a diversi livelli di dettaglio, con una flessibilità sufficiente a garantire la realizzabilità di modelli accurati sia nella fase di [[analisi (ingegneria del software)|analisi]] che nelle varie fasi di [[progetto (ingegneria del software)|progetto]] a diversi livelli di raffinamento, mantenendo la [[tracciabilità]] dei concetti impiegati per modellare il sistema in queste varie fasi.
I linguaggi per la modellazione orientata agli oggetti iniziarono a svilupparsi in diversi contesti a partire dagli [[anni 1980|anni ottanta]]. Si trattava di notazioni di varia natura, che consentivano di descrivere la struttura di un sistema software a oggetti, in termini di [[classe (informatica)|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 1990|anni novanta]] 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 i metodi e le notazioni più apprezzati e diffusi del periodo spiccavano [[Object Modeling Technique|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 [[casa di sviluppo]] [[Objectory]]. Il primo risultato congiunto di questo ''team'' fu [[OOSE|OOSE (Object Oriented Software Engineering)]].
Il linguaggio ha una [[semantica (informatica)|semantica]] molto precisa, e un grande potere descrittivo, caratteristiche che ne hanno decretato il successo anche al di fuori dell'ambito in cui esso era nato; attualmente, non sono rari i casi di sistemi software ''non object-oriented'' modellati in UML, o addirittura modelli UML di sistemi o oggetti di altra natura (per esempio sistemi [[hardware]], strutture organizzative aziendali, [[processo di business|processi di business]] e così via.
 
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'[[Object Management Group|OMG (Object Management Group)]], un consorzio fondato con l'obiettivo di creare e gestire [[Norma tecnica|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 [[Request for proposal|RFP (Request for Proposal)]] per questa notazione. Nello stesso anno Booch, Rumbaugh e Jacobson misero a punto le ''[[release (informatica)|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 Corporation|Oracle]] e [[Unisys]]. Nel 1997 questo gruppo esteso realizzò UML 1.0 che fu sottoposto alla OMG come risposta alla RFP dell'anno precedente.
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.
 
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.
La notazione è semi-grafica e [[linguaggio formale|semi-formale]]; un modello UML è costituito da una collezione organizzata di [[diagramma|diagrammi]] correlati, costituiti da segni grafici (con significato formalmente definito), elementi testuali formali, ed elementi di testo libero.
 
== Descrizione ==
Attualmente, l'uso di UML è estremamente diffuso. La maggior parte dei testi che trattano di analisi e progettazione ''object-oriented'' utilizzano UML per descrivere soluzioni analitiche e progettuali in modo sintetico e comprensibile a un vasto pubblico. Molti [[Integrated development environment|ambienti integrati di sviluppo]] per linguaggi a oggetti come [[Java]] o [[C++]] comprendono strumenti di modellazione in UML, eventualmente con meccanismi automatici di traduzione parziale dei diagrammi UML in [[codice sorgente|codice]]. Viceversa, sono anche disponibili ambienti software sofisticati dedicati alla modellazione in UML che consentono (solitamente attraverso opportune estensioni) di generare codice in diversi linguaggi. Fra gli ambienti più noti di quest'ultima categoria va senz'altro citato ''[[Rational Rose]]'' di [[Rational Software]] (un'organizzazione a cui appartenevano due dei tre padri di UML).
Il linguaggio nacque con l'intento di unificare approcci precedenti, dovuti ai tre padri di UML e altri, raccogliendo le [[best practice|migliori prassi]] nel settore e definendo così uno [[industria del software|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.
 
La versione 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 [[Object Management Group|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. L'ultima versione è la 2.5, finalizzata nel 2013.
==Storia==
 
=== Caratteristiche generali ===
I linguaggi per la modellazione object-oriented iniziarono a svilupparsi in diversi contesti a partire dagli [[anni 1980|anni '80]]. Si trattava di notazioni di varia natura, che consentivano di descrivere la struttura di un sistema software a oggetti (in termini di [[classe|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 1990|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.
La notazione UML è semi-grafica e [[Linguaggio formale|semi-formale]]; un modello UML è costituito da una collezione organizzata di [[diagramma|diagrammi]] correlati, costruiti componendo elementi grafici con significato formalmente definito, elementi testuali formali, ed elementi di testo libero. Ha una [[semantica (informatica)|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 [[Integrated development environment|ambienti integrati di sviluppo]]. In particolare, OMG 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 ''[[round-trip engineering]]'' in cui la modellazione UML possa sostituire di fatto la programmazione tradizionale in qualche misura. Sebbene questo obiettivo sia ancora da raggiungere, molti [[Ambiente di sviluppo integrato|IDE]] comprendono strumenti di modellazione in UML e forniscono meccanismi automatici di traduzione parziale dei diagrammi UML in [[codice sorgente|codice]] e viceversa. Viceversa, molti ambienti software dedicati alla modellazione in UML consentono di generare codice in diversi linguaggi.
Fra le metodologie e le notazioni più apprezzate e diffuse del periodo spiccavano [[Object Modeling Technique|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|OOSE (Object Oriented Software Engineering)]].
 
UML è un linguaggio di modellazione generale 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. Un'estensione di UML per un particolare contesto viene detta un [[profilo UML]].
Mentre "i tre gringos" operavano per unificare i propri approcci all'analisi e alla progettazione a oggetti, il progetto fu accolto sotto l'egida dell'[[Object Management Group|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 [[Request for proposal|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.
 
=== Aspetti della modellazione ===
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.
 
UML consente di descrivere un sistema secondo tre aspetti principali, per ciascuno dei quali si utilizzano diagrammi specifici che possono poi essere messi in relazione fra loro:
==Aspetti della modellazione==
 
* 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).
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 a oggetti (''object model'') rappresenta la struttura e sottostruttura del sistema utilizzando i concetti ''object-oriented'' di [[Classe (informatica)|classe]], [[Oggetto (informatica)|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]] sia nelle varie fasi di [[progetto (ingegneria del software)|progetto]] a diversi livelli di dettaglio. Utilizza ''[[class diagram]]'' (diagrammi delle classi), ''[[object diagram]]'' (diagrammi degli oggetti), e ''[[deployment diagram]]'' (diagrammi di sviluppo).
* 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), i [[Diagramma di attività|diagrammi delle attività]] e gli ''[[statechart diagram]]'' (diagrammi degli stati).
 
=== UML 2.0 ===
*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).
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 dagli strumenti di modellazione e citata nella letteratura.
 
Fra le principali novità di UML 2.0 vi sono:
*il modello a oggetti (''object model'') rappresenta la struttura e sottostruttura del sistema utilizzando i concetti ''object-oriented'' di [[Classe (informatica)|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 (ingegneria del software)|progetto]] a diversi livelli di dettaglio. Utilizza ''[[class diagram]]'' (diagrammi delle classi), ''[[object diagram]]'' (diagrammi degli oggetti), e ''[[deployment diagram]]'' (diagrammi di [[deployment]]).
* ampliamento, razionalizzazione e revisione del metamodello, inclusa una definizione più rigorosa del concetto di [[stereotipo (UML)|stereotipo]] e dei meccanismi di estensione ([[profilo UML|profili]])
* introduzione del linguaggio formale [[Object Constraint Language|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|Diagramma temporale]]
* supporto per l'approccio [[architettura guidata dal modello]]
 
Alcuni elementi di modello e diagrammi hanno cambiato nome; per esempio, i ''collaboration diagram'' si chiamano ora ''communication diagram''.
*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).
 
=== Struttura dell'UMLApplicazioni == =
UML non definisce alcuno specifico metodo per la creazione di modelli. UML può quindi essere utilizzato nel contesto di diversi approcci. La OMG gestisce un metodo standard correlato a UML, ma proposto come specifica indipendente, detto [[Rational Unified Process|RUP]].
 
UML consente di costruire [[modello software|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), a scopo sia di [[analisi (ingegneria del software)|analisi]] sia di [[progetto (ingegneria del software)|progetto]], mantenendo la [[tracciabilità (informatica)|tracciabilità]] dei concetti impiegati nelle diverse viste. Oltre che per la modellazione di sistemi software, UML viene spesso impiegato per descrivere domini di altri tipi come sistemi [[hardware]], strutture organizzative aziendali, [[processo di business|processi di business]].
L’UML presenta una tipica struttura a strati; procedendo dall'esterno verso l'interno, essa è costituita da:
 
Lo standard UML, gestito da OMG, definisce una sintassi e delle regole di interpretazione; non si tratta quindi di un metodo di progettazione e per questo motivo può essere adottato con diversi metodi o in ambiti diversi da quello informatico.
 
== 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, ''package'', oggetti, e così via).
 
packages, oggetti, e così via).
=== Le Viste ===
Lo strato più esterno dell'UML è costituito dalle seguenti [[Vista (UML)|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 package, 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'') mostra l'architettura fisica del sistema e definisce la posizione delle componenti software nella struttura stessa.
 
=== I diagrammi classici (UML 1.x) ===
 
==== Diagramma dei casi d'uso ====
{{Vedi anche|Diagramma dei casi d'uso}}
I diagrammi dei casi d'uso (UCD) modellano il ''comportamento esterno'' di un [[sistema]] in termini delle [[Funzione (informatica)|funzioni]] che esso mette a disposizione agli [[Actor (UML)|attori]] che interagiscono con essi (utenti, altri sistemi software, ecc.). Gli UCD sono il diagramma principale nella [[Use Case View|vista dei casi d'uso]]. In molti [[Modello di sviluppo del software|modelli di sviluppo software]] basati su UML, i casi d'uso sono la vista principale del sistema (processi "use case driven").
 
==== Diagramma delle classi ====
{{Vedi anche|Diagramma delle classi}}
 
==== Diagramma degli oggetti ====
{{Vedi anche|Diagramma degli oggetti}}
 
==== Diagramma degli stati UML ====
{{Vedi anche|Diagramma degli stati UML}}
 
==== Diagramma di attività ====
{{Vedi anche|Diagramma di attività}}
 
==== Diagramma di sequenza ====
{{Vedi anche|Diagramma di sequenza}}
 
==== Diagramma di comunicazione ====
{{Vedi anche|Diagramma di comunicazione}}
<small>'''Nota''': questo tipo di diagramma si chiamava "diagramma di collaborazione" (collaboration diagram) in UML 1.x</small>
 
==== Diagramma dei componenti ====
{{Vedi anche|Diagramma dei componenti}}
 
==== Diagramma di deployment ====
{{Vedi anche|Diagramma di deployment}}
 
====Relazioni fra diagrammi====
Il diagramma delle classi e 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ò 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. Inoltre è possibile rappresentare la sequenza dei passi e le condizioni che specificano uno o più scenari del caso d'uso con un diagramma di attività. 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 a 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 tecnica di visualizzazione è il diagramma degli stati, basato su un modello di evoluzione degli stati di un oggetto.
 
=== Diagrammi introdotti in UML 2.0 ===
 
==== Package Diagram ====
{{Vedi anche|Package Diagram}}
 
==== Composite Structure Diagram ====
{{Vedi anche|Composite Structure Diagram}}
 
==== Timing Diagram ====
{{Vedi anche|Timing Diagram}}
 
==== Interaction Overview Diagram ====
{{Vedi anche|Interaction Overview Diagram}}
 
=== Estendibilità e profili ===
 
UML include tre meccanismi che consentono l'estensione della sua [[sintassi]] e della sua [[semantica]] da parte dell'utente: ''[[stereotipo (UML)|stereotipi]]'', ''[[tagged value]]'' e ''[[constraint]]''. 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 [[profilo UML|profili UML]] sono collezioni di stereotipi, ''tagged value'' e ''constraint'' che specializzano il linguaggio per particolari [[dominio applicativo|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 [[calcolo distribuito|sistemi distribuiti]], per sistemi con vincoli di [[Quality of Service|QoS]] e per [[sistema real-time|sistemi real-time]].
 
== Software per UML ==
 
Esistono moltissimi strumenti software per la modellazione in UML e moltissimi [[Integrated development environment|ambienti integrati di sviluppo]] che includono funzioni di modellazione in UML.
 
=== Strumenti liberi ===
Si riportano qui alcuni strumenti [[free and open source software|liberi ed open source]] per la modellazione in UML. Si veda anche il [http://www.uml.org sito ufficiale di UML] per un elenco aggiornato. La maggior parte di questi strumenti supporta solo parzialmente o non supporta la versione 2.0 di UML.
* [[ArgoUML]] [https://web.archive.org/web/20000607173157/http://argouml.tigris.org/] – uno strumento UML basato su [[Java (linguaggio di programmazione)|Java]]
* [[Atlas Transformation Language|ATL]] [https://web.archive.org/web/20060411081917/http://www.sciences.univ-nantes.fr/lina/atl/]
*[[BOUML]] [http://www.bouml.fr], licenza nuovamente libera dalla versione 7.0; supporta anche UML 2.0
* [[Dia (software)|Dia]] [http://dia-installer.de/] – uno strumento per creare diagrammi [[GTK+]]/[[GNOME]] che supporta anche UML [http://www.aarontrevena.co.uk/opensource/autodia/].
* [[Draw.io]] [https://www.draw.io/] - software di diagramma uml online gratuito.
* [[Eclipse (informatica)|Eclipse]] – con lo Eclipse Modeling Framework (EMF) e UML 2.0
* [[Fujaba]] [https://web.archive.org/web/20060207103104/http://wwwcs.uni-paderborn.de/cs/fujaba/] – piattaforma di sviluppo UML/Java; ne esiste una versione per Eclipse.
* [[Gaphor]] [https://gaphor.org/] - Programma in Python per UML, SysML, RAAML e modelli C4.
* [[GitMind]] [https://gitmind.com/it/] - esempi di diagrammi uml pronti all'uso gratuiti.
* [[MonoUML]] – progetto basato sulla piattaforma [[Mono (progetto)|Mono]], GTK+ e [[ExpertCoder]].
* [[NetBeans]] [http://uml.netbeans.org/] – plugin per l'ambiente NetBeans di Sun (non più disponibile da netbeans 6.7 in poi)
* [[StarUML]] [https://sourceforge.net/projects/staruml/] – Piattaforma [[Model Driven Architecture|MDA]] UML ''[[open source]]'' (in [[GNU General Public License|GPL]])
* [[Umbrello UML Modeller]] – componente del [[KDE]].
* [[UML Pad]] [http://web.tiscali.it/ggbhome/umlpad/umlpad.htm] – strumento sviluppato in [[wxWidgets]] leggero e senza installazione (compresso in un file zip).
* [[UMLet]] [http://www.umlet.com/] – uno strumento basato su Java.
* Violet UML Editor [http://alexdp.free.fr/violetumleditor/page.php <nowiki>[21]</nowiki>] – uno strumento visuale basato su Java.
 
=== LeStrumenti visteproprietari ===
Si riportano [[software proprietario|strumenti proprietari]] per la modellazione UML.
Lo strato più esterno dell’UML è costituito dalle seguenti viste:
* [[Altova UModel 2005]] [http://www.altova.com/products_umodel.html]
# Use Case View (casi d'uso) utilizzata per analizzare i requisiti utente. Obiettivo di questo livello di analisi
* [[ARTiSAN Studio]] [http://www.artisansw.it]
è studiare il sistema considerandolo come una scatola nera. È necessario concentrarsi su cosa il
* [[Borland Together]]
sistema deve fare astraendosi il più possibile dal come: è necessario individuare tutti gli attori, i casi
* [[Cadifra UML Editor]]
d'uso e le relative associazioni. Importante è dettagliare i requisiti del cliente, capirne i desideri più o
* [[Creately]] [http://www.creately.com/]
meno consapevoli, cercare di prevedere i possibili sviluppi futuri, ecc.
* [[Gliffy]] [https://www.gliffy.com]
# Design View (progetto o disegno) descrive come le funzionalità del sistema devono essere realizzate; in
* [[I-Logix Rhapsody]] [https://web.archive.org/web/20040630065716/http://www.ilogix.com/rhapsody/rhapsody.cfm]
altre parole analizza il sistema dall'interno (scatola trasparente).
* [[Jude (applicazione)|Jude]]
# Implementation View (implementazione) descrive i packages, le classi e le reciproche dipendenze.
* [[NoMagic MagicDraw]] [http://www.magicdraw.com]
# Process View (processi) individua i processi e le entità che li eseguono sia per un utilizzo efficace delle
* [[Lucidchart]] [https://www.lucidchart.com/]
risorse, sia per poter stabilire l'esecuzione parallela degli oggetti.
* [[Modelistic JME]]
# Deployment View ("rilascio") mostrano l'architettura fisica del sistema e definisce la posizione delle
* [[Microsoft Visio]]
componenti software nella struttura stessa.
* [[Objecteering/UML]] [https://web.archive.org/web/20060206023347/http://www.objecteering.com/products.php]
* [[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]] [http://www.smartdraw.com/]
* [[Sparx Enterprise Architect]]
* [[Select Component Factory]] [http://www.selectbs.com/downloads/downloads.htm] {{Webarchive|url=https://web.archive.org/web/20060412022759/http://www.selectbs.com/downloads/downloads.htm |date=12 aprile 2006 }}
* [[Software Ideas Modeler]] [https://www.softwareideas.net]
* [[swREUSER]]
* [[Telelogic System Architect]] [https://web.archive.org/web/20051107232824/http://www.popkin.com/products/system_architect.htm]
* [[Unimodeler]] [http://www.unimodeler.com] {{Webarchive|url=https://web.archive.org/web/20041206025323/http://www.unimodeler.com/ |date=6 dicembre 2004 }}
* [[Visual Paradigm]] [https://www.visual-paradigm.com/]
 
=== I diagrammiBibliografia ===
* {{RivistaVG|mc|180|126-128|1|1998|titolo=UML, ovvero verso lo standard}}
L’UML definisce diversi diagrammi, cioè rappresentazioni grafiche di fenomeni di diversa natura.
* {{en}} [[Grady Booch]], [[James Rumbaugh]], [[Ivar Jacobson]], ''Unified Modeling Language User Guide'', Addison-Wesley 1999
Tutti i diagrammi UML sono in qualche modo legati ai casi d'uso, dal momento che i casi d'uso guidano l'intera
* {{en}} Ivar Jacobson, Grady Booch, James Rumbaugh, ''Unified Software Development Process'', Addison-Wesley 1999
attività di progettazione del sistema. In particolare, il diagramma delle classi ed i diagrammi di interazione
* {{en}} James Rumbaugh, Ivar Jacobson, Grady Booch, ''Unified Modeling Language Reference Manual'', Addison-Wesley 2004 (tratta UML 2.0)
vengono usati per modellare la realizzazione dei casi d'uso, mentre il diagramma dei componenti e quello di
* {{en}} [[Martin Fowler]], ''Uml Distilled: Applying the Standard Object Modeling Language'', Addison-Wesley 2003 (tratta UML 2.0)
deployment permettono di specificare l'architettura di sistema che dovrà implementare i casi d'uso.
* {{en}} [[Craig Larman]], ''Applying Uml and Patterns: An Introduction to Object-Oriented Analysis and Design and the Unified Process'', Prentice Hall 2005
Un ruolo specifico può, però, essere svolto dai diagrammi di stato e di attività. E' possibile utilizzare un
* {{en}} [[Robert C. Martin]], ''UML for Java Programmers'', Addison Wesley, 2003 (UML e la programmazione in [[Java (linguaggio di programmazione)|Java]])
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:
 
== Voci correlate ==
# modelli dello stato (vista statica)
* [[Programmazione orientata agli oggetti]]
descrivono le strutture statiche dei dati, e si possono ottenere utilizzando per esempio i diagrammi delle
* [[Analisi (ingegneria del software)]]
classi;
** [[Analisi dei requisiti]]
# modelli del comportamento (vista operativa)
** [[Analisi del dominio]]
descrivono la collaborazione tra oggetti. Ci sono molte tecniche di visualizzazione per la modellazione
** [[Analisi orientata agli oggetti]]
del comportamento, come il diagramma dei casi d'uso, il diagramma di sequenza, il diagramma di
* [[Design pattern]]
collaborazione e il diagramma di attività;
* [[Progetto (ingegneria del software)]]
# modelli del cambiamento di stato (vista dinamica)
* [[Progetto orientato agli oggetti]]
descrivono gli stati permessi dal sistema nel tempo. La prima tecniche di visualizzazione è il diagramma
* [[Modello concettuale (informatica)]]
degli stati, basato su un modello di evoluzione degli stati di un oggetto.
 
==Voci correlateAltri progetti ==
{{interprogetto|preposizione=sullo}}
 
== Collegamenti esterni ==
*[[Programmazione orientata agli oggetti]]
* {{Collegamenti esterni}}
*[[Analisi (ingegneria del software)]]
* {{FOLDOC}}
**[[Analisi dei requisiti]]
**[[Analisi del dominio]]
**[[Analisi orientata agli oggetti]]
*[[Design pattern]]
*[[Progetto (ingegneria del software)]]
*[[Progetto orientato agli oggetti]]
 
{{Standard ISO}}
==Collegamenti esterni==
*[http://www.uml.org Sito ufficiale dell'UML]
 
{{Controllo di autorità}}
 
{{Portale|informatica}}
[[Categoria:Ingegneria del software]]
 
[[caCategoria:UML| ]]
[[cs:Unified Modeling Language]]
[[da:UML]]
[[de:Unified Modeling Language]]
[[en:Unified Modeling Language]]
[[es:Lenguaje Unificado de Modelado]]
[[fi:UML-mallinnus]]
[[fr:Unified Modeling Language]]
[[gl:Linguaxe Unificada de Modelado]]
[[he:UML]]
[[ja:統一モデリング言語]]
[[lt:Unified Modeling Language]]
[[nl:Unified Modeling Language]]
[[pl:UML]]
[[pt:UML]]
[[ro:UML]]
[[ru:UML]]
[[sl:Unified Modelling Language]]
[[sv:UML]]
[[uk:UML]]
[[vi:Ngôn ngữ mô hình hóa thống nhất]]
[[zh:统一建模语言]]