UML 状态图

article/2025/10/2 0:06:02

在系统分析员对某对象建模时,最自然的方法并不是着眼于从活动到活动的控制流,而是着眼于从状态到状态的控制流。

状态机

定义: 状态机是展示状态与状态转换的图。在计算机科学中,状态机的使用非常普遍:在编译技术中通常用有限状态机描述词法分析过程;在操作系统的进程调度中,通常用状态机描述进程的各个状态之间的转化关系。此外,在面向对象分析与设计中,对象的状态、状态的转换、触发状态转换的事件、对象对事件的响应(即事件的行为)都可以用状态机来描述。

组成: 由状态、转换、时间、活动、和动作 5 部分组成。

  1. 状态:表示一个模型在其生存期内的状况,一个状态的生存期是一个有限的时间段。如满足某些条件或等待某些事件。
  2. 转换表示两个不同状态之间的联系,事件可以触发状态之间的转换。
  3. 事件是在某个时间产生的,可以触发状态转换的部分,如信号、对象的创建和销毁、超时和条件的改变等。
  4. 活动是在状态机中进行的一个非原子的执行,由一系列动作组成。
  5. 动作是一个可执行的原子计算,它导致状态的变更或者返回一个值。

状态图

一个状态图表示一个状态机,主要用于表现从一个状态到另一个状态的控制流。它不仅可以展现一个对象拥有的状态,还可以说明事件(如消息的接收、错误、条件变更等)如何随着时间的推移来影响这些状态。

一个简单状态图:
这里写图片描述

状态机通常包括以下内容:

1.状态
定义对象在其生命周期中的条件或状况。对象满足某些条件,执行某些对应的操作或等待某些事件。

状态是状态机的重要组成部分,它描述了状态机所在对象动态行为的执行所产生的结果。这里的结果一般是指能影响此对象对后续事件响应的结果。状态用于对对象在其生命中的状况建模,在这些状况下状态可以满足某些条件、执行某些操作或等待某些事件。

完整的状态由 5 个组成部分:

  • 名字(name)

    由一个字符串构成,用以识别不同的状态。状态可以没有名字。状态名一般放置在状态图符的顶部。

  • 入口/出口动作(entry/exit action)

    入口/出口动作表示进入/退出这个状态所执行的动作。入口动作的语法是 entry/ 执行的动作;出口动作的语法是 exit/ 执行的动作。这里所指的动作可以是原子动作,也可以是动作序列(action sequence)。

  • 内部转换(Internal Transition)

    内部转换是不会引起状态变化的转换,此转换的触发不会导致状态的入口/出口动作被执行。定义内部转换的原因是有时候入口/出口动作显得是多余的。

    出口动作显得多余,这时就可以使用内部转换,而不触发入口/出口动作的执行。

    在图形表示上,由于内部转换不引起状态的转变,因此它的文字标识被附加在表示状态的圆角矩形内部,而不使用箭头进行图形标识。

  • 延迟事件(Deferred Event)

    延迟事件该状态下暂不处理,但将推迟到该对象的另一个状态下事件处理队列。也就是所延迟事件是事件的一个列表,此列表内的事件当前状态下不会处理,在系统进入其他状态时再处理。

  • 子状态 (Substate)

    在复杂的应用中,当状态机处于某特定的状态时,状态机所在的对象在此刻的行为还可以用一个状态机来描述,也就是说,一个状态内部还包括其他状态。在 UML 里,子状态被定义成状态的嵌套结构,即包含在某状态内部的状态。

    在UML里,包含子状态的状态被称为复合状态(Composite State),不包含子状态的状态被称为简单状态(Simple State)。子状态以两种形式出现:顺序子状态和并发子状态。

2.转换
转换包括事件和动作。事件是发生在时间空间省的一点值得注意的事情。动作是原子性的,通常表示为一个简短的计算处理过程。

转换是状态间的关联。它们用于对一个实体的不同状态间的关系建模。当某实体在第一个状态中执行一定的动作,并在某个特定事情发生并且某个特定的条件满足时进入下一个状态。

