17.2.3 语义
交互
Interactions(交互)是封闭(enclosing)分类符的行为单元。交互关注于在分类符的可连接元素之间利用消息传递信息。
一个交互的语义由一个轨迹集合二元组给定。这两个轨迹集合代表了有效的轨迹和无效的轨迹。这两个集合的合集不必覆盖整个轨迹空间。没有包含的轨迹没有被该交互所描述,从而我们也不知道它们是有效的还是无效的。
一条轨迹是事件出现的一个序列,每个事件出现由模型中的一个OccurrenceSpecification(出现规约)来描述。交互的语义是可组合的,这在于交互的语义可以从构成它的InteractionFragments(交互片段)来机械地构造。交互片段是有序的,通过seq操作(弱序列化)来合并,对此在17.6.3 弱序列化来解释。
无效轨迹集合与一个否定的CombinedFragment(联合片段)或断言联合片段的使用相关联。在第一种情况下,无效的轨迹集合显式地被规定。后一种显式地通过只规定有效的轨迹集合来隐含地规定无效的集合。为了简洁我们对于所有其它构造(constructs)只描述有效的轨迹。
作为行为,交互可以被泛化和重定义。特化一个交互可以简单地向原始的交互中增加更多的轨迹。由特化定义的轨迹利用一个联合(union)与那些被继承交互中的轨迹相合并。
拥有交互的分类符可以被特化,在特化中所含的交互可以被重定义。简单地重定义一个交互意味着用重定义的交互替换被重定义的交互,这种替换对于宿主的超类中的InteractionUses(交互使用)同样生效。这与其它种类的行为的重定义是类似的。
可以向交互的内部边界附加一个形式Gate,从而通过该交互的一个交互使用来连接具体发送者和接收者提供一个连接点。
交互片段
一个InteractionFragment(交互片段)的语义是一个轨迹集合二元组。关于如何计算轨迹请参见17.1.2中的解释。
一个交互片段可以直接被一个封闭的交互所包含,或者被一个联合片段的InteractionOperand(交互操作码)所包含。由于联合片段本身也是一个交互片段,所以在一个交互中可以内嵌许多层次的交互片段。
出现规约
出现规约的语义就是该规约的轨迹。
出现规约的理解和深层含义取决与与之相关的消息和该消息所表达的信息。
执行规约
交互的轨迹语义只是把一个执行看作是轨迹<开始, 结束>。它们之间可能会有出现。通常开始出现和结束出现会代表类似(消息的)一个接收出现规约和(应答消息的)一个发送出现规约那样的规约。
状态不变量
约束被认为在运行时计算。在下一个出现规约执行之前约束被立即计算从而使得没有被显式建模的动作已经执行。如果约束为真,该轨迹即使一个有效的轨迹;否则,该轨迹是无效的。换句话说,所有具有为假约束的状态不变量的轨迹都被认为是无效的。