17.4.3 语义

消息

一条完整(complete)消息的语义只是轨迹<sendEvent, receiveEvent>。

一条丢失(lost)的消息指的是只知道发送事件出现而没有接收事件出现的消息。我们这样解释它是因为【丢失】消息的目的地超出了我们描述的范围。它的语义只是轨迹<sendEvent>。

一条被发现(found)的消息指的是知道接收事件出现,但没有(不知道)发送事件出现。我们这样解释它是因为原始信息超出描述的范围。例如这可能是我们不行深入描述的噪音或其它活动。它的语义只是轨迹<receiveEvent>。

消息的签名参考一个操作或信号。消息的名称必须与所引用操作或信号的名称相同。

注意. 生命线不能直接代表类型。然而,如果生命线所代表的是一个具有静态操作的类型的可连接元素,那么生命线可以接受具有与该静态操作相关联签名的消息。

如果消息签名是一个操作,那么该消息代表如下之一:

  • 如果消息方式是synchCall或asynchCall,那么该消息代表了对这个操作的同步或异步调用,并且启动该操作的执行。消息的参数按序与操作的那些in和inout参数相对应。
  • 如果消息方式是reply,那么该消息代表了对这个操作同步调用的返回。该消息的参数按序与该操作的out、inout和返回参数相对应。

如果消息的签名是一个信号,那么消息必须是asynchSignal,并且该消息代表了对该信号一个实例的异步发送和reception。消息的参数与信号属性相对应。

消息的一个参数是一个值规约。如果消息有一个签名并且它不是一个应答消息,那么它的参数值规约被认为在该消息的发送事件时被计算。它们的值为相应的操作输入参数或信号属性提供值。然而,如果参数值包含一个不含操作数且也不是空串为符号的表达式,那它有一个特别的解释——通配符,它对应与相应参数或属性的一个未指定但合法的值。否则,参数值的类型必须与相应的参数或属性的类型兼容。【译者注:argument(消息中的参数/值)和操作中的参数(parameter)可以看作是一种实例与类型的关系。】

如果消息是一个应答,那么它的每个参数必须是一个至多只有一个操作数的表达式。如果给定了一个操作数,它被认为在消息的发送事件时被计算,它的结果用做相应的out 、inout或返回参数值。输出参数的类型必须与操作数的类型相兼容。如果没有给定操作数,那么该应答消息没有对相应于那个参数的返回值进行建模。

应答消息的参数表达式符号代表了用于该参数的赋值目标,该参数的返回值要被赋予它。如下用于这样的一个赋值目标符号的值具有标准解释:

  • Unknown/不知道:一个空串,它代表了一个未知的赋值目标。具有未知的赋值目标并且不是返回值的参数是一个输出通配符。
  • Interaction Parameter/交互参数:封闭交互的一个自有参数的非限定名,它必须是一个out、input或返回参数。与argument相对应的操作参数类型必须与交互的目标自有参数类型相兼容。
  • Attribute/属性:封闭交互的上下文行为的一个属性,或者是消息的接收生命线的(很可能是限定的)名称。如果交互没有一个上下文行为,那么该交互自身被认为是这个上下文。与argument相对应的输出参数的类型必须与这个属性的类型相兼容。(注意,可以使用一个限定的名称来区分上下文的属性和同名的生命线,或者来自一个交互参数的同名属性。)

还允许赋值目标符号的其它值(例如,用于在一个profile中使用),但是它们的解释没有在本规范中定义。

消息端

消息端的子类定义了与它们所代表的概念相适合的特定语义。

消息出现规约

一个消息出现规约代表了与两条生命线之间的一条消息相关联的一个发送事件或一个接收事件。

销毁出现规约

一个销毁规约代表了对该规约所属生命线所描述的实例的销毁。它可能导致对通过组合关系所拥有的其它对象的销毁。(参见第13章)。

Gate

Gate是一个消息端,它用于一个交互、交互使用,或者联合片段的边界来为每个消息建立具体的发送者和接收者关联。

由于Gate的实例以结对的方式连接两个消息实例,它们自身也没有显式的次序。Gate在如下之间提供了一个连接点:

  • 交互使用之外的一个消息实例和所使用的交互内部的一个消息实例,或者
  • 一个联合片段之外的一个消息实例和在该联合片段的一个交互操作数内部的一个消息实例。

消息出现规约由如下规则来部分排序:

  • 消息出现规约实例在它们自己的生命线上是有序的,并且
  • 消息出现规约实线对于一个消息实例,或者一对儿通过匹配的gates连接的消息实例是有序的。两者情况下,发送消息出现规约实例要在接收消息出现实例之前。

消息实例自身没有次序。

Gate有四种,通过它们的关联来区分:

  1. 形式Gate与一个交互相关联,提供一个可以连接到该交互的内部边界的链接点,表达该交互内部的一个消息去向或来自另一个交互(A)中的消息,交互A有一个实际的Gate,该Gate作为一个消息端附近到交互A的一个交互使用的外部。
  2. 实际Gate与一个交互使用相关联,提供一个附加到一个交互使用的外部边界的链接,来表达该交互使用外部的一条消息去向或来自由该交互使用所引用的交互的内部的一条消息。
  3. 内部联合片段Gate与一个联合片段相关联,提供一个可以附加到一个联合片段的内部边界的链接点,表示具有这个联合片段内部的一个消息端的消息去向或来自具有这个联合片段外部的一个消息端的一条消息。
  4. 外部联合片段Gate与一个联合片段相关联,提供一个可以附加到一个联合片段的外部边界的链接点,表示具有这个联合片段内部的一个消息端的消息去向或来自具有这个联合片段内部的一个消息端的一条消息。

可以显式或隐式的对gate进行命名。可以通过名称(如果指定的话),或者一个由消息的方向和名称连接起来形成的构造标识符(例如,out_CardOut、in_CardOut)来鉴别gate。

Gates通过名称来匹配,使用相同名称的形式Gate和实际Gate来匹配,使用具有相同名称的内部联合片段与外部联合片段来匹配。

匹配Gates的消息必须相关。消息相关指的是它们具有相同的名称、消息方式、签名属性值,以及相同的方向。

results matching ""

    No results matching ""