Unified Modeling Language
In ingegneria del software, UML (Unified Modeling Language, "linguaggio di modellazione unificato") è un linguaggio di modellazione e specifica standard basato su concetti 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 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 practices nel campo della modellazione a oggetti.
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 che nelle varie fasi di progetto a diversi livelli di raffinamento, mantenendo la tracciabilità dei concetti impiegati per modellare il sistema in queste varie fasi.
Il linguaggio ha una 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, processi di business e così via.
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 notazione è semi-grafica e semi-formale; un modello UML è costituito da una collezione organizzata di diagrammi correlati, costituiti da segni grafici (con significato formalmente definito), elementi testuali formali, ed elementi di testo libero.
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 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. 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).
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 impiegati come 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 tre gringos" 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.
Tipi di diagrammi
I diagrammi di tipo statico danno una visione statica e strutturale del sistema che si sta descrivendo o progettando, mentre quelli dinamici cercano di coglierne gli aspetti evolutivi.
I diagrammi di tipo statico previsti dall'UML sono gli Use Case Diagram, Class Diagram, Object Diagram, Component Diagram, Deployment Diagram.
I diagrammi di tipo dinamico previsti dall'UML sono State Chart Diagram, Activity Diagram, Sequence Diagram, Collaboration Diagram.
Essendo un linguaggio e non una metodologia è buona regola utilizzare solo quei diagrammi che risultano utili alla definizione dello specifico sistema che si vuole analizzare; non è quindi obbligatorio utilizzare tutti i diagrammi previsti dall'UML per la descrizione di un sistema.