Unified Modeling Language
In ingegneria del software, lo UML (Unified Modeling Language, "linguaggio di modellazione unificato") è un linguaggio di modellazione e specifica non proprietario, in larga parte basato su concetti object-oriented. Oltre che per modellare sistemi software, UML viene comunemente usato per la descrizione e la specifica di sistemi hardware, processi di business, strutture organizzative e altro. Come il nome suggerisce, il linguaggio è nato unificando una serie di notazioni di modellazione e specifica preesistenti, con l'obiettivo generale di integrare le best practices rappresentate da ciascuna di esse. In questo senso, UML rappresenta la summa di almeno due decenni di studio sulla modellazione object-oriented e, anche per questo motivo, è oggi considerato una sorta di lingua franca che qualunque progettista (soprattutto, ma non solo, di sistemi software) dovrebbe conoscere in modo approfondito.
L'UML è un linguaggio che 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.
Nell'ambito della progettazione software è utilizzato per progettare e documentare un'applicazione (un programma) a diversi livelli di dettaglio e per diverse prospettive.
L'UML si basa sul disegno grafico di diagrammi; questi si possono dividere in diagrammi statici e diagrammi dinamici.
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.