UML建模 UML建模之状态机图

Posted 码农飞哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UML建模 UML建模之状态机图相关的知识,希望对你有一定的参考价值。

您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦
💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通
❤️ 2. Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当,持续更新中 。python爬虫入门进阶
❤️ 3. Ceph实战,从原理到实战应有尽有。 Ceph实战
❤️ 4. Java高并发编程入门,打卡学习Java高并发。 Java高并发编程入门
😁 5. 社区逛一逛,周周有福利,周周有惊喜。码农飞哥社区,飞跃计划

文章目录

状态机图介绍

状态机图展示了一个对象如何根据当前状态对不同事件做出反应的动态行为。状态机图是一种行为图。

状态机

状态机的介绍

状态机时一种行为,它说明对象在其生命周期中的状态变化,这些状态变化由响应事件或者监视条件触发。

一般情况下,一个状态机依附于一个类,用来描述这个类的实例的状态及其转换,和对接收到的事件所做出的响应。此外,状态机也可以依附于用例,操作,协作等元素上,描述他们的执行过程。

状态机从初始状态开始,响应事件并执行某些动作,从而引起状态的转换;在新状态下又继续响应事件并执行动作,如此循环进行到对象的终结状态。

状态机的组成

状态机主要由状态、转换、事件、动作和活动5部分组成:

  1. 状态表示对象的生命周期中的一种条件或情况。
  2. 转换表示两种状态间的一种关系
  3. 事件表示在某一时间与空间下所发生的有意义的事情。
  4. 动作表示一个可执行的原子操作,是UML能够表达的最小计算单元
  5. 活动表示状态机中的非原子执行,一般由一系列动作组成。

状态机图的组成

状态机图由简单状态、转换、伪状态三部分组成。

简单状态

简单状态:状态图的重要组成部分,它描述了一个对象稳定在某一个持续过程或所处状态,与动态行为的执行所产生的结果。当对象满足某一状态的条件时,该状态被称为激活的。
简单状态就是没有嵌套的状态。初态和终态是两个特殊的状态。分别表示状态机的入口状态和出口状态。对于一个不含嵌套结构的状态机,只能有一个初态,可以有一个或多个终态甚至没有终态。

转换

转换是两种状态间的一种关系,它指明当特定事件发生或特定条件满足时,处于某状态(源状态)的对象将执行某一动作或活动并进入另一状态(目标状态)。
转换表示从源状态指向目标状态的实线箭头,并附有转换的标签。转换的标签格式如下:
⌊转换名称:⌋opt 事件名称opt ⌊(参数列表)⌋opt ⌊[监护条件]⌋opt ⌊/效果列表⌋opt

转换-转换名

转换名称是转换的标识符。在实际使用中,为了防止转换名称与转换的触发器或监护条件混淆,一般不必为转换命名。

转换-事件

事件是在某一时间与空间下所发生的有意义的事情,是系统执行中发生的值得建模的事物。
事件一般被状态或转换所发送和接收。在转换中被接收的事件也被称为该转换的触发器或触发事件。事件包含一个参数列表(可能为空),用于从事件的产生者向其接收者传递信息。

能够在触发器中接收的事件有以下四种:

  1. 调用事件:调用事件表示对象接收到一个调用操作的请求。其期待的结果是事件的接收者触发一个转换并执行相应的操作。
  2. 改变事件:改变事件的发生依赖于事件中某个表达式所表示的布尔条件。改变事件没有参数,要一直等到条件被满足才能发生。
  3. 信号事件:信号由一个对象准确地送给另一个或一组对象。发送给一组对象的信号可能触发每个对象的不同转换。
  4. 时间事件:时间事件的发生依赖于事件中的一个时间表达式。比如,可以让对象进入某状态后经过一段给定的时间或到达某个绝对时间后发生该事件。

转换-监护条件

监护条件是一个转换被激发之前必须满足的一个条件。监护条件是一个布尔表达式,可以根据触发器事件的参数、属性和状态机所描述的对象的链接等写成。当转换接收到触发事件后,只有监护条件为真,转换才能被激活。

转换-效果列表

效果列表是一个过程表达式,在转换被激活时执行,表示转换附加的效果。
效果列表包含多个动作,可以根据操作、属性、拥有的对象的链接、触发器事件的参数等写成。动作可以是一个赋值语句、算术运算、发送事件、调用对象的属性或操作、创建或销毁对象等。
效果的表达语法与其实现的具体内容有关。

