动态建模——UML状态图

本文详细介绍了UML状态图的作用、适用范围及其组成要素,包括状态、转换、事件、动作和判定同步等概念。状态图用于清晰表达对象在不同条件下的状态转换,特别适用于对象状态多、信息操作频繁、复杂边界类和实时系统。通过实例解析了复合状态、历史状态、初始状态和终止状态的表示方法,以及判定和同步在状态转换中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.状态图的作用:

(1)清晰的表达了状态之间的转换关系。
(2)表示出不同的条件产生的分支。
(3)避免时间错序。
(4)可以表达出状态转换时必须出发的条件。

2.使用的范围:

(1)对象的状态在三个以上。
(2)有大量的信息,并经常对其进行增、删、改等操作。
(3)边界类较多较复杂(页面之间的转换)。
(4)系统是实时应用系统。

3.组成要素:

(1)状态:对象在某个时刻的存在方式或状况。

  • 名称唯一,每个单词的首字母大写。
  • 入口/出口动作:进出时的边界动作,不论从哪个状态离开,进入下一个状态时都要进行出口操作。
  • 内部活动与转换:内部活动转换不会修改状态,且一般不执行出口操作。
    例如:修改文件名。
  • 简单状态:简单状态即为不再拥有子状态的状态。
  • 复合状态:即为拥有子状态的状态。

例如:在修改文件状态中,有插入、删除状态。

在复合状态中,子状态与子状态之间的关系分为并发关系和顺序关系。顺序关系为两个状态互斥,不能同时执行,比如汽车的前进后退。并发关系为两个或两个以上的状态可以一起执行,比如汽车的加油门和前进。
如下图:
复合状态

  • 延迟事件:对此状态暂不处理,推迟到该对象的另一个状态下排队处理的事件列表。

例如发邮件时,第一个邮件正字发送,此时点击第二个邮件发送,不会显示拒绝执行第二个邮件的发送操作,而是会等到第一个邮件发送完完毕后发送。

  • 历史状态:在复合状态中,我们有时希望下次执行到复合状态时仍从上次执行的子状态继续执行,此时的状态为历史状态。用带圈的H表示。不过因为历史状态在使用时比较繁琐,应尽量避免使用。
    历史状态如下图:
    历史状态
    状态标记:
  • 初始状态:只有一个初始状态,表示如下图:
    初始状态图标
  • 终止状态:可有多个,表示如下图:
    终止状态图标
  • 一般状态:用下图标表示:
    一般状态

(2)转换:两个状态之间的关系。

  • 源状态:可有多个,在对象状态被触发前的状态即为源状态。
  • 触发事件:引起对象状态发生改变的事件。例如一个信号、条件变化、时间表达式等都可为一个事件。
  • 监护条件:通常是一个布尔表达式,在触发事件被触发时,监护条件被赋予初始值。可以没有监护条件,如果没有,则相当于为真,若为假,触发事件也会忽略。
  • 动作:可执行的原子操作,不可中断。
  • 目标状态:转换完成,对象的状态发生改变的状态。
    如下图:
    转换图标

(3)事件:

(4)动作与活动:活动包含多个动作,通常为do list中。

(5)判定和同步:

  • 判定:表示一个事件根据不同的监护条件有不同的影响。有一个或两个转出,用空心菱形进行表示,两个转出状态是互斥的。
  • 同步:同步是独立的。分为并发汇合、并发分支。并发汇合全部到达才会执行,并发分支是两个或两个以上的分流。
    判定如图:
    判定
    同步如图:
    分支和汇合
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值