📜  统一建模语言 (UML) |状态图

📅  最后修改于: 2021-09-10 02:45:14             🧑  作者: Mango

状态图用于表示系统或系统一部分在有限时间实例中的状况。这是一个行为图,它使用有限状态转换来表示行为。状态图也称为状态机状态图图。这些术语经常互换使用。简单地说,状态图用于对类的动态行为进行建模,以响应时间和不断变化的外部刺激。我们可以说每个类都有一个状态,但我们不会使用状态图对每个类进行建模。我们更喜欢用三个或更多状态对状态进行建模。

状态图的用途——

  • 我们用它来说明导致状态变化的事件(我们没有显示是什么进程导致了这些事件)。
  • 我们用它来模拟系统的动态行为。
  • 了解对象/类对内部或外部刺激的反应。

首先让我们了解什么是行为图? UML 中有两种类型的图:

  1. 结构图——用于对系统的静态结构进行建模,例如类图、包图、对象图、部署图等。
  2. 行为图——用于对系统随时间的动态变化进行建模。它们用于建模和构建系统的功能。因此,行为图使用用例图、交互图、活动图和状态图简单地引导我们了解系统的功能。

状态图和流程图的区别——
状态图的基本目的是描绘类状态的各种变化,而不是引起变化的过程或命令。然而,另一方面,流程图描绘了在执行时改变类或类对象的状态的过程或命令。

UML-状态图

图——用户验证的状态图

上面的状态图显示了特定系统的验证子系统或类存在的不同状态。

状态图的基本组成部分——

  1. 初始状态——我们使用黑色实心圆圈表示系统或类的初始状态。

    UML-状态图

    图 –初始状态符号

  2. 转换——我们使用实心箭头表示控制从一种状态到另一种状态的转换或变化。箭头标有导致状态变化的事件。

    UML-状态图

    图 –过渡

  3. 状态 –我们使用圆角矩形来表示状态。状态表示某一时刻类的对象的条件或情况。
    UML-状态图
    图 –状态符号
  4. Fork –我们使用圆角实心矩形条来表示 Fork 符号,其中传入箭头来自父状态,传出箭头指向新创建的状态。我们使用分叉符号来表示一个状态分裂成两个或多个并发状态。

    UML-状态图

    图 –使用分叉符号的图表

  5. Join –我们使用圆角实心矩形条来表示 Join 符号,其中传入箭头来自加入状态,传出箭头指向共同目标状态。当两个或多个状态在一个或多个事件发生时同时收敛为一个时,我们使用连接表示法。

    UML-状态图

    图 –使用连接符号的图表

  6. 自转换——我们使用指向状态本身的实心箭头来表示自转换。可能存在对象的状态在事件发生时不改变的情况。我们使用自转换来表示这种情况。

    UML-状态图

    图 –自转换符号

  7. 复合状态 –我们也使用圆角矩形来表示复合状态。我们使用复合状态表示具有内部活动的状态。

    UML-状态图

    图 –具有内部活动的状态

  8. 最终状态——我们使用圆圈符号内的实心圆圈来表示状态机图中的最终状态。

    UML-状态图

    图 –最终状态符号

绘制状态图的步骤 –

  1. 确定初始状态和最终终止状态。
  2. 识别对象可以存在的可能状态(不同属性对应的边界值指导我们识别不同的状态)。
  3. 标记触发这些转换的事件。

示例 –在线订单的状态图 –

UML-状态图

图 –在线订单的状态图

我们绘制的 UMl 图取决于我们要表示的系统。以下是在线订购系统的示例:

  1. 在收到订单时,我们从初始状态转换为未处理订单状态。
  2. 然后检查未处理的订单。
  3. 如果订单被拒绝,我们将转换到 Rejected Order 状态。
  4. 如果订单被接受并且我们有可用的物品,我们将转换为已完成的订单状态。
  5. 但是,如果商品不可用,我们将转换为 Pending Order 状态。
  6. 订单完成后,我们过渡到最终状态。在此示例中,我们将两种状态(即已完成订单和已拒绝订单)合并为一个最终状态。

注意 –在这里,我们也可以将已完成的订单和拒绝的订单分别视为最终状态。

参考 –
状态图 – IBM