伪状态

伪状态指的是状态机中具有状态的形式,却具有特殊行为的顶点。
当一个伪状态处于活动时,系统不会处理事件,而是瞬间自动转换到另一个状态,并且这种转换没有事件进行显示的触发。
最常见的伪状态包括初态、选择、分叉与结合、历史状态等。

状态机图的作用

状态机图用于对系统的动态方面进行建模,适合描述一个对象在其生命周期中的各种状态及状态的转换。

  1. 状态机图描述了状态转换时所需的触发事件和监护条件等因素,有利于开发人员捕捉程序中需要的事件。
  2. 状态机图清楚地描述了状态之间的转换及其顺序,这样就可以方便地看出事件的执行顺序,状态机图的使用节省了大量的描述文字。
  3. 清晰的事件顺序有利于开发人员在开发程序时避免出现事件错序的情况。
  4. 状态机图通过判定可以更好地描述工作流在不同的条件下而出现的分支。

画状态机图需要的注意事项

  1. 避免把某个“程序动作”当作一种“状态”来处理,那么如何区分“动作”和“状态”?动作是不稳定的,没有条件触发,“动作”一旦执行完毕就结束了;而状态是相对稳定的,如果没有外部条件的触发,一个状态会一直持续下去。
  2. 状态划分时漏掉一些状态,导致跳转逻辑不完整。所以在设计状态机时,我们需要反复的查看设计的状态图或状态表。

实战案例

新生入学后,学校在三个月内按照国家招生规定对其进行复查。复查合格者予以注册,取得学籍。复查不合格者,学校区别情况予以处理,直至取消入学资格。
学生有如下情况之一者,应予休学:
(一)因伤病经学校指定医院诊断,须停课治疗、休养一学期1/3时间;
(二)一学期请假缺课超过该学期总学时的1/3;
(三)传染性肝炎、肺结核等传染性疾病;
(四)因某种特殊原因,学校认为必须休学。

学生休学至少一学期,一般以一年为限。学生复学后,休学之前已记入成绩档案的考核成绩继续有效,并作为学籍处理依据.

学生复学按下列规定办理:
(一)学生因伤病休学申请复学时,须持有二级甲等以上医院诊断书,证明身体健康,并经学校指定医院复查合格,方可复学;
(二)学生休学期满后应于学期的注册期内持有关证明,经教务处核准后编入原专业相应班级选课学习;

学生有下列情况之一者,应予退学:

(一)学生在读期间,3次出现在一学期中取得的课程学分不足10学分(不含重修和补考学分;毕业学期除外;第一次提出警告,第二次提出退学警告,由教务处公布名单,院系负责通知学生家长);
(二)休学、保留学籍期满,在规定期限内不办理复学手续; (三)休学累计满二年,经复查不合格;
(四)因伤病需要休学,经学校动员后仍不办理休学手续; (五)经学校指定医院确诊患有疾病,或意外伤残无法继续在校学习;
(六)未请假离校连续2周末参加学校规定的教学活动; (七) 超过学校规定期限未注册而又无正当事由; (八)本人要求退学。

学生在规定的学习年限(4年制3~6年,5年制4~7年)内修完本专业培养计划规定的全部教学环节,取得注册专业规定的毕业学分,准予毕业,发给毕业证书。

画图步骤

  1. 确定有哪些状态
    除了初态和终态以外,一共可以罗列出1. 入学;2. 休学;3. 复学;4. 退学 这四种状态。
  2. 确定触发事件或监听条件
    上面标粗的部分都是触发条件。

最终的状态机图。

参考

UML之状态机图

粉丝专属福利

  1. 回复【python】:即可获取50G的python学习干货
  2. 回复【爬虫】:即可免费获取全面完善的爬虫资料
  3. 回复【数据分析】:即可免费获取全面完善的爬虫资料,超值
  4. 回复【java】:即可获得java全套资料以及面试题
  5. 回复【软考】:即可获得软考资料
  6. 回复【脱单】: 即可获得脱单资料

以上是关于UML建模 UML建模之状态机图的主要内容,如果未能解决你的问题,请参考以下文章

UML 状态机图

疯狂Java讲义-读书笔记2.2 UML(统一建模语言)介绍

那些我们常见的 UML 图

vs20132015-UML

UML之状态机图

秋季个人阅读计划