Lenguaje de especificación OCL 2.0
# Lenguaje de especificación OCL 2.0

OCL 2.0 (Object Constraint Language 2.0) es un lenguaje para la descripción formal de expresiones en los modelos UML. Fue adoptado en octubre de 2003 por el grupo OMG como parte de UML 2.0.

Sus expresiones pueden representar invariantes, precondiciones, postcondiciones, inicializaciones, guardias, reglas de derivación, así como consultas a objetos para determinar sus condiciones de estado.

OCL fue inicialmente desarrollado por IBM. Este lenguaje no causa efectos laterales, de manera que la verificación de una condición, que se presupone una operación instantánea, nunca altera los objetos del modelo. Su papel principal es el de completar los diferentes artefactos de la notación UML con requerimientos formalmente expresados.

## Estructura

### Tipos predefinidos

El tipo OCLAny es el supertipo de los tipos de base String, Boolean, Real y su subtipo Integer. El tipo OCLMessage(T) es el tipo de los mensajes con contenido de tipo T. El tipo OCLVoid es un subtipo de todos los tipos. Finalmente, con el tipo Collection(T), sus subtipos Bag(T), Sequence(T) y Set(T) con su subtipo OrderedSet(T) se completa la colección de tipos predefinidos de OCL.

### Operaciones predefinidas

Las operaciones predefinidas incluyen las operaciones usuales sobre los tipos de base, más operaciones para el intercambio de mensajes y para realizar iteraciones sobre colecciones. El documento de definición de OCL incluye la sintaxis y semántica de cada uno de esos operadores, así como las reglas precisas de herencia en los tipos.

Aunque se trata de un lenguaje de especificación ya adoptado para UML 2.0, falta todavía definir los detalles de su utilización en los diferentes artefactos que conformarán la notación UML 2.0.

