12.6 不变式
不变式约束是一个链接到一个分类符的约束。不变式约束的目的是规定分类符的不变式。一个不变式约束包含一个类型为布尔的OCL表达式。对于在任意时刻的该分类符的每个实例,该表达式必须为真。只有在某个实例正在执行一个操作时,该值才可以不为真。
UML元模型中不变式约束的位置等同于定义约束的位置,如图12.2所示(译者注:原文是图12.3,是错误的)。如下的良构规则必须要满足。该规则还定义了上下文分类符的值。
12.6.1 良构规则
[1] 该约束具有泛型«invariant» (A),并且只附加到一个模型元素(B),且该模型元素是一个分类符(C)。上下文分类符是被约束元素并且OCL表达式的类型必须是布尔。
context ExpressionInOcl
inv: self.constraint.stereotype.name = ‘invariant’ -- A
and
self.constraint.constrainedElement->size() = 1 -- B
and
self.constraint.constrainedElement.any(true).oclIsKindOf(Classifier) -- C
implies
contextualClassifier = self.constraint.constrainedElement->any(true).oclAsType(Classifier)
and
self.bodyExpression.type.name = ‘Boolean’
[2] @pre不允许在不变式约束中使用。
context ExpressionInOcl
inv: --