14.2.4 表示法

状态机图

状态机图中的状态和其它类型的顶点由适当的状态和伪状态符号来表示,而转变通过表示为连接它们的有向弧,或者表示为代表转变上的行为动做的控制符号。

状态机

当以类图形式描绘状态机重定义的时候,可以使用缺省的矩形图示,在名称格间中状态机的名称之前或之上带有«statemachine»关键字。

状态机与它的上下文分类符或行为特征之间的关联没有特定的图形化表示。

区域

带有区域的组合状态或状态机使用虚线将自身划分为区域(图14.3)。每个区域可以有一个可选的名称。整个状态的文本格间被正交区域用实线分隔。

只有一个区域的组合状态或状态机表示为其中内嵌一个状态图。

图14.3 Notation for a composite State with Regions

状态

状态表示为一个圆角矩形,其中是状态的名称(图14.4)。

图14.4 State notation

可选的,它可以有一个附加的名称标签(图14.5)。这个名称标签是一个矩形,通常位于状态顶部的外面,它包含状态的名称。通常它用于显示具有正交区域的组合状态的名称,但是也可以用于其它场景下。

图14.5 State with a name tab

状态可以被水平线划分为多个分隔的格间(图14.6)。

图14.6 State with compartments

状态的格间有:

  • 名称格间
  • 内部行为格间
  • 内部转变格间

组合状态还有一个

  • 分解格间

这些格间描述如下:

  • 名称格间

    该格间显示状态(可选的)名称,是个字符串。没有名称的状态是匿名的并且是不同的。不希望在相同的图中出现两个同名的状态,因为会带来混淆,除非使用了控制图标来展示该状态机一个面向转变的视图。如果使用了名称标签就不应该使用名称格间,反之亦然。

对于子状态机状态,所引用状态机的名称显示在状态名称后的‘:’后。

  • 内部行为格间

该格间显示与状态关联的内部行为列表,每个条目具有如下形式:

  ['/' ]

<_behavior-type-label_>鉴别行为可以被调用的场景,可以是:

  • entry——该标签鉴别的行为在进入状态时执行(入口行为)。
  • exit——该标签鉴别的行为在离开状态时执行(离开行为)。
  • do——该标签鉴别一个正在进行的行为(doActivity行为),只要所建模元素位于该状态,它就一直执行,或者由该表达式规定的计算执行完毕。

可选的<_behavior-expression_>是一个文本形式的表达式,可以用提供商特定的或一些标准语言来表示(参见16.1)。

  • 内部转变格间

该格间包含internal转变列表,每个条目具有如下语法:

{}* ['[' ']'] [/]

其中<_trigger_>是触发器图示(参见13.3.4),<_guard_>是用于一个guard的布尔表达式,可选的<_behavior-expression_>是满足触发器和guard条件下要执行的effect行为。它是一个文本形式的表达式,可以使用提供商特定的或某门标准语言(参见16.1)。

作为一种选择,在文本表达式的地方,与状态或内部转变关联的不同行为可以用适当的图示在一个单独的图(例如一个活动图)中表示。

组合状态
  • 分解格间

该格间以区域、状态和转变的形式展示了它的组成结构。除了(可选的)名称和内部转变格间外,状态还可以有一个包含一个内签图的格间。为了简洁和展现,文本格间可能被水平收起。

有些情况下,可以方便地隐藏组合状态的这个分解。举个例子,组合状态内部有大量内嵌的状态而当前的图形区域空间不够。此时,该组合状态可以被表示为一个带有一个特定的组合图标(通常是在右下角)的简单状态(参见图14.8)。这个图标包含两个水平排列和连接的状态,它是一个可选的可视化暗示表示该状态有一个分解没有在当前的图中显示出来,而是在一个单独的图中展示。

注意. 这里的“以藏”只是为了图形化展示的便捷,没有任何访问限制方面的语义重要性。

组合状态在它的外边界或靠近(内或外)的地方可能有一个或多个入口和离开点。

图14.7 Composite State with two States

图14.8 Composite State with a hidden decomposition indicator icon

图14.9 Composite State with Regions

图14.10 Composite State with two Regions and entry, exit, and do Behaviors

子状态机状态

子状态状态被描绘为一个普通的状态,其中名称格间的字符串具有如下语法:

 ‘:’

子状态机状态符号可以包含对一个或多个入口点和离开点的引用。用于这些连接点引用的图示包括子状态机状态边界上的entry/exit伪状态。它们的名称就是被引用状态机中定义的相应的入口/离开点的名称(参见连接点引用)。

如果被引用的状态机通过它的initial伪状态进入或者作为状态机执行完成而离开,那么不用使用入口/离开点图示。类似的,如果离开是通过源自子状态机状态边界上的一个显示的组转变而发生的(意味着它应用于该被引用状态机的所有子状态),那么也不需要一个离开点。

调用相同子状态机的子状态机状态可能在相同的状态图中出现多次,可以使用作为不同转变一部分的入口和离开点。

图14.11中的图展示了一个状态机图的片段,其中一个子状态机状态(FailureSubmachine)被引用。实际被引用的状态机定义在某个封闭或引入的命名空间中。

