7.6 Constraints

7.6.1 概要

Constraint(约束)是一个断言,它指明对包含该约束的模型的任意有效的实现都应该满足这个限制。约束可以被附加到一组受限元素(constrainedElements),它表示这些元素的额外语义信息。

7.6.2 抽象语法

图7.13 Abstract Syntax of Constraints

7.6.3 语义

约束的规约由一个布尔型的ValueSpecification给定。该规约的计算可能会引用约束的受限元素和约束的上下文。此外,约束的上下文可以用作对规约中出现名字进行解释的命名空间(例如,在OCL中,“self”指代元素上下文)。

通常,对于一个约束可以有多种宿主(owners)。唯一的限制是拥有约束的元素必须能够访问受限元素。约束的宿主决定何时对约束规约进行计算。举个例子,一个操作(Operation)的前置条件约束在操作开始调用的时候计算,而后置条件约束在调用结束后进行计算(参见9.6 Operations)。

通过计算约束的规约(specification)来获得约束。如果规约值为真,那么此时满足约束。如果规约值为假,那么不满足约束,从而该计算所从属的模型实现是无效的。

7.6.4 表示法

UML中预定义了一些约束,其它类型则是用户定义的。用户定义的约束规约通常表示为某种语言下的文本字符串,它的语法和解释由该种语言所定义。一些情况下,一种形式化语言(比如OCL)或一种编程语义(例如Java)可能是适当的,另一些场景下可能使用自然语言。这样的一个规约表示一个OpaqueExpression(采用适当的语和规约体,参见8.3)。这样的规约按照如下的BNF格式显示在括号({})中:

<constrain> ::= ‘{’ [ <name> ‘:’ ] <boolean-expression> ‘}’

其中<name>是约束的名字,<boolean-expression>是约束规约的适当文本表示。

大多数情况下,约束字符串被置于一个便签符号内,并且通过虚线附加到每一个受限元素所表示的符号上(参见图7.14的示例)。

对于应用到一个单一的受限元素(例如一个类或关联)上的一个约束,可以直接把约束字符串放置在靠近该受限元素符号的地方,最好是靠近名称,如果有的话。工具应该能够判定受限元素。

对于以文本字符串表示的元素(例如一个属性),约束字符串可以在元素的文本字符串后面。这样标注的元素是约束的单个受限元素。(图7.15展示了在一个类符号内一个属性的约束字符串。)

对于应用到两个元素(例如两个类或关联)上的一个约束,它可以表示为该两元素之间的一条以约束字符串标注的虚线。(参见图7.16的示例。)

如果约束表示为两个元素间的一条虚线,那么可以在其中的一端加箭头。箭头的方向是约束内的相关信息。在受限元素集合中,尾部的元素映射到第一个位置,箭头头部的元素映射到第二个位置。

对于三个或更多同类路径(例如范化路径或关联路径),约束字符串可以被附加到一条跨越所有路径的虚线上。

7.6.5 示例

图7.14在一个便签符号内展示了一个约束示例。

图7.14 Constraint in a note symbol

图7.15展示了一个附加到一个属性上的约束字符串。

图7.15 Constraint attached to an attribute

图7.16展示了两个关联直接的一个{xor}约束。

图7.16 {xor} constraint

results matching ""

    No results matching ""