协议转变

协议转变规定了上下文分类符的一个行为特征调用的一个合法转变。协议转变具有如下特征:

  • 一个前置条件(preCondition),固定了转变的guard属性
  • 一个触发器
  • 一个后置条件(postCondition

协议转变规定了(a) 所关联(引用)的特征可以在上下文分类符的实例上被调用,如果它处于原来的状态并且满足guard条件,那么 (b) 一旦转变完成,实例会处于目标状态并满足后置条件。

协议转变没有相关联的effect行为。作为一个行为特征调用所执行的协议转换的后果是隐含的:它是对应于被调用的行为特征的方法的执行。对于其它类型的触发器,后果是没有规定的(除了转变可以导致一个特定后置条件下的另一个状态),不管该转变关联什么行为。

Unexpected trigger reception

对与当前的状态的一个有效触发器、状态不变量或前置条件不匹配的出现出现的reception的解释是未定义的(例如,它可以被忽略、拒绝,或者延迟;抛出一个异常;或应用停止并报错)。它与违反一个前置条件语义等价,UML对此没有定义预定义的行为。

Unexpected Behavior

对不期望的行为(未预料的转变结果,错误的FinalState或FinalState不变量,或后置条件)的解释也没有定义。然而,这应该在协议状态机的实现中被解释为一个错误。

操作的前置和后置条件等价性

协议转变可以从语义上按照关联操作的前置和后置条件来解释。例如,图14.41中的转变可以按照如下来解释:

  1. 操作“m1”可以在实例处于协议状态“S1”并满足条件“C1”的情况下被调用。
  2. 当“m1”在协议状态“S1”和条件“C1”满足下被调用时,会在满足条件“C2”的情况下到达协议状态“S2”。

图14.42 An example of a ProtocolTransition associated with the operation "m1"

被多个转变引用的操作。

图14.43 Example of several ProtocolTransitions associated with the same operation (m1)

在协议状态机中,多个转变可以引用相同的操作,如图14.43所示。此时,所有的前置和后置条件会被合并到操作的相应前置和后置条件中,如下所示。

Operation m1()
Pre: in state S1 and condition C1
     or
     in state S3 and condition C3
Post: if the initial condition was “in state S1 and condition C1”
           then in S2 and C2
      else
      if the initial condition was “in state S3 and condition C3”
           then in S4 and C4

协议状态机通过它的转变为每个行为特征规定了合法的协议转变。

未引用的操作

如果一个行为特征未被任何协议转变所引用,那么该操作可以在协议状态机的任意状态上被调用,它不会改变当前的状态或前置和后置条件。

在协议状态机中使用其它类型的事件

除了来自行为特征的调用,其它的事件也可以用于表达协议状态机的行为。协议转变可以规定一个不是行为特征调用的触发器。此时,这个规约是协议状态机的外部环境的一个需求。也就是说,只能在协议状态机规定的条件下,向上下文分类符的实例发送一个这种类型的事件出现才是合法的。精确的语义解释没有定义。

results matching ""

    No results matching ""