图14.11 Submachine State example

在上面的例子中,被事件error1触发的转变终结在状态机FailureSubmachine的入口点sub1上。error3转变意味着采用FailureSubmachine的缺省转变。

源自subEnd离开点的转变将会执行fixed1行为(除了HandleFailure内的其它执行外)。该转变必须在HandleFailure状态机内部被触发。最后,源自该子状态机状态边上的转变作为FailureSubmachine到达它的FinalState是所产生的完成事件的结果来执行。

注意. 相同的图示可以应用于组合状态,唯一的不同是在状态名称中没有对状态机的引用。

图14.12是定义了两个离开点的状态机的例子。入口和离开点可以显示在框上或状态图内部。图14.12中例子中的状态机的一个离开点定义在了状态图内部。图14.13展示了相同的状态机,它使用的图示展示在了该状态机的框上。

图14.12 Submachine State example

图14.13 StateMachine with an exit point on the border

在图14.14中一个子状态机状态引用了图14.13中展示的状态机,状态符号中的离开点被显式的表示了出来。

图14.14 Submachine Sate that uses an exit point

组合状态的入口和离开点的例子展示在图14.23中。

状态列表图示

状态列表为实践中的某些特定场景提供了一种简洁的图形化展示。

注意. 这些只是纯粹表示形式不带任何相应的抽象语法表示。它们可以使用UML DI互相交互,参见附录B.4.4

具有相同触发器值、源自不同状态的多个效果无关(effect-free)转变,如果它们或者(a)目标是一个具有单一流出转变的公共junction顶点,或(b)终结在相同的目标状态上,那么它们可以被表示为类似一个单一的转变弧,该弧源自一个类似状态的图形化元素,它用之前转变源自的状态名称列表来标注。该弧终结在联合的目标状态上。图14.15展示了两种可能。图14.16展示了等价的图(没有有状态列表)。

图14.15 State list notation option

图14.16 Diagram equivalent to Figure 14.15 without using statelists

FinalState

FinalState表示为一个外环包含一个小的实心内环(图14.17)。所属封闭状态上的完成转变是一个不带标注的转变。

图14.17 FinalState notation

图14.7有一个FinalState的示例(组合状态中最右边的状态)。

伪状态

initial伪状态表示为一个小的实心环(图14.18)。在一个分类符行为状态机的一个区域内,来自initial伪状态的转变必须以创建该对象的出现的事件类型来标注;否则,它不能有标注。如果它没有被标注,它代表所属封闭状态的任意转变。

图14.18 initial Pseudostate

shallowHistory伪状态使用一个包含‘H’的小环来指示(图14.19)。它应用于直接包含它的状态区域。

图14.19 shallowHistory Pseudostate

deepHistory伪状态使用一个包含‘H*’的小环来指示(图14.20)。它应用于直接包含它的状态区域。

图14.20 deepHistory Pseudostate

入口点表示为状态机或组合状态的边界上的一个小环,带有相关的名称(参见图14.21)。

图14.21 entryPoint Pseudostate

可选的,它既可以在状态机图的内部,有可以在状态机图或组合状态的边界外部来显示。

离开点表示为状态机图或组合状态边界上带有叉的小环,带有相关的名称(参见图14.22)。

图14.22 exitPoint Pseudostate

可选的,离开点符号既可以在状态机图的内部,有可以在状态机图或组合状态的边界外部来显示。图14.23展示了组合状态中的入口和离开点的图示。

图14.23 entryPoint and exitPoints on a composite State

可选的,图14.30和图14.31中展示的“括号”图示也可以用于面向转变的图示。

junction表示为一个小的实心环(参见图14.24)。

图14.24 junction Pseudostate with incoming and outgoing Transitions

choice伪状态表示为一个菱形样式的符号,图14.25中左手图对其进行了示例。

图14.25 choice Pseudostates

注意. 当与离开choice伪状态的转变的触发器相关联的所有guards都是共享一个公共左操作数的二元表达式时,choice伪状态的图示可以被简化。左操作数可以被置于菱形样式符号的内部,guard表达式其余部分被置于流出的转变上。图14.25中右手边的图展示了与左手边相等的图。

terminate伪状态表示为一个叉,参见图14.26。

图14.26 terminate Pseudostate

fork和join的图示是一个短小而厚重的条(图14.27)。该条可能有一个或多个来自源状态到自身的箭头(表示join的时候)。该条可能有一个或多个从自身到状态的箭头(表示fork的时候)。转变字符串可以靠近该条显示。

图14.27 fork and join Pseudostates

连接点引用

指向入口点的连接点引用与entry伪状态的图示相同。环被置于状态符号的边界上。

图14.28 Entry point ConnectionPointReference notation

指向离开点的连接点引用与exit伪装态的图示相同。被环包围的叉被置于状态符号的边界上。

图14.29 Exit point ConnectionPointReference notation

作为另一种选择,指向入口点的连接点引用还可以使用一个“括号空间”来显示(如图14.30)。该符号内的文本应该包含‘via’,后面跟连接点的名称。这种图示可能只用于终结在连接点上的转变是使用图形化转变图示来定义的情况,例如图14.32显示的例子。

