今天是:
带着程序的旅程,每一行代码都是你前进的一步,每个错误都是你成长的机会,最终,你将抵达你的目的地。
title

UML状态机

1.什么是状态机

UML(Unified Modeling Language)状态机是一种建模工具,用于描述对象、组件或系统在其生命周期中经历的不同状态以及状态之间的转换。它是UML的一部分,广泛应用于软件工程和系统设计中。

状态机图(State Machine Diagram)是用于表示状态机的UML图形表示。它由状态(State)、转换(Transition)、事件(Event)和动作(Action)等元素组成。状态表示对象或系统的特定状态,转换表示状态之间的转换条件,事件是触发状态转换的输入,而动作则是与状态转换相关联的行为。

通过UML状态机,您可以可视化和明确地描述对象或系统的行为,包括可能的状态集合、状态之间的转换条件和触发状态转换的事件。它可以帮助团队更好地理解和沟通系统的运行逻辑,以及识别潜在的状态转换问题。

2.startuml图标含义

 

  • Initial State

    一个初始伪状态(Initial Pseudostate)表示一个默认的顶点,它是指向复合状态的默认状态的单个转换的起点。一个区域中最多只能有一个初始顶点。从初始顶点出发的转换可以有行为,但不能有触发器.

  • Final State

    最终状态(Final State)是一种特殊类型的状态,表示包含的区域已完成。如果包含的区域直接包含在状态机中,并且状态机中的所有其他区域也已完成,则表示整个状态机已完成。请注意,由于某种原因,UML 2.4将最终状态定义为状态的子类,而不是伪状态(Pseudostate)。(初始状态是伪状态。)

    最终状态以一个包围着一个小实心填充圆圈的大圆圈表示。

  • Simple State

    简单状态(Simple State)是指没有子状态的状态 - 它没有区域,也没有子状态机状态。

    简单状态以带有圆角的矩形表示,并在矩形内部显示状态名称。

  • Choice

    选择伪状态(Choice Pseudostate)实现了动态条件分支。它评估出站转换的触发器的卫语(guard)来选择仅一个出站转换。决定选择哪个路径可能取决于在相同的运行至完成(run-to-completion)步骤中执行的先前动作的结果。动态选择应与静态连接点分支点(junction branch points)区分开。

    选择伪状态以菱形符号表示。

  • Join

    连接伪状态(Join Pseudostate)合并了来自不同正交区域中源顶点的多个转换。进入连接顶点的转换不能具有卫语(guard)或触发器(trigger)。

    连接的符号表示为一条短而粗的横杠。横杠上可能有一个或多个箭头从源状态指向横杠。转换字符串可以显示在横杠附近。

  • Fork

    分叉伪状态(Fork Pseudostate)用于将一个入站转换分为两个或多个转换,以终止于正交目标顶点(即,复合状态的不同区域中的顶点)。从分叉顶点出发的分段不能具有卫语(guard)或触发器(trigger)。

    分叉的符号表示为一条短而粗的横杠。横杠上可能有一个或多个箭头指向状态。转换字符串可以显示在横杠附近。

  • Transition

    转换(Transition)是源顶点和目标顶点之间的有向关系。它可以是复合转换的一部分,将状态机从一个状态配置转换到另一个状态配置,表示状态机对特定类型事件的发生的完整响应。
  • Self Transition
    自身内部转换 ,源顶点和目标顶点都是自身

 

  • Composite State​​​​​​​

    复合状态(Composite State) 一般而言,复合状态是指具有子状态(嵌套状态)的状态。子状态可以是顺序(互斥)的或并发(正交)的。UML 2.4将复合状态定义为包含一个或多个区域的状态。(请注意,区域被定义为复合状态或状态机的正交部分。)一个状态不允许同时拥有区域和子状态机。

    简单复合状态只包含一个区域。
     

    在UML 2.4 中,区域被定义为复合状态或状态机的正交部分。区域包含状态和转换。

    具有区域的复合状态或状态机通过使用虚线将状态/状态机的图形区域平铺,将其分割成区域进行展示。每个区域可以有一个可选的名称,并包含嵌套的互斥状态和它们之间的转换。整个状态的文本部分通过一条实线与正交区域分隔开。

    只有一个区域的复合状态或状态机通过在图形区域内显示一个嵌套的状态图来表示。

    为了表示继承的区域是扩展的,关键字«extended»与区域的名称关联在一起。

  • Submachine State​​​​​​​

    子状态机状态(Submachine State)指定了插入子状态机状态机规范。包含子状态机状态的状态机被称为容器状态机。在单个容器状态机的上下文中,同一个状态机可以是子状态机多次使用。

    子状态机状态在语义上与复合状态等效。子状态机状态机的区域是复合状态的区域。入口、出口和行为动作以及内部转换被定义为状态的一部分。子状态机状态是一种分解机制,允许对常见行为进行分解并重复使用。

    名称部分保存状态的(可选)名称,作为字符串。引用状态机的名称以状态名称后的冒号后的字符串形式显示。

  • Orthogonal state​​​​​​​

    正交复合状态(Orthogonal Composite State)具有多个区域。每个区域都有一组互斥的子顶点和一组转换。给定的状态只能以这两种方式之一进行分解。

    复合状态的区域中包含的任何状态都被称为该复合状态的子状态。当一个状态不被任何其他状态包含时,它被称为直接子状态;否则,它被称为间接子状态。

    复合状态的每个区域可以有一个初始伪状态和一个最终状态。对包含状态的转换表示对每个区域的初始伪状态的转换。新创建的对象会根据每个区域的顶部初始伪状态的顶部默认转换进行处理。

    复合状态可以在附加的名称标签内放置状态名称。名称标签是一个矩形,通常位于状态的顶部外侧。

    复合状态可以有多个部分。状态的部分包括:

    名称部分 内部活动部分 内部转换部分 分解部分
     

  • Junction​​​​​​​

    连接点伪状态(Junction Pseudostate)是用于连接多个转换的顶点。它们用于构建状态之间的复合转换路径。例如,连接点可用于将多个入站转换汇聚为表示共享转换路径的单个出站转换(这被称为合并)。

    相反地,它们可用于将一个入站转换分成多个具有不同卫语条件的出站转换段。这实现了静态条件分支。(在后一种情况下,如果所有标记其他转换的卫语条件都为假,则使得卫语条件为"else"的出站转换可用。)

    最多可以为一个出站转换定义一个预定义的卫语条件,表示为"else"。如果所有标记其他转换的卫语条件都为假,则该转换将被启用。静态条件分支与由选择点实现的动态条件分支是不同的。

    连接点由一个小黑圆圈表示。

    源自一组状态并针对连接点顶点具有单个出站转换的多个无触发器和无效果的转换可以呈现为状态符号,带有状态名称列表和与连接点的出站转换对应的出站转换符号。

    连接点的特殊情况是以历史作为目标的转换,可以选择将其呈现为目标为状态列表状态符号。

  • Shallow History​​​​​​​

    浅历史伪状态(Shallow History Pseudostate)表示包含状态的最近活动子状态(但不包括该子状态的子状态)。复合状态最多可以有一个浅历史顶点。进入浅历史顶点的转换等效于进入状态的最近活动子状态的转换。最多可以有一个转换从历史连接器指向默认的浅历史状态。如果复合状态以前从未激活过,则采用该转换。由浅历史表示的状态的进入动作将被执行。

    浅历史由一个小圆圈表示,其中包含一个“H”。它应用于直接包围它的状态区域。

  • Deep History​​​​​​​

    深历史伪状态(Deep History Pseudostate)表示直接包含该伪状态的复合状态的最近活动配置(例如,当复合状态最后退出时活动的状态配置)。复合状态最多可以有一个深历史顶点。最多可以有一个转换从历史连接器指向默认的深历史状态。如果复合状态以前从未激活过,则采用该转换。对由深历史表示的最内层状态的隐式直接路径上进入的状态的进入动作将被执行。每个被恢复的活动状态配置中的状态只执行一次进入动作。

    深历史由一个小圆圈表示,其中包含一个“H*”。它应用于直接包围它的状态区域。

  • Entry Point​​​​​​​

    Entry point pseudostate是状态机或复合状态的入口点。在状态机或复合状态的每个区域中,它最多可以有一条到同一区域内的顶点的转换。

    入口点在状态机图或复合状态的边界上表示为一个小圆圈,并与其关联的名称一起显示。

  • Exit Point​​​​​​​

    Exit point pseudostate是状态机或复合状态的退出点。在复合状态或状态机的任何区域中进入一个退出点,意味着退出该复合状态或子机状态,并触发将该退出点作为源头的转换,该转换在包含子机或复合状态的状态机中发生。

    退出点在状态机图或复合状态的边界上显示为一个带有十字标记的小圆圈,并与其关联的名称一起显示。

  • Terminate​​​​​​​

    终止伪状态(Terminate Pseudostate)表示通过其上下文对象终止状态机的执行。状态机不会退出任何状态,也不会执行除与导致终止伪状态的转换相关的退出操作之外的任何退出操作。进入终止伪状态相当于调用一个DestroyObjectAction(销毁对象动作)。

    终止伪状态以一个十字形符号表示。

  • Connection Point Reference

3.例子

1. saga创建订单状态机

2.ATM取款机

分享到:

专栏

类型标签

网站访问总量