Skip to main content

7.17 状态

状态

状态定义(state definition)是一种动作定义,其定义了动作能够执行的条件。 状态使用是状态定义的使用。 状态定义和使用可以用来描述基于状态的行为,其中任意特定的状态的执行都是被事件触发的。

状态定义和使用可以包含特别指定的动作使用,这些使用只有在状态激活是才会执行。

  • 进入动作(entry action),当状态激活时启动。
  • 运行动作(do action),进入动作执行完毕之后,当状态仍然活跃时执行。
  • 退出动作(exit action),当状态退出时启动,当退出动作完成后状态进入非活跃状态。

状态定义和使用适用于结构元素所使用的模式。 状态可以分解为低层级的状态,以创建状态使用的层级结构, 而且状态也可以引用其他的状态。 另外,状态定义可以特化,而状态使用可以进行子集构造和重定义。 这增强了在特定上下文中修改状态层级结构的灵活性。

展示状态

状态使用可以作为部件定义或部件使用的特征, 用来展示一个引用或者包含的拥有的状态使用。 不管是拥有的还是引用的,部件所展示的状态使用都表示在状态使用的层级树中的顶级状态。

展示状态使用(exhibit state usage)是一个状态使用, 其指定了一个由该展示状态使用的所有者所展示的一个状态。 展示状态使用是引用的,因此允许所展示的状态行为在和展示者不同的上下文中进行定义。 然而,如果展示状态使用的所有者是一个实存,那么所引用的状态必须在该实存的整个生命周期内持续运行。

特别地,展示状态使用可以是部件定义或使用的特征, 表示引用的状态由包含的部件所展示。 展示的状态及其子状态一般会反应所展示部件的情况,例如车辆的运行状态。 展示状态使用的值,即是展示部件所在状态的实存的引用。

TODO:

转换

状态使用可以通过转换使用(transition usage)连接,

并行状态

并行状态(parallel state) 的子状态是并发执行的。 因此,并行状态中的子状态之间不允许存在转换。 与之相反的是,如果一个非并行状态存在子状态,那么在进入动作完成之后, 包含状态的整个生命周期中的任意时间,只能正好有一个子状态是活动的。