使用draw.io的UML状态图
状态图已在编程中用于描述系统可能处于几十年的各种可能状态。它们还可以快速显示哪些状态相互引导,以及哪些触发状态更改。
当然,您可以将这些图用于具有各种状态的任何系统或过程-图书馆书籍,出版过程,甚至是对孩子的惩罚和奖励状态。它们与流程图非常相似,但是UML具有专门用于状态图的表示法,它们也称为状态机或状态图。
UML表示法中的状态图
状态图与活动或交互概述图之间的最大区别在于,状态图不会(必需)显示顺序。他们只是表示什么状态是可能和他们的进入和退出点,而不是当这些状态被输入。
状态图可能非常复杂–您可以嵌套状态图,在状态之前放置防护(真/假),添加由状态更改触发的动作,甚至推迟事件以在以后处理。这些图可能会占用大量文字,并且条件通常是针对一种特定的编程语言编写的。这可能会使图表看起来很复杂,但由于误解的可能性较小,因此也可以使编程(和测试)更快。
UML状态图的组件
UML状态图使用您在UML活动图中可能已经看到的符号 。
- 起始状态:实心圆。
- 结束状态:带有圆环的实心圆。
- 状态:带有圆角的矩形,带有动作的名称。
- 过渡:带有标签的连接器箭头,用于指示该过渡的触发器(如果有)。
- 具有内部活动的状态:具有水平线的状态,其行为在下半部分列出。
- 组合状态:在下半部分带有水平线和嵌套状态图(或链接到另一个draw.io页)的状态。
- 警卫或条件:钻石。
- 音叉:较粗的线,其中有一个过渡输入,有两个或多个输出。
- 连接:一条较粗的线,有多个过渡输入,只有一个过渡。
提示: UML 2状态图使用透明的黑色/白色形状,而UML 1具有黄色形状和红色轮廓。我个人觉得UML 2更容易阅读。
启用UML形状库
在draw.io中,活动图所需的所有形状都在UML形状库中。单击 左侧面板底部的More Shapes …,然后启用 UML shape库并单击 Apply。
查找形状的速度更快:即使您没有显示UML库,也可以在左侧面板中搜索“状态”,它会向您显示创建状态图所需的形状(以及与其他图表类型中的“状态”相关的其他少数)。
货叉/接头和护板之间的区别
警卫代表基于条件的决策,类似于流程图中的决策。在下面的简单示例中,警卫人员检查是否已支付费用。如果是,它将继续到下一个状态。如果否,它将中止整个注册。
分支和联接发生在程序中同时执行两个或更多并行操作的地方-并发状态。如果有一个分叉,将有一个相应的联接,不同的“线程”将在该联接上进行同步。在下面的简单示例中,为本科生和研究生都分配了学生ID(大学管理),该ID与分配研究生指导员(教师管理)同时发生。
习惯跟踪器示例的UML状态图
继续与先前的UML图帖子中使用的示例相同,我为用户登录到Habit Tracker时创建了一个状态图。您可以确定它类似于活动图(在状态图之后显示)。
因为此示例很简单,并且不包含任何并行动作或状态,所以使用两种类型的图都没有意义。实际上,大多数软件都是非常复杂的,有时除了(或代替活动图)还需要状态图。
draw.io中的UML图
除了状态图,您还可以使用draw.io轻松创建所有其他UML图类型:
- 用例图
- 活动图
- 类图
- 顺序图
- 互动概述图