Immer wieder gibt es Anforderungen oder Einschränkungen, die sich mit Diagrammen nicht oder nur sehr schlecht formulieren lassen. Deshalb wurde die UML um eine textuelle Spezifikationssprache erweitert: Die OCL. Die Syntax der OCL orientiert sich an der objektorientierten Programmiersprache Smalltalk und wurde um Konzepte funktionaler Sprachen zur Evaluierung von Ausdrücken über endliche Mengen und Sequenzen von Objekten erweitert. Aufgrund ihrer speziellen Syntax ist die Frage nach ihrer Lesbarkeit umstritten.
OCL Ausdrücke dienen zur Beschreibung von Invarianten in Klassendiagrammen, sowie von Bedingungen in Statecharts oder Sequenzdiagrammen. Ein weiteres interessantes Verwendungsgebiet für OCL sind Vor- und Nachbedingungen für Methoden.
In der Abbildung sind zwei OCL Invarianten und eine Methodenspezifikation angegeben. Die erste Invariante nutzt einen Mechanismus zur Navigation zwischen Objekten, um die Umgebung in die Bedingung einzubeziehen. Sie sagt aus, dass der Roboter vom Lager an der Assoziation cProduktion tatsächlich nur C-Teile bekommt. Die zweite Invariante besagt, dass eine Baugruppe maximal drei Teile beinhaltet. Entsprechend wird für die Methode „fuegeHinzu“ als Vorbedingung gefordert, dass maximal zwei Teile in der Baugruppe vorhanden sind. Es ist Aufgabe der Implementierung sicherzustellen, dass diese Bedingungen erfüllt werden.