14.4.3 语义

协议状态机

协议状态机总是定义在一个分类符上下文中。它规定了该分类符的哪个行为特征可以在某个行为状态和何种条件下被调用,从而规定了允许的调用序列。采用这种方式,分类符实例的生命周期规约可以以一种外部视角来定义。

协议状态机帮助定义了分类符的行为特征被调用的次序,它规定了:

  • 可以被有效调用的行为上下文(即,哪些状态和前置条件)
  • 调用的有效次序
  • 期望的调用结果(后置条件)

协议状态机所属分类符的协作者提供了一个可见的外部视角。它超越了单独行为特征通过前置和后置条件所表达的信息,因为协议状态机还规定了不同特征的有效调用次序。这是通过状态机规约来实现的,其中转变触发器是特征调用,转变(ProtocolTransitions,协议转变)的guards规定了有效调用必须满足的前置条件。状态机的状态(ProtocolStates,协议状态)作为过去调用序列的结果,捕获协议的状态并且也可以作为一种形式的前置条件。

注意. 由于协议状态机为分类符的行为提供了一个“黑盒”视图,它们的状态不必与内部行为状态机的状态相对应。

协议状态机的解释分为:

  1. 声明式协议状态机,它为行为特征的调用规定合法的转变。不规定行为特征调用的结果。这种类型的规约只为上下文分类符的用户提供了一个契约。
  2. 可执行(运行时)协议状态机,规定了一个对象可以接收和处理的所有事件出现,以及它们可以触发的转变。此种情况下,行为特征调用的合法转变必须与所触发的转变完全匹配或者出现运行时异常。调用会导致与被调用的行为特征关联的方法的执行。

两种解释的规约是相同的,区别在于后一种解释所提供的直接的动态暗示。

行为状态机中遇到的更为复杂的建模形式,像复合转变、子状态机、组合状态,以及并发正交区域都可以用于协议状态机。例如,并发区域可以表达一个实例可以同时有多个活跃的状态。子状态机和复合转变可以用于对复杂的协议状态机进行分解。

一个分类符可以有多个协议状态机。举个例子,这可以用于该分类符有多个父亲,每一个都有自己的协议状态机,并且这些协议都是正交的。另一种选择是用一个协议状态机,在并发区域中显示不同的(子)状态机。

协议状态机中的状态

协议状态机的状态暴露给它的上下文分类符的用户。协议状态代表了它的上下文分类符所暴露的稳定状态:当分类符实例没有处理任何行为特征的时候,该实例的用户也能知道它的状态配置。

协议状态机的状态不能定义entry、exit或doActivity行为。

results matching ""

    No results matching ""