在 UML 里,转换由5个部分组成,它们分别是:源状态、目标状态、触发事件、监护条件和动作。

  • 源状态(Source State)

    转换描述的是状态机所在的对象的状态的变化(状态图是可视化状态机的一种方式)。转换使对象从某个状态转换到另一个状态。那么在转换被激发之前,对象所处的状态就是转换的源状态。源状态就是被转换影响的状态。某对象处于源状态,当它接收到触发事件或满足监护条件,就会激活一个转换。

  • 目标状态(Target State)

    转换使对象从一个状态转换到另一个状态。转换完成后,对象状态发生了变化,这时对象所处的状态就是转换的目标状态。目标是转换完成后活动的状态。在图形上,转换的源状态位于表示转换的箭头的起始位置。转换的目标状态位于表示转换的箭头所指的那个状态。

  • 触发事件(Trigger Event)

    状态机描述了对象的具有事件驱动的动态行为。在这些动态行为中,对象动作的执行、状态的改变都是以特定事件的发生为前提的。转换的触发事件就是引起转变的事件。这里所指的事件可以是信号、调用、时间段或状态的一个改变。

  • 监护条件(Guard Condition)

    转换可能具有一个监护条件。监护条件是一个方括号括起来的布尔表达式,它被放在触发事件的后面。监护条件可以引用对象的属性值和触发事件的参数。当一个触发事件被触发时,布尔表达式被赋值。如果值是“真”,则触发事件使转换有效。如果值是“假”,则不会引起转换。
    监护条件只在引起转换的触发事件发生时被赋值一次,如果此转换被重新触发,监护条件会被重新赋值。

  • 动作(Action)

    当转变被激活时,它对应的动作被执行。动作是一个可执行的原子计算,它可以包括操作调用、另一个对象的创建或撤销、向一个对象发送信号。动作也可以是一个动作序列,即包括一序列的简单动作。动作或动作序列的执行不会被同时发生的其他动作所影响。动作的执行时间是非常短的,与外界的时间相比几乎可以忽略,因此在动作执行过程中不允许被中断,这点正好与活动相反,活动是可以被其他事件中断的。在某动作执行时,一般新进的事件会被安排在一个等待队列里。

状态图用途

状态图用于对系统的动态方面建模,动态方面指出现在系统体系结构中任一对象按事件排序的行为,其中这些对象可以是类、接口、构件和节点。当使用状态图对系统建模时,可以在类、用例、子系统或整个系统的语境中使用状态图。

它能帮助系统开发人员理解系统中对象的行为。而类图和对象图只能展现系统的静态层次和关联,并不能表达系统的行为。一幅结构清晰的状态图详细描述了对象行为,这大大地帮助了开发人员构造出符合用户需求的系统。

状态图建模步骤

(1)识别一个要对其生命周期进行描述的参与行为的类;
(2)对状态建模,即确定对象可能存在的状态;
(3)对事件建模,即确定对象可能存在的事件;
(4)对动作建模,即确定当转变被激活时,相应被执行的动作;
(5)对建模结果进行精化和细化。


http://chatgpt.dhexx.cn/article/IfBWjijH.shtml

相关文章

时序图、流程图、状态图、协作图之间的区别

时序图 时序图用于描述对象之间的传递消息的时间顺序, 即用例中的行为顺序. 当执行一个用例时, 时序图中的每条消息对应了一个类操作或者引起转换的触发事件. 在 UML 中, 时序图表示为一个二维的关系图, 其中, 纵轴是时间轴, 时间延竖线向下延伸. 横轴代表在协作中各个独立的…

UML之状态图

一、状态图概要 状态图是一种行为图。描述一个特定对象的所有可能的状态以及引起状态转换的事件。 在面向对象的软件系统中,一个对象无论多么简单或者多么复杂,都必然会经历一个从开始创建到最终消亡的完整过程,这个过程通常被称为对象的生命…

一张图阐述UML状态图的画法【软件工程】

文章目录 I.介绍状态图II.一图搞定状态图画法 I.介绍状态图 状态图展示了一个特定对象的所有可能状态以及由于各种事件的发生而引起的状态间的转移。 它有两大特征: 1️⃣所有的变化都是针对某一个特定的对象,这个对象会触发各种的状态。 2️⃣触发的…

UML状态图 几种状态图

目录 1、状态图模型要素 2、 几种类型 2.1初态(start state) 2.2终态 (end state) 2.3 中间状态 2.4组合状态 2.5历史状态(History state) 3、状态图建模步骤 4、几种状态图举例 1、状态图模型要素…

UML--状态图

一、 概述 状态图(State Diagram)用来描述一个特定对象在其生命周期中的各种状态以及状态之间的转换。这些对象可以是类、接口等等 二、作用 -状态图清晰地描述了状态之间的转换顺序,通过状态的转换顺序可以清晰看出事件的执行顺序。如果没有状态图就不可避免的要使…

DBSCAN聚类算法(商场数据分析)

DBSCAN聚类算法(商场数据分析) 引入库邻域半径,最少点数目参数数据最佳参数分析选择最佳参数,查看结果 引入库 from sklearn.cluster import DBSCAN邻域半径,最少点数目参数 from itertools import producteps_value…

机器学习-DBSCAN聚类算法

