状态图用于表示系统或系统一部分在有限时间实例中的状况。这是一个行为图,它使用有限状态转换来表示行为。状态图也称为状态机和状态图图。这些术语经常互换使用。简单地说,状态图用于对类的动态行为进行建模,以响应时间和不断变化的外部刺激。我们可以说每个类都有一个状态,但我们不会使用状态图对每个类进行建模。我们更喜欢用三个或更多状态对状态进行建模。
状态图的用途——
- 我们用它来说明导致状态变化的事件(我们没有显示是什么进程导致了这些事件)。
- 我们用它来模拟系统的动态行为。
- 了解对象/类对内部或外部刺激的反应。
首先让我们了解什么是行为图? UML 中有两种类型的图:
- 结构图——用于对系统的静态结构进行建模,例如类图、包图、对象图、部署图等。
- 行为图——用于对系统随时间的动态变化进行建模。它们用于建模和构建系统的功能。因此,行为图使用用例图、交互图、活动图和状态图简单地引导我们了解系统的功能。
状态图和流程图的区别——
状态图的基本目的是描绘类状态的各种变化,而不是引起变化的过程或命令。然而,另一方面,流程图描绘了在执行时改变类或类对象的状态的过程或命令。
上面的状态图显示了特定系统的验证子系统或类存在的不同状态。
状态图的基本组成部分——
- 初始状态——我们使用黑色实心圆圈表示系统或类的初始状态。
图 –初始状态符号 - 转换——我们使用实心箭头表示控制从一种状态到另一种状态的转换或变化。箭头标有导致状态变化的事件。
图 –过渡 - 状态 –我们使用圆角矩形来表示状态。状态表示某一时刻类的对象的条件或情况。
图 –状态符号 - Fork –我们使用圆角实心矩形条来表示 Fork 符号,其中传入箭头来自父状态,传出箭头指向新创建的状态。我们使用分叉符号来表示一个状态分裂成两个或多个并发状态。
图 –使用分叉符号的图表 - Join –我们使用圆角实心矩形条来表示 Join 符号,其中传入箭头来自加入状态,传出箭头指向共同目标状态。当两个或多个状态在一个或多个事件发生时同时收敛为一个时,我们使用连接表示法。
图 –使用连接符号的图表 - 自转换——我们使用指向状态本身的实心箭头来表示自转换。可能存在对象的状态在事件发生时不改变的情况。我们使用自转换来表示这种情况。
图 –自转换符号 - 复合状态 –我们也使用圆角矩形来表示复合状态。我们使用复合状态表示具有内部活动的状态。
图 –具有内部活动的状态 - 最终状态——我们使用圆圈符号内的实心圆圈来表示状态机图中的最终状态。
图 –最终状态符号
绘制状态图的步骤 –
- 确定初始状态和最终终止状态。
- 识别对象可以存在的可能状态(不同属性对应的边界值指导我们识别不同的状态)。
- 标记触发这些转换的事件。
示例 –在线订单的状态图 –
我们绘制的 UMl 图取决于我们要表示的系统。以下是在线订购系统的示例:
- 在收到订单时,我们从初始状态转换为未处理订单状态。
- 然后检查未处理的订单。
- 如果订单被拒绝,我们将转换到 Rejected Order 状态。
- 如果订单被接受并且我们有可用的物品,我们将转换为已完成的订单状态。
- 但是,如果商品不可用,我们将转换为 Pending Order 状态。
- 订单完成后,我们过渡到最终状态。在此示例中,我们将两种状态(即已完成订单和已拒绝订单)合并为一个最终状态。
注意 –在这里,我们也可以将已完成的订单和拒绝的订单分别视为最终状态。
参考 –
状态图 – IBM