2009-05-23 14 views
6

Encontré un par de preguntas sobre las expresiones OCL. Después de leer algunas diapositivas de la universidad y buscar en Google todavía no puedo entenderlo correctamente.¿Alguien sabe bien el tutorial Object Constraint Language (OCL)?

Me pregunto si alguno de ustedes sabe algún buen recurso que debería leer para entender esto.


restricciones que me molestan:

  1. Todo el mundo que trabajan en el Departamento tiene el mismo administrador.
  2. Nadie en la compañía es el gerente de sí mismo.
  3. Nadie en la empresa gana más que su gerente.

Para el primero que tengo:

contexto Departamento

inv self.stuff -> forAll (director = self.staff.manager)

segundo uno:

contexto Empresa

inv self.employee -> seleccionar (manager = manager.manager) -> isEmpty()

tercero uno:

contexto Compañía

inv self.employee -> select (salario> manager.salary) -> estaVacia()

pero yo no creo que estos son correctas. Lo que no estoy seguro es si en los ejemplos 2 y 3 realmente comparo empleados individuales con el salario real de gerente/gerente.

Respuesta

2

Una solución rápida de las restricciones: Departamento

contexto inv: self.staff -> forAll (s1, s2 | s1.manager = s2.manager)

contexto Compañía inv: auto. employee-> forAll (e | e.gerente <> e)

contexto inv Empresa: self.employee-> forAll (e | e.salary < = e.manager.salary)

Por cierto, yo no veo la necesidad de que el Clase de empresa (¿cuántos objetos de la compañía de tipo tiene en el sistema?). Si las restricciones dos y tres son verdaderas para todas las empresas, entonces podrían expresarse usando Person como contexto de esta manera (por ejemplo, con el número 2): context Person inv: self.manager <> self)

También podemos agregar cheques a ver si el empleado tiene un administrador antes de hacer la comparación

+0

No es un sistema real. Es una de las preguntas de revisión para el examen :) Me preguntaba por qué hay clase de empresa ... Muchas gracias por su ayuda. – Artur

4

Para los principiantes yo recomendaría este libro: La Object Restraint Language: preparando sus modelos para MDA por Jos Warmer y Anneke Kleppe (Jos fue uno de los principales creadores de OCL).

Se da también una OCL tutorial libres (pdf) + diapositivas

también me gusta mucho la especificación oficial que ya ha encontrado (en especial el capítulo ofrece una descripción informal de la lengua).

+0

he editado la pregunta y añadí limitaciones estoy seguro de. – Artur

Cuestiones relacionadas