UML 状态机图 & 状态图
什么是状态机图?
状态图用于捕获软件系统的行为。UML状态机图可用于建模类、子系统、包或甚至整个系统的行为。它也称为状态图或状态转换图。
什么是状态图?
状态图为我们提供了一种有效的方法来模拟发生在外部实体和系统之间的交互或通信。这些图用于模拟基于事件的系统。对象的行为由事件控制。状态图用于描述应用程序系统中实体的各种状态。
UML中共有两种状态机图
1. 行为状态机图
- 它捕获系统中存在的实体的行为。
- 它用于表示元素的特定实现。
- 在OOAD中,可以使用行为状态机图来建模系统的行为。
2. 协议状态机图
- 这些图用于捕获协议的行为。
- 它表示协议的状态如何随事件变化。它也表示系统中相应的变化。
- 它们不表示元素的特定实现。
为什么选择状态机图?
状态图用于捕获系统的动态方面。状态机图用于表示应用程序的行为。对象在其生命周期中会经历各种状态。对象的生命周期一直持续到程序终止。对象根据对象内发生的事件从多个状态转移。每个状态都代表有关该对象的某些唯一信息。
状态图用于设计响应内部或外部事件的交互式系统。UML中的状态图可视化了对象从一个状态到另一个状态的执行流程。
它表示对象从创建到对象被销毁或终止的整个过程中的状态。
状态图的主要目的是对交互式系统进行建模并定义对象的每个状态。状态图旨在捕获应用程序系统的动态行为。这些图用于表示系统中各种状态以及系统内的实体。
状态机图(状态图)的表示法和符号
以下是状态图表中使用的各种表示法。所有这些表示法组合在一起构成了一个单一的图。
初始状态
初始状态符号用于指示状态机图的开始。
最终状态
此符号用于指示状态机图的结束。
决策框
它包含一个条件。根据评估的保护条件的计算结果,程序执行会采取新的路径。
转换
转换是指由于某个事件而发生的一个状态到另一个状态的变化。转换会导致对象状态的变化。
状态框
它是对象生命周期中的一个特定时刻。它使用分类器体内的某个条件或语句来定义。它用于表示任何静态和动态情况。
它用圆角矩形表示。状态的名称写在圆角矩形内部。
状态的名称也可以放在矩形外部。这在复合状态或子机状态的情况下可以做到。可以将状态的名称放在矩形内部,或者放在表格框的外部。两者不能同时执行。
状态可以是活动的或非活动的。当一个状态处于工作模式时,它是活动的;一旦它停止执行并转移到另一个状态,前一个状态就变为非活动状态,而当前状态变为活动状态。
状态类型
统一建模语言定义了三种状态
- 简单状态
- 它们没有任何子状态。
- 复合状态
- 这些类型的状态可以有一个或多个子状态。
- 具有两个或多个子状态的复合状态称为正交状态。
- 子机状态
- 这些状态在语义上等于复合状态。
- 与复合状态不同,我们可以重用子机状态。
如何绘制状态图?
状态图用于描述对象所经过的各种状态。状态之间的转换是由于某个触发事件而发生的。要绘制 UML 中的状态图,必须先识别任何特定实体的所有可能状态。
这些 UML 图的目的是表示系统的状态。状态在状态转换图中起着至关重要的作用。在实现图之前,必须先分析所有必要的对象、状态以及导致状态变化的事件。
绘制状态图时必须考虑以下规则
- 状态转换的名称必须是唯一的。
- 状态的名称必须易于理解并描述状态的行为。
- 如果存在多个对象,则应仅实现必需的对象。
- 为每个转换和事件提供适当的名称。
何时使用状态机图?
状态图用于深入实现现实世界的运行模型和面向对象系统。这些图通过捕获系统的动态行为来比较系统的动态和静态性质。
状态图用于捕获系统中各种实体从开始到结束的变化。它们用于分析事件如何触发系统中多个状态的变化。
状态图用于
- 建模系统的对象。
- 建模和实现交互式系统。
- 显示触发状态变化的事件。
状态机示例
以下状态图示例图表显示了用户身份验证过程。
共有两种状态,第一种状态表示需要先输入 OTP。之后,在决策框中检查 OTP,如果正确,则只会发生状态转换,并且用户将被验证。如果 OTP 不正确,则不会发生转换,它将再次返回到开始状态,直到用户输入正确的 OTP,如上面的状态机图示例所示。
状态机图与流程图
以下是状态图和流程图之间的主要区别
状态机图 | 流程图 |
---|---|
它表示系统的各种状态。 | 流程图说明了程序执行流程。 |
状态机具有 WAIT 概念,即等待操作或事件。 | 流程图不涉及等待概念。 |
状态机用于实时运行的系统。 | 流程图可视化了系统的分支序列。 |
状态机是建模图。 | 流程图是顺序流程图或 DFD 图。 |
状态机可以探索系统的各种状态。 | 流程图处理路径和控制流。 |
摘要
- 状态图也称为状态机图。
- 这些图用于建模基于事件的系统。
- 实体的状态由事件控制。
- 状态机图共有两种类型:1) 行为状态机图 2) 协议状态机图
- 状态图用于捕获系统的动态方面。
- 状态是对象生命周期中的特定时刻。