图14.30 Alternative entry point ConnectionPointReference notation

指向离开点的连接点引用也可以使用一个“括号空间”来显示(如图14.31)。该符号内的文本应该包含‘via’,后面跟连接点的名称。这种图示可能只用于与连接点关联的转变是使用图形化转变图示来定义的情况,例如图14.32显示的例子。

图14.31 Alternative exit point ConnectionPointReference notation

转变

转变的缺省文本表示由如下BNF表达式来定义:

[<trigger> [‘,’ <trigger>]* [‘[’ <guard> ‘]’] [‘/’ <behavior-expression>]]

其中<trigger>是触发器的标准表示(参见13.3.4),<guard>是用于guard的一个布尔表达式,可选的<behavior-expression>是以某种提供商特定的或标准语言编写的规定effect行为的表达式(参见16.1)。触发器可以是任意标准的触发器类型。SignalEvent触发器和CallEvent触发器无法由语法来区分,它们必须能够以它们在其它地方的声明来区分。

作为一种选择,当effect行为可以被描述为一个基于动作序列的控制流时,可以用类似于活动中所使用的图示来表示转变和复合转变。

注意. 尽管这种图示中包含类似于活动中所使用的图示的图形化元素,它是一种只能用于状态机的不同的形式,它的元素映射到适当的状态机概念。

这种图示采用有向图的形式,包括一个或多个图形化符号,它们之间又代表控制流的有向弧连接(参见图14.32)。除了源自initial伪状态的转变外的其它所有情况下,以标准简单状态图示形式出现的开始符号代表了该转变的源状态。如果这个转变有一个基于信号的触发器,那么与该源状态符号相连的一条弧指向一个特殊的信号receipt符号。如果该转变有多个触发器,它们按照如下描述的被列举在相同的符号内。

如果转变源自initial伪状态,那么开始符号是initial符号,它与initial伪状态的图示相同:一个填充的黑环。此时,没有信号receipt符号直接跟随该开始符号。

除了终结路径的结束符号外,下面的符号都可以适当地出现在这条链中:

  • 动作符号
  • 选择点符号
  • 信号发送符号
  • 合并符号

这些有向图中的终结符号总是一个代表准备目标状态的状态样式的符号或final状态符号(它与FinalState的符号相同)。

动作符号

每个动态符号都被表示为一个矩形,带有一个可选的文本动作规约。它映射到一个OpaqueAction或一个包含一个或多个按序执行的动作的SequenceNode。

信号receipt符号

信号receipt符号表示为看起来像是矩形在其其中一边有凹口的五边形。它映射到转变的触发器而不是规定了effect行为的活动的一个动作。触发器的信号的名称,以及任意guard按如下格式都被包含在该复合中:

<trigger> [‘,’ <trigger>]* [‘[’ <guard> ‘]’]

其中<trigger>按照13.3.4中描述的来规定,但只允许是信号和变更事件类型。触发器符号总是该复合路径中的第一个,并且一个复合转变最多只能有一个这样的符号。

信号发送符号

它代表了发送一个信号的动作,并且直接映射到一个SendSignalAction,后者是描述相应转变的effect行为的活动的一部分。这个图示对应于SendSignalAction的图示(参见16.3.4)。

选择点符号

这个符号直接映射到一个choice伪状态并且使用相同的图示。

注意. 它不是任何活动的一部分。

合并符号

合并符号用于连接多条控制流并直接映射为一个junction伪状态,并使用相同的图示。它不是任何活动的一部分。

图14.32 展示了一个复合转变,它包括四条连接的转变:一条从状态Idle到choice符号,两条通过junction符号的选择分支,还有一条从junction伪状态到状态Busy。

图14.32 Symbols for Signal reception, Sending, and Actions on a Transition

延迟的触发器

一个可延迟的触发器通过在状态中对其进行列举,并跟随一个斜线和“defer”。该图示的一个例子显示在图14.33中。在这个例子中,“requrest”事件出现的处理在状态“Initializing”和“Primed”中被延迟。然而,一旦到达“Operational”状态,它就会被处理。

图14.33 Deferred Trigger notation

转变种类

  • internal类型的转变不在图中显式表示。
  • local类型的转变可以源自所属组合状态的边界,或者它的一个入口点,或者组合状态中的一个顶点。(作为一种选择,local类型的转变可以表示为离开一个包含“*”的状态符号的转变。该转变被认为属于封闭的组合状态。)这种类型的转变只能终结在组合状态的边界,或者它的离开点,或者组合状态内部的一个顶点。图14.34中所有的转变都是local
  • external类型的转变可以指向源顶点所包含的或外部的任意顶点。该external转变靠近源的部分必须画在源顶点边界之外。在external self转变情况下,其中源是一个状态或状态上的离开点,它可能指向状态自身或状态的一个入口点,并且它将完全被画在状态边界的外面。图14.35中的所有转变都是external

图14.34 Local Transitions

图14.35 External Transitions

results matching ""

    No results matching ""