12.5 定义
一个定义约束是一个链接到一个分类符的约束。它可以包含1个或多个LetExps。Let表达式所定义的变量或函数可以像分类符中的属性或操作那样来使用。它们的可见性等同于公开的属性或操作。定义约束的目的是为了定义可以在其它表达式中复用的子表达式。
UML元模型中定义约束的位置如图12.2所示。如下的良构规则必须被满足。该规则还定义了上下文分类符的值。
图12.2 Situation of Ocl expression used as definition or invariant
12.5.1 良构规则
[1] 如果ExpressionInOcl有一个泛型«definition» (A),并且该约束只附加到一个模型元素(B),而且该模型元素是一个分类符(C),那么它是一个定义约束。
context ExpressionInOcl
def: isDefinitionConstraint : Boolean =
self.constraint.stereotype.name = ‘definition’ -- A
and
self.constraint.constrainedElement->size() = 1 -- B
and
self.constraint.constrainedElement.any(true).oclIsKindOf(Classifier) -- C
[2] 定义约束的上下文分类符是被约束的元素。
context ExpressionInOcl
inv: isDefinitionConstraint implies
contextualClassifier =
self.constraint.constrainedElement.any(true).oclAsType(Classifier)
[3] @pre不允许用在定义约束中。
context ExpressionInOcl
inv: --