El objeto Constraint Language ( OCL ) es un lenguaje declarativo que describe las reglas que se aplican a Unified Modeling Language modelos (UML), desarrollado en IBM y ahora es parte del estándar UML. Inicialmente, OCL era simplemente una extensión de lenguaje de especificación formal para UML. [1] OCL ahora puede ser utilizado con cualquier Meta-Object Facility (MOF) Object Management Group (OMG) meta-modelo , incluyendo UML. [2]Object Constraint Language es un lenguaje de texto preciso que proporciona restricciones y expresiones de consulta de objetos en cualquier modelo MOF o metamodelo que de otro modo no se puede expresar mediante notación diagramática. OCL es un componente clave de la nueva recomendación estándar de OMG para la transformación de modelos, la especificación Consultas / Vistas / Transformaciones ( QVT ).
Descripción
OCL es un descendiente de Syntropy , un método de análisis y diseño orientado a objetos de segunda generación. La definición de OCL 1.4 especificó un lenguaje de restricción. En OCL 2.0, la definición se ha ampliado para incluir definiciones de lenguaje de consulta de objetos generales.
Las declaraciones de OCL se construyen en cuatro partes:
- un contexto que define la situación limitada en la que la declaración es válida
- una propiedad que representa algunas características del contexto (por ejemplo, si el contexto es una clase, una propiedad podría ser un atributo)
- una operación (por ejemplo, aritmética, orientada a conjuntos) que manipula o califica una propiedad, y
- palabras clave (por ejemplo, si, entonces, más y, o no, implica) que se utilizan para especificar expresiones condicionales.
Relación
OCL y UML
OCL complementa UML al proporcionar expresiones que no tienen las ambigüedades del lenguaje natural ni la dificultad inherente de usar matemáticas complejas. OCL es también un lenguaje de navegación para modelos basados en gráficos.
OCL y MOF
OCL hace que un modelo de instalación de metaobjetos sea más preciso al asociar aserciones con sus metaelementos.
OCL y QVT
De particular importancia para la ingeniería basada en modelos (MDE) o la arquitectura basada en modelos es la noción de transformación de modelos . El OMG ha definido un estándar específico para la transformación de modelos llamado MOF / QVT o en abreviatura QVT . Actualmente se encuentran disponibles varios lenguajes de transformación de modelos como GReAT , VIATRA o Tefkat , con diferentes niveles de cumplimiento del estándar QVT. Muchos de estos lenguajes se basan en OCL, que es la parte principal del cumplimiento de QVT .
Alternativas
Al ser un lenguaje de validación basado en reglas, Schematron puede considerarse una alternativa a OCL. Sin embargo, Schematron funciona para árboles de lenguaje de marcado extensible (XML), mientras que OCL hace posible navegar por modelos y metamodelos basados en MOF (es decir, árboles de intercambio de metadatos XML ( XMI )). En otras palabras, OCL se relaciona con UML o MOF de manera similar a cómo se relaciona Schematron con XML . (Tenga en cuenta que Schematron usa XPath para navegar dentro de los árboles XML).
Al ser un lenguaje de especificación de modelo que permite a los diseñadores decorar un modelo o metamodelo con anotaciones sin efectos secundarios, OCL podría reemplazarse por lenguajes como Alloy . La generación automatizada de OCL es, en principio, posible a partir del lenguaje natural. [3]
Restricción | Equivalente de OCL |
---|---|
La edad de una persona no es negativa. | context Person inv: self.age >=0 |
Una persona es más joven que sus padres. | context Person inv: self.parents->forAll(p|p.age>self.age) |
Después de un cumpleaños, una persona se vuelve un año mayor. | context Person::hasBirthday() post: self.age=self.age@pre+1 |
Una persona tiene 2 padres como máximo. | context Person inv: self.parents->size()<=2 |
Después de que alguien tiene un hijo, su conjunto de niños no está vacío y es más grande que antes. | context Person::getsChild() post: self.childs->notEmpty() and self.childs->size() > self.childs@pre->size() |
Solo un adulto puede ser propietario de un automóvil. | context Person inv: self.age<18 implies self.cars->isEmpty() |
El primer registro de un automóvil no puede ser antes de que se construya. | context Auto inv: self.registration>=self.constructionYear |
Cada Persona que tiene un automóvil tiene al menos un automóvil que es más joven que la Persona. | context Person inv: self.cars->notEmpty() implies self.cars->exists( c | Calendar.YEAR - c.constructionYear < self.age) |
Nadie puede ser su propio padre. | context Person inv: self.parents->excludes(self) |
Hay al menos una Persona que posee un automóvil. | context Person inv: Person.allInstances()->exists(p | p.cars->size() > 0) |
Ver también
- Modelo de computadora
- Mapeo de datos
- Lenguaje específico de dominio (DSL)
- Modelado específico de dominio (DSM)
- Proyecto Eclipse GMT
- Lenguaje de expresión Gello
- Glosario de términos del lenguaje de modelado unificado
- Programación intencional (IP)
- Lista de herramientas UML
- Metamodelado
- Técnica de metamodelado
- Facilidad de metaobjetos (MOF)
- Metadatos
- Pruebas basadas en modelos (MBT)
- Arquitectura basada en modelos (MDA)
- Ingeniería basada en modelos (MDE)
- Lenguaje de transformación de modelos (MTL)
- Lenguaje de modelado
- Modelado de perspectivas
- MOFM2T
- Análisis y diseño orientado a objetos (OOAD)
- Consultas MOF / Vistas / Transformaciones (QVT)
- Traducción semántica
- Lenguaje de transformación (TL)
- Herramienta UML
- Transformación basada en vocabulario
- XMI
- Lenguaje de transformación XML (XTL)
Referencias
- ^ Grupo de gestión de objetos (OMG); Especificación del lenguaje de restricción de objetos , capítulo 7 de la especificación del lenguaje de modelado unificado OMG , versión 1.3, marzo de 2000 (primera edición)
- ^ Grupo de gestión de objetos (OMG); Lenguaje de restricción de objetos OMG Especificación disponible Versión 2.0 , mayo de 2006
- ^ Imran Sarwar Bajwa (octubre de 2010). "Generación de restricciones OCL a partir de la especificación de lenguaje natural, 2010". IEEE . doi : 10.1109 / EDOC.2010.33 . S2CID 7495256 . Cite journal requiere
|journal=
( ayuda )
enlaces externos
- Especificación OMG OCL
- Portal OCL: el centro de información relacionada con OCL
- Página OCL del Departamento de Ciencias de la Computación de CSUSB (breve sintaxis OCL 2.0)
- Octopus: herramienta OCL para especificaciones precisas de Uml (verificador OCL)
- Dresden OCL Toolkit (OCL Toolkit, varias publicaciones relacionadas con OCL)
- HOL-OCL (un entorno interactivo de prueba de teoremas para OCL, varias publicaciones relacionadas con OCL)
- Tutorial de OCL para Java en ParlezUML
- Artículo sobre el uso de OCL de EMF en código Java
- Página de enlace UML en cetus-links.org
- USE (entorno de especificación basado en UML) (herramienta OCL para la validación de modelos, varias publicaciones relacionadas con OCL)
- Tutorial de OCL
- NL2OCL (Herramienta OCL para generación invariante desde NL)
Este artículo se basa en material extraído del Diccionario gratuito de informática en línea antes del 1 de noviembre de 2008 e incorporado bajo los términos de "renovación de licencias" de la GFDL , versión 1.3 o posterior.