Die Unified Modeling Language (vereinheitlichte Modellierungssprache), kurz UML, ist eine grafische Modellierungssprache zur Spezifikation, Konstruktion, Dokumentation und Visualisierung von Software-Teilen und anderen Systemen.Teil 1 der Spezifikation der Sprache (Infrastruktur)Grady Booch: The unified modeling language user guide. Boston 1998, S. 15 Sie wird von der Object Management Group (OMG) entwickelt und ist sowohl von ihr als auch von der ISO (ISO/IEC 19505 für Version 2.4.1) genormt. Im Sinne einer Sprache definiert UML dabei Bezeichner für die meisten bei einer Modellierung wichtigen Begriffe und legt mögliche Beziehungen zwischen diesen Begriffen fest. Die UML definiert weiter grafische Notationen für diese Begriffe und für Modelle statischer Strukturen und dynamischer Abläufe, die man mit diesen Begriffen formulieren kann.
Die UML ist die dominierende Sprache für die Softwaresystem-Modellierung. Der erste Kontakt zur UML besteht häufig darin, dass Diagramme in UML im Rahmen der Softwareentwicklung zu erstellen, zu verstehen oder zu beurteilen sind: Auftraggeber und Fachvertreter prüfen und bestätigen zum Beispiel Anforderungen an ein System, die Wirtschaftsanalytiker bzw. Business Analysten in Anwendungsfalldiagrammen in UML festgehalten haben; Softwareentwickler realisieren Arbeitsabläufe, die Wirtschaftsanalytiker bzw. Business Analysten in Zusammenarbeit mit Fachvertretern in Aktivitätsdiagrammen beschrieben haben; Systemingenieure implementieren, installieren und betreiben Softwaresysteme basierend auf einem Implementationsplan, der als Verteilungsdiagramm vorliegt.
Die grafische Notation ist jedoch nur ein Aspekt, der durch UML geregelt wird. UML legt in erster Linie fest, mit welchen Begriffen und welchen Beziehungen zwischen diesen Begriffen sogenannte Modelle spezifiziert werden – Diagramme in UML zeigen nur eine graphische Sicht auf Ausschnitte dieser Modelle. UML schlägt weiter ein Format vor, in dem Modelle und Diagramme zwischen Werkzeugen ausgetauscht werden können.
Entstehungsgeschichte Die erste Version von UML entstand in den 1990er Jahren als Reaktion auf zahlreiche Vorschläge für Modellierungssprachen und -Methoden, welche die zu dieser Zeit aufkommende objektorientierte Softwareentwicklung unterstützen sollten. Die erste Folge von Sprachversionen, auch bekannt unter dem Namen UML 1.x, wurde 2005 durch eine grundlegend überarbeitete Version, oft als UML2 bezeichnet, abgelöst.
Von den Anfängen zur Unified Modeling Language 1.x mini|hochkant=2|Historie der objektorientierten Methoden und Notationen Die Väter von UML, insbesondere Grady Booch, Ivar Jacobson und James Rumbaugh, auch „Die drei Amigos“ genannt, waren in den 1990er-Jahren bekannte Vertreter der objektorientierten Programmierung. Sie hatten alle bereits ihre eigenen Modellierungssprachen entwickelt. Als sie zusammen beim Unternehmen Rational Software beschäftigt waren, entstand die Idee, die verschiedenen Notationssysteme strukturiert zusammenzuführen. Eine Vielzahl von unterschiedlichen Modellierungssprachen hatte direkten oder indirekten Einfluss auf die Konzeption von UML, darunter OOSE, RDD, OMT, OBA, OODA, SOMA, MOSES und OPEN/OML.
Als Resultat dieser Bemühungen entstand die UML. Die Standardisierung, Pflege und Weiterentwicklung der Sprache wurde an die OMG übergeben, die die Sprache am 19. November 1997 als Standard akzeptierte.
Entstehungsgeschichte der Unified Modeling Language 2 Im August 1999 stieß die OMG die Entwicklung von UML2 an, indem sie einen entsprechenden Request for Information (RFI) publizierte.
Ein Jahr später, im September 2000, bat die OMG ihre Mitglieder und weitere interessierte Kreise um Vorschläge für UML2. Gemäß der neu für UML2 definierten Architektur publizierte die OMG drei Requests for Proposals (RFP): einen UML 2.0 Infrastructure RFP, einen UML 2.0 Superstructure RFP und einen UML 2.0 OCL RFP. Wer Vorschläge einreichen wollte, hatte dazu ungefähr ein weiteres Jahr Zeit.
In einer ersten Runde reichten verschiedene Gruppen und Einzelpersonen Entwürfe ein. Mitte 2002 lagen von diesen Konsortien mehrmals überarbeitete und konsolidierte Antworten auf einzelne Request for Proposals vor. Erst im Oktober 2002 konnten dann beim Treffen der zuständigen Arbeitsgruppe in Helsinki alle Vorschläge für die UML 2.0 Infrastructure und die UML 2.0 Superstructure präsentiert werden. Einen Termin für eine weitere überarbeitete Version der Vorschläge legte die Arbeitsgruppe auf Anfang Januar 2003 fest. Die Hauptschwierigkeit bestand nun darin, die unterschiedlichen Entwürfe zu einer Spezifikation zu verschmelzen. Einerseits wurde Kritik laut, dass sich die unterschiedlichen Philosophien in den eingereichten Vorschlägen nur schwerlich würden bereinigen lassen, andererseits reichte im Januar 2003 ein neues Konsortium unter dem Namen 4M einen Vorschlag (UML4MDA) ein, der die Differenzen zwischen den bisherigen Spezifikationen zu überbrücken versuchte.
Im März 2003 empfahl die zuständige Arbeitsgruppe die Vorschläge des Konsortiums U2 für die UML 2.0 Infrastructure und für die UML 2.0 OCL zur Freigabe, im Mai dann auch für die UML 2.0 Superstructure des gleichen Konsortiums, so dass ab Juni 2003 drei Finalization Task Forces der OMG die Arbeit aufnehmen konnten, um die Teilspezifikationen abzuschließen. Die Task Forces konnten ihre Arbeit jedoch nicht wie geplant bis zum April 2004 abschließen und gründeten deshalb eine zweite Finalization Task Force, die die verbleibenden Probleme bis zum September 2004 lösen sollte.
Im September 2004 konnten schließlich alle Finalization Task Forces ihre Arbeit beenden. Für die UML 2.0 OCLUML 2.0 OCL und die UML 2.0 Infrastructure lagen damit endgültig abgenommene Dokumente (Final Adopted Specification) vor. Nur bei der UML 2.0 Superstructure schien sich dieser letzte Schritt noch etwas zu verzögern: im März 2005 bot der OMG-Webauftritt weiterhin nur ein temporäres Dokument mit der informellen Bezeichnung UML 2.0 Superstructure FTF convenience document zum Herunterladen an.
Am 21. Oktober 2008 wurde die Beta 1 von UML Version 2.2 durch die OMG veröffentlicht, die dann im Februar 2009 in der finalen Version vorlag.omg.org/spec/UML/2.2 Neu hinzugekommen ist in der Version 2.2 das Profildiagramm, um eigendefinierte Stereotyp-Sammlungen strukturieren zu können.
Im Mai 2010 wurde UML 2.3 veröffentlicht. Diese Version enthielt vor allem Fehlerkorrekturen am Metamodell und Schärfungen der Semantik von Modellelementen im Spezifikationsdokument der UML. Die Version 2.5 wurde im Juni 2015 veröffentlicht. Die derzeit aktuelle Version 2.5.1 wurde im Dezember 2017 veröffentlicht.
Strukturierung Der Umfang der UML ist während der Entwicklung von UML 1.0 bis UML 2 laufend gewachsen. Sowohl für die Entwicklung von UML 2 als auch für die Vermittlung, die Anwendung und nicht zuletzt für die Lesbarkeit der UML 2-Spezifikation ist eine Strukturierung sehr wichtig. Was in den ersten Versionen von UML in einem Dokument spezifiziert werden konnte, muss deshalb für UML 2 in Teilspezifikationen aufgeteilt werden. In den folgenden Abschnitten wird der Aufbau von UML 2 beschrieben.
Teilspezifikationen UML2 ist in drei Teilspezifikationen aufgeteilt. Die UML 2.0 Infrastructure Specification legt das Fundament für UML2, indem sie die am häufigsten verwendeten Elemente von UML2 und die Modellelemente beschreibt, die die restlichen Modellelemente spezialisieren. In diesem Dokument werden Konzepte wie die Klasse, die Assoziation oder die Multiplizität eines Attributs spezifiziert. Die UML 2.0 Superstructure Specification baut auf dem Fundament der UML 2.0 Infrastructure Specification auf und definiert die Modellelemente von UML2, die sich für bestimmte Einsatzzwecke eignen. Typische Konzepte, die in diesem Dokument spezifiziert werden, sind der Anwendungsfall, die Aktivität oder der Zustandsautomat. Schließlich spezifiziert das Dokument mit dem Titel UML 2.0 Object Constraint Language die Object Constraint Language 2.0 (OCL2).
Ein weiterer, vierter Teil beschäftigt sich nicht mit dem semantischen Modell von UML, sondern spezifiziert das Layout der Diagramme. Dieses Dokument trägt den Titel UML 2.0 Diagram Interchange und ist eine Neuerung in UML 2.0; UML 1.x kannte kein standardisiertes Format, mit dem das Diagramm-Layout zwischen unterschiedlichen Werkzeugen ausgetauscht werden konnte. Die semantischen Informationen in einem UML-Modell konnte ein Werkzeug auch bisher an ein anderes Werkzeug übergeben; das Aussehen der Diagramme, das heißt die Positionen und Größe einzelner Diagrammelemente, ging dabei aber verloren. Diagram Interchange (DI) soll dieses Manko beseitigen.
Metamodellierung mini|hochkant=1.8|Hierarchie der Metamodellierung Ähnlich wie sich natürliche Sprachen in Lexika oder Grammatiken selbst beschreiben, wurde auch UML als ein Sprachwerkzeug konzipiert, das sich mit einigen Sprachbestandteilen selbst erklärt.
Die Sprachkonzepte sind dazu in vier Schichten M0 bis M3 gegliedert.
Mit der Meta Object Facility (MOF) werden Modellelemente von UML2 spezifiziert und dadurch zum Beispiel mit dem Format Meta Interchange XMI austauschbar. Diese MOF ist auf Ebene M3 und stellt eine der vier Schichten dar. Es ist die Metasprache der Metasprachen (das Metametamodell) und beinhaltet grundlegende Elemente (wie Pakete, Klassen, Attribute und Assoziationen). Die Metasprache UML2 (M2) ist in MOF definiert und stellt die bekannten Sprachmerkmale zur Verfügung, über die Konzepte von MOF hinaus auch noch Anwendungsfälle, Zustandsautomaten und mehr. Die in der Praxis erstellten UML-Modelle befinden sich auf der Ebene M1. Damit werden die Objekte der M0-Schicht dargestellt. Dies sind die konkreten Laufzeitinstanzen des Systems.
UML 2.0 ist also, wie auch UML1.x, auf der dritten von vier Metamodellierungsebenen eingeordnet. Zu UML 1.x besteht jedoch ein wesentlicher Unterschied: Die auf den Ebenen M2 und M3 verwendeten Modellierungssprachen (also MOF und UML) teilen sich die gemeinsame Spracheinheit der Infrastrukturbibliothek (Infrastructure Library). Sie wird in der UML 2.0 Infrastructure definiert und bildet einen Kern der grundlegenden Modellierungselemente, der sowohl in der UML 2.0 Infrastructure als auch in der UML 2.0 Superstructure und in der MOF 2.0 eingesetzt wird.
Spracheinheiten Die UML 2.0 Superstructure ist auf einer ersten Ebene modular in Spracheinheiten (englisch language units) aufgebaut. Eine Spracheinheit umfasst eine Menge von eng zusammenhängenden Modellierungselementen, mit denen ein Benutzer einen ausgewählten Aspekt eines Systems mit einem bestimmten Formalismus modellieren kann. Die Spracheinheit Aktivitäten (englisch Activities) umfasst zum Beispiel Elemente für die Modellierung eines Systemverhaltens, das sich am besten mit dem Formalismus von Daten- und Kontrollflüssen darstellen lässt.
Einteilung der Spracheinheiten in Schichten Auf einer dritten Stufe sind die meisten Spracheinheiten in mehrere Schichten (englisch Compliance Level) gegliedert. Die unterste Schicht umfasst jeweils die einfachsten und am häufigsten verwendeten Modellierungselemente, während höhere Schichten zunehmend komplexere Modellierungselemente einführen. Die Spracheinheit Aktivitäten umfasst beispielsweise FundamentalActivities als unterste Schicht und darauf aufbauend die Schicht BasicActivities. FundamentalActivities definiert zunächst nur, dass Aktivitäten strukturell aus hierarchisch geschachtelten Gruppen von Aktionen bestehen. BasicActivities erweitert dieses Gerüst um Kanten und weitere Hilfsknoten zu einem Graphen, den man in UML2 dann visuell als Aktivitätsdiagramm darstellt.
Spracheinheiten mini|Beispiel der graphischen Notation für eine Aktion mit zwei Eingabe- und einem Ausgabepin
Aktionen