domingo, 8 de mayo de 2016

OCL, poniendo restricciones a nuestros modelos en UML

No acostumbro hacer post de modelado, pero en la maestria estamos viendo OCL y me gusto mucho. Por lo general no nos damos cuenta lo incompletos que son nuestros modelos UML y cuando tenemos que delegar la tarea de programación es cuando surgen los problemas.

Sin restricciones claras alguien que no piense como yo puede cometer errores. Para definir las restricciones se invento OCL (Object Constraint Language).

OCL es un lenguaje para la descripción formal de expresiones en los modelos UML.  Y las expresiones pueden ser invariantes, precondiciones, postcondiciones, inicializaciones, guardias, reglas de derivación, así como consultas a objetos para determinar sus condiciones de estado.

OCL completa UML y le da un grado mayor de detalle a nuestros modelos. Cuando hago expresiones OCL me da la impresión que estoy programando y esto es entendible porque estoy bajando un nivel.

Algunas cuestiones a tener en cuenta:

  • OCL no es un lenguaje de programación.
  • OCL es tipado, cada expresión OCL tiene un tipo.
  • La evaluación de una expresión es atómica.

Veamos un ejemplo de definición de un invariante para no ser tan abstractos.

context Ejemplar
inv: self.id > 0 and self.id < 999999

En el siguiente ejemplo vemos que la expresión tiene un contexto, que es el objeto, donde se aplica la expresión. Luego se detalla un invariante donde decimos que el id del ejemplar tiene que estar entre 1 y 999999. Veamos otro ejemplo:

context: Publicación
inv: self.autor.nombre.size>0 and self.autor.apellido.size >0

Estamos diciendo que una publicación debe tener un autor con un nombre y un apellido (al menos)

Por este post estamos. Más adelante revisaremos más expresiones OCL.

Dejo link: http://www.omg.org/spec/OCL/