文章目录 DBSCAN算法原理DBSCAN算法流程DBSCAN的参数选择DBSCAN优缺点总结 K-Means算法和Mean Shift算法都是基于距离的聚类算法,基于距离的聚类算法的聚类结果是球状的簇,当数据集中的聚类结果是非球状结构时,基于距离的聚类算法的聚类效果并…

DBSCAN聚类算法实例

1.实验目标 算法:DBScan,基于密度的聚类算法 输入: D:一个包含n个数据的数据集 r:半径参数 minPts:领域密度阈值 输出:基于密度的聚类集合 2.实验步骤 标记D中所…

DBSCAN聚类算法原理和伪代码

1.DBSCAN算法 K-means聚类算法基于距离的聚类算法,其中的局限性在于,在凸集中进行聚类,但是在非凸集聚类效果不佳。如图: 对于下图,进行聚类,传统的聚类算法效果不佳,使用DBSCAN则效果更佳。 D…

Python学习2——DBSCAN聚类算法

一、原理 参考博文: DBSCAN聚类算法Python实现_徐奕的专栏-CSDN博客_dbscan pythonhttps://blog.csdn.net/xyisv/article/details/88918448DBSCAN是一种基于密度的聚类算法,这类密度聚类算法一般假定类别可以通过样本分布的紧密程度决定。同一类别的样…

DBSCAN聚类算法——MATLAB实现

声明:本文修改自《数学建模清风》老师的代码 DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法。与划分和层次聚类方法不同,它将簇定义为密度相连的点的最大集合,能够把具有足够…

DBSCAN聚类算法实用案例

目录 1、DBSCAN算法介绍4、DBSCAN 的参数选择5、Scikit-learn中的DBSCAN的使用核心参数:属性:1、DBSCAN算法介绍 下图中,左边的图形可以使用K-Means算法进行聚类,右边两个有交叉部分【噪音】,故需要使用密度聚类(DBSCAN)算法 K-Means和层次聚类算法,是基于对象之间的距…

DBSCAN 聚类算法详解

参考: https://www.cnblogs.com/zhengxingpeng/p/6670486.htmlhttps://www.cnblogs.com/chaosimple/p/3164775.htmlhttps://www.jianshu.com/p/e8dd62bec026 1. DBSCAN简介: DBSCAN(Density-Based Spatial Clustering of Applications with …

数据挖掘(七) DBSCAN聚类算法

数据挖掘(七) DBSCAN聚类算法 DBSCAN是一种非常著名的基于密度的聚类算法。其英文全称是 Density-Based Spatial Clustering of Applications with Noise,意即:一种基于密度,对噪声鲁棒的空间聚类算法。直观效果上看&…

DBSCAN聚类算法的实现

DBSCAN聚类算法的实现 1. 作者介绍2.关于理论方面的知识介绍2.1 DBSCAN算法介绍2.2 鸢尾花数据集介绍 3.实验过程3.1 实验代码3.2 实现过程3.3 实验结果 4.参考文献 1. 作者介绍 刘鹏程,男,西安工程大学电子信息学院,…

毫米波雷达点云 DBSCAN聚类算法

毫米雷达点云 DBSCAN聚类算法 聚类的目的聚类算法分类原型聚类层次聚类密度聚类 DBSCAN聚类算法原理相关定义算法流程以及伪代码DBSCAN算法优缺点DBSCAN参数选择聚类衡量指标 DBSCAN算法仿真DBSCAN代码DBSCAN算法对毫米波雷达点云数据进行聚类 聚类的目的 聚类的目的是将一组数…

使用Python实现DBSCAN聚类算法及可视化

目录 实战过程 数据准备 DBSCAN模型 聚类结果评估 可视化展示 运行结果 总结 DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,可以发现任意形状的簇,并且能够在噪声数据的…

聚类及DBSCAN 聚类算法

聚类及DBSCAN 聚类算法 一、聚类 1.概念 聚类就是按照某个特定标准把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大。 2.聚类与分类的区别 聚类时,我们并不…

python DBSCAN聚类算法

文章目录 DBSCAN聚类算法基本思想基本概念工作流程参数选择DBSCAN的优劣势 代码分析Matplotlib Pyplotmake_blobsStandardScaleraxes类使用plt.cm.Spectral颜色分配python numpy 中linspace函数enumerate()函数plt.scatter()绘制散点图整体代码 DBSCAN聚…

聚类方法:DBSCAN算法研究(1)--DBSCAN原理、流程、参数设置、优缺点以及算法

DBSCAN聚类算法三部分: 1、 DBSCAN原理、流程、参数设置、优缺点以及算法; http://blog.csdn.net/zhouxianen1987/article/details/68945844 2、 matlab代码实现; blog:http://blog.csdn.net/zhouxianen1987/…