12.11 Guard
guard是一个可以链接到状态机中一条Transition的表达式。做为transition的guard的OCL表达式对该transition进行了限制。做为guard值的OCL表达式的类型是布尔。该表达式在transition要触发时计算。
guard在UML元模型中的位置如图12.5所示。如下的良构规则必须要满足。为了声明该规则,还定义了一些额外的操作。该规则还定义了上下文分类符的值。
图12.5 An OCL expression used as a Guard expression
12.11.1 良构规则
[1] guard所出现的状态机必须有一个上下文(A),它是ygie分类符(B)。上下文分类符是该状态机的属主,且该OCL表达式的类型必须是布尔。
context ExpressionInOcl
inv: not self.guard.transition.getStateMachine().context.oclIsUndefined() -- A
and
self.guard.transition.getStateMachine().context.oclIsKindOf(Classifier) -- B
implies
contextualClassifier = self.guard.transition.getStateMachine().context.oclAsType(Classifier)
and
self.bodyExpression.type.name = ‘Boolean’
[2] @pre不允许在guard中使用。
context ExpressionInOcl
inv: --