什么是 UML 状态图?

状态图(在UML 1.x 规范中称为)是显示状态机的图,在UML 2.x中称为状态机图。所谓状态机,就是描述一个对象在其生命周期中的各种状态和状态转换的一种行为。状态图是用于在 UML 2.0 中建模的14 个 UML 图之一。

 

14 种 UML 图类型概述

它定义了对象在其生命周期中的不同状态,这些状态会随着事件的变化而变化。状态图对于建模反应系统很有用,反应系统可以定义为对外部或内部事件做出反应的系统。状态图描述了从一种状态到另一种状态的控制流程。状态被定义为对象存在的条件,该对象在事件被触发时发生变化。

状态图的目的是什么?

状态图的重要目的是对对象从创建到终止的生命周期进行建模。

  1. 对系统的动态方面进行建模,并提供有关系统信息的更全面的表示。
  2. 描述一个对象在其生命周期中的不同状态,无论是处于触发状态、休眠状态还是死亡状态。
  3. 对对象的生命周期进行建模,帮助程序员设计对象的方法等。
  4. 帮助程序员理解需求,提高编码速度。

UML 状态图的组件

UML 状态图主要由五个元素组成,即状态、转换、事件、动作和活动。

实际上,状态图可能非常复杂——您可以嵌套状态图、在状态之前放置警卫(真/假)、添加由状态更改触发的操作,甚至可以将事件推迟到以后处理。这些图表可能会占用大量文本,并且条件通常是针对特定的编程语言编写的。这可以使图表看起来很复杂,但它也可以使编程(和测试)更快,因为误解的可能性更小。

编辑此状态机图

UML 状态图的组件

UML 状态图使用您可能在 UML 活动图中看到的符号。

  • 开始状态:实心圆圈。
  • 结束状态:带圆角的实心圆。
  • 状态:带有动作名称的圆角矩形。
  • 过渡:带有标签的连接箭头,指示该过渡的触发器(如果有)。
  • 具有内部活动的状态:具有水平线的状态,其行为列在下半部分。
  • 复合状态:下半部分带有水平线和嵌套状态图(或指向另一个 draw.io 页面的链接)的状态。
  • 守卫或条件:钻石。
  • Fork:一条较粗的线,具有一个转换输入和两个或多个输出。
  • 连接:一条较粗的线,具有多个转换输入且只有一个转换。

状态机图示例——电话

在此状态图示例中,电话线在呼叫开始时处于空闲状态。当电话从挂机上取下时,它会发出拨号音,并且可以接受数字进行拨号。输入有效号码后,电话系统会尝试连接呼叫并将其路由到适当的目的地。如果号码或中继线忙,连接可能会失败。如果连接成功,被叫电话开始振铃。当线路再次挂断时,电话线将恢复空闲状态。

编辑此状态机图

UML 状态图示例 – Online Bookshop

状态图 - 快速教程

编辑此状态机图

UML 状态图 – 库系统

编辑此状态机图