0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

UML状态图详解

码农爱学习 来源:码农爱学习 作者:码农爱学习 2023-05-09 09:00 次阅读

上篇文章,介绍了UML的基础知识,并详细介绍了UML中类图的知识点与画法。

本篇,来继续介绍UML中的另一种图——状态图。

1 UML状态图简介

状态图,显示一个状态机,属于UML活动图。

UML具有许多不同类型的图表,包括:

  • 静态图:用例图、类图、包图
  • 动态图:活动图、状态图、时序图、协作图

状态机用于对模型元素的动态行为进行建模,或是说对系统中受事件驱动的方面进行建模。

2 状态图基本要素

2.1 状态

状态是状态机的重要组成部分,描述了状态机所在对象动态行为的执行所产生的结果

2.1.1 初始/最终/选择状态

这三个都是****伪状态 (Pseudostate):

  • 初始状态:用一个实心圆形表
  • 最终状态:用一个圆圈内嵌实心圆点表示
  • 选择状态:用一个菱形表示,条件分支上方括号内的文字表示****监护条件 (guard conditions)

2.1.2 一般状态

UML中使用一个圆角矩形表示一个一般状态

状态的组成部分:

  • 名称:由一个字符串组成,用以识别不同状态。可匿名,一般放置在状态图符顶部
  • 入口/出口动作:表示进入/退出这个状态所执行的动作,动作可以是原子动作,也可是动作序列
  • 内部转换:内部转换不会引起状态变化的转换,此转换的触发不会导致状态的入口/出口动作被执行。语法:事件/动作表达式

2.1.3 复合状态

复合状态,或称组合状态,是指包含有子状态的状态。

如下图,“复合状态2”即为复合状态,内部的“状态2-1”、"状态2-2"为子状态。

也可用以下形式表示,将复合状态的内容单独画出。

注:图中的圆圈内一个H字母,表示****历史状态 ,它也是一个伪状态,其目的是记住从组合状态中退出时所处的子状态,当再次进入组合状态,可直接进入这个子状态,而不是再次从组合状态的初态开始

2.2 转换

转换(Transition)是两个状态之间的关联。表示对象在第一个状态(Source State)中执行一定的动作,并在某个特定事情发生并且某个特定的条件满足时进入下一个状态(Target State)。

2.2.1 一般转换

一般情况下的状态转换是两个不同状态之间的转换,示意图如下:

转换的组成部分:

  • 源状态(Source State):源状态就是被转换影响的状态。某对象处于源状态,当它接收到触发事件或满足监护条件,就会激活一个转换
  • 目标状态(Target State):转换完成后,对象状态发生变化,这时对象所处的状态就是转换的目标状态
  • 触发事件(Trigger):引起转换的事件,这里所指的事件可以是信号、调用、时间段或状态的一个改变
  • 监护条件(Guard Condition):是一个方括号括起来的布尔表达式,它被放在触发事件的后面。监护条件可以引用对象的属性值和触发事件的参数
  • 结果(Effect):对象状态转移后的结果

2.2.2 自身转换

自身转换(Self-Transitions),是指状态可以有返回自身状态的转换。

2.2.3 本地转换与外部转换

对于复合状态之间的转换,需要注意本地转换(Local transition)与外部转换(External transition)的不同。

上图中,左边是本地转换,右边是外部转换。

  • 上面两个,源状态包含了目标状态,这种情况两种转换的区别在于:本地转换不会从源状态退出(不会执行退出动作),而外部转换会退出再重新进入源状态。
  • 下面两个,目标状态包含了源状态,这种情况两种转换的区别在于:本地转换不会再次进入目标状态(不会执行进入动作),而外部转换会退出再重新进入目标状态。

3 一个UML状态图实例

3.1 使用visio绘制UML状态图

新建一个visio文件,打开后会自动提示选择创建某种类型的图,这里选择"软件和数据库 ->UML状态机"

点击确定之后,会进入UML状态图的编辑界面,左侧可以看到用于UML状态图编辑的基本元素,将这些元素拖拽到右侧的编解面板中,可以看到这些元素的基本结构形式:

3.2 实例讲解

下面是一个UML状态图的实例:

这是一个全自动洗衣机的UML状态图,主要包括“设置”、“工作中”、“暂停”这3个状态。

  • 开机时,会先进入“设置”状态,可以设置洗衣模式以及水量等,触发启动后,会进入“工作中”状态。
  • “工作中”是一个复合状态,内部包括“加水”、“清洗”、“排水”、“甩干”这4个子状态。进入该状态后,从“加水”子状态开始执行,然后会执行“清洗”、"排水"子状态,排水完成后,根据清洗次数是否足够,跳转到“加水”或“甩干”子状态。
  • 在“工作中”状态时,无论处于哪个子状态,只有按了暂停键,都会进入“暂停”状态,再按继续,则会进入“工作中”继续执行,注意继续时指向的是历史状态(圆圈内一个H字母),表示继续指向刚才暂停时的子状态。

