《UML面向对象建模与设计》第5章——状态建模

虽然写这个博客主要目的是为了给我自己做一个思路记忆录,但是如果你恰好点了进来,那么先对你说一声欢迎。我并不是什么大触,只是一个菜菜的学生,如果您发现了什么错误或者您对于某些地方有更好的意见,非常欢迎您的斧正!

目录

5.1事件

5.2状态

5.3迁移和状态

5.4状态图

5.5状态图行为


状态模型

·检查对下你个及其关系随着时间的变化

·描述响应外部激励而发生的操作序列,而不是描述操作做了什么,对什么进行操作

·由多个状态图组成,每个类对应一个状态图

 

5.1事件

事件(event):某个时刻发生的事情。

●事件发生的时间是事件的一种隐含属性。在某段时间内发生的时间现象,由状态来建模。

●两个因果无关的事件就是并发的,不会相互影响。

●事件包括错误状态及普通事件。

●术语事件经常用的不明确。有时它指实例,有时它指类。

 

●最常见的事件是信号事件、变更事件和时间事件

5.2状态

状态(state):对象取值和链接的抽象。

●状态的UML表示法:其中包含可选状态名的圆角方框。

●每个对象在某个时刻只能处在一种状态下。对象在其生存期内可以跨越一种或多种状态。(比如某个老师9点到10点在上课的状态,但是他11点到11点半处在吃饭的状态)

●状态确定对象对输入事件的响应。

●事件和状态之间有某种对称性。事件表示事件起点;状态表示时间段。

●事件和状态两者都依赖于抽象的层次。

 

5.3迁移和状态

迁移(transition):从一个状态到另一个状态的瞬间变化。(比如电话接通,电话线就从状态响铃(Ringing)迁移到了状态连接(Connected))

●从源状态到目标状态一发生变化,就说是触发(fire)了迁移。

警戒条件(guard condition):要让迁移发生而必须为真的布尔表达式。

●例子:当你早上出门(事件),如果温度在0度以下(条件),你就要戴手套(下一状态)

5.4状态图

状态图(state diagram)的结点是状态,有向弧是状态间的迁移。

♦状态图详细说明了由事件序列引起的状态序列

状态名在状态图的作用域内必须的是唯一

♦类中所有的对象都执行该类的状态图,状态图会建模对象的公共行为

 

●状态模型(state model):包含多个状态图,每个类一个状态图,状态图建模重要的时序行为。

♦状态图必须匹配它们的接口——事件和警戒条件

♦单独的状态图可以通过传递事件,以及通过警戒条件的副作用进行交互。

♦一些事件和警戒条件会出现单个状态图中;其它的会出于协调的目的出现在多个状态图中。

 

5.4.1状态图实例

●电话线状态图

♦状态并没有完全定义对象的所有值

♦如果有一个以上的迁移离开了某个状态,那么发生的第一个事件就会触发相应的迁移。如果某个事件发生,但还没有迁移相匹配,那么事件就会被忽略掉。

 

5.4.2单触发状态图

●状态图可以表示连续或单触发生周期。单触发状态图表示有着有限生存期的对象。

5.4.3状态图的基本表示法小结

5.5状态图行为

5.5.1活动效应

●效应:为响应事件而执行的行为的引用

●活动:由效应触发的实际行为,效应数量不限。

        表示法:“/”+活动的名称(或描述),跟在引起活动的事件后面

5.5.2 do活动

●do活动:持续了一段时间的一项活动。

♦只会在某个状态内出现,不能附到迁移上。

♦对象处在某状态下的全部或部分时间内执行的do活动

♦会被在执行过程中收到的某事件中断;此事可能会、也可能不会引起迁移,离开包含do活动的状态。

5.5.3进入和退出状态

●进入活动在状态图内显示为关键词entry和字符“/”

●退出活动在状态图内显示为关键词exit和字符“/”

●如果某个活动有多个状态,它们按照下面的顺序执行:到达迁移上的活动→进入活动→do活动→退出活动→输出迁移上的活动

●状态内部事件和自迁移的区别:(我的理解:状态内部事件:比如打电话等待过程中这个状态,这个状态内部事件就是一个“响铃:滴滴滴”,响铃的时候不用我一直拨号什么的。而自迁移,就像下图这个例子,我的鼠标在进入浏览页面这个状态后,我的鼠标在移动的过程中碰到一些文字导致高亮这个行为,需要我的鼠标不停移动才能触发)

5.5.5发送信号

●竞态条件:一个对象从多个对象收到信号,并发信号接收的顺讯会影响到最终状态。

猜你喜欢

转载自blog.csdn.net/weixin_40851250/article/details/84551350