4 总结

本篇介绍了UML状态图的基础知识,并通过visio绘制一个全自动洗衣机的UML状态图实例,来介绍UML状态图的画法与所表达的含义。
审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • UML
    UML
    +关注

    关注

    0

    文章

    122

    浏览量

    30752
  • 时序图
    +关注

    关注

    1

    文章

    56

    浏览量

    22350
  • 状态机
    +关注

    关注

    2

    文章

    486

    浏览量

    27182
  • 状态图
    +关注

    关注

    0

    文章

    11

    浏览量

    7249
收藏 人收藏

    评论

    相关推荐

    UML状态图和Petri网络在类测试用例生成的应用

    【作者】:陈志德;曾凡平;【来源】:《小型微型计算机系统》2010年03期【摘要】:分析和研究UML状态图、扩展状态机和Petri网在类测试用例生成的特点,提出结合三者优势的类测试用例生成方法.通过
    发表于 04-24 09:52

    状态状态图

    状态状态图
    发表于 08-22 19:45

    我的8.6版 没有状态图功能

    我的8.6版 没有状态图功能在网站下载 哪个是状态图模块软件 网站上的软件全是英文的名字 哪位大师方便告诉一下
    发表于 09-18 03:44

    状态图模拟ATM机

    `今天闲来无聊,翻了翻宝典,看到了状态图那一章,心血来潮,就做了一个基于状态图的ATM机,只有简单的查询,存款,取款,修改密码功能,可能会有BUG,不过程序只是为了验证状态图的功能o(╯□╰)o
    发表于 01-21 20:20

    【资源帖】LabVIEW状态图模块

    LabVIEW状态图模块提供了一种编程模式,可帮助用户在高于原先水平的基础上开发应用程序。使用NI LabVIEW状态图模块,用户可开发状态图(statechart diagram)、通过NI
    发表于 04-14 01:00

    状态图使用详解-简单入门

    本帖最后由 sszx2007 于 2019-6-17 10:38 编辑 状态图使用详解-简单入门安装状态图工具包所有的状态图工具包均不支持64位LabVIEW有关
    发表于 04-07 20:12

    经典UML状态图实用C++设计嵌入式系统事件驱动型编程技术资料分享

    UML状态图的实用C/C++设计嵌入式系统的事件驱动编程技术第二版内含国外版本和国内翻译版本
    发表于 04-24 14:34

    labview状态图模块的一些疑思

    自己写的一个异步状态图的demo,主要测试一下异步状态图的一些特性,但是可以看到我直接丢了两个循环,异步状态图只有在收到触发之后才会进入状态转移,如果没有选择任何触发器,那么异步
    发表于 05-31 11:45

    状态图编程

    状态图编程指南
    发表于 01-10 16:16

    LabVIEW状态图编程指南

    采用 LabVIEW 状态图模块开发应用程序 1-7LabVIEW 状态图模块中 UML 专用术语 8-15如何对 LabVIEW 状态图应用程序进行调试 16-25LabVIEW
    发表于 09-21 06:05

    状态图使用详解-作者做了一个动态显示状态,怎么做的??

    论坛里的帖子,状态图使用详解-简单入门 我初学者,很有帮助,甚是感谢!! 软件界面里的图片,状态切换动画是怎么实现的? 没看明白,能给说一下吗?感谢
    发表于 11-30 11:41

    UML状态图在回归测试中的应用

    基于UML 状态图的测试是一种系统测试技术,也是基于需求的回归测试方法的扩展。该文通过依赖性分析,生成基于依赖性分析的UML 状态图和依赖图,将修改前和修改后的
    发表于 03-23 08:46 14次下载

    UML顺序图与状态图的一致性检查

    用户可使用UML从不同角度对系统进行建模,但不同视图间存在信息冗余,可能导致视图不一致问题。该文针对具有多种逻辑语义的顺序图提出分析方法,为复杂层次结构的状态图
    发表于 04-16 08:43 27次下载

    LabVIEW状态图编程指南

    采用LabVIEW状态图模块开发应用程序 1-7LabVIEW状态图模块中UML专用术语 8-15如何对LabVIEW状态图应用程序进行调试 16-25LabVIEW
    发表于 07-01 10:45 109次下载

    UML状态图绘制

    状态机图是系统分析中常用的一种工具,它用于描述一个对象在其生命周期内所经历的的各种状态,以及状态之间的转移、引发转移的使间或状态转移的活动。 State/
    发表于 12-09 16:55 0次下载