[OOAD]---状态图


 

2010-12-23 作者:佚名 来源:网络

 

  [OOAD]---状态图 - 小小团队 - 海望无边天作岸,山登绝顶我为峰

    状态和状态机
    状态、状态表示法及状态机
    状态是指在对象生命周期中满足某些条件、执行某些活动或等待某些事件的一个条件和状况
    一个状态通常包括名称、进入/退出活动、内部转换、子状态和延迟事件等五个部分组成

[OOAD]---状态图 - 小小团队 - 海望无边天作岸,山登绝顶我为峰

    状态机是计算机科学理论的一部分,但UML中的状态机模型主要是基于David Harel所做的扩展,是用来展示状态与状态之间转换的图
    如何阅读状态机图
    阅读最简单的状态?
    最为核心的元素无外乎是两个:一个是用圆角矩形表示的状态(初态和终态例外);另一个则是在状态之间的、包含一些文字描述的有向箭头线,这些箭头线称为转换

[OOAD]---状态图 - 小小团队 - 海望无边天作岸,山登绝顶我为峰

转换的五要素

[OOAD]---状态图 - 小小团队 - 海望无边天作岸,山登绝顶我为峰

    源状态:即受转换影响的状态
    目标状态:当转换完成后对象的状态
    触发事件:用来为转换定义一个事件,包括调用、改变、信号、时间四类事件
    监护条件:布尔表达式,决定是否激活转换、
    动作:转换激活时的操作
    读图小结
    与状态off相关的转换有两个,其触发事件都是turnOn,只不过其监护条件不同。如果对象收到事件turnOn,那么将判断壶中是否有水;如果[没水],则仍然处于off状态;如果[有水]则转为on状态,并执行“烧水”动作。
    而与状态on相关的转换也有两个,如果“水开了”就执行turnOff,关掉开关;如果烧坏了,就进入了终态了

[OOAD]---状态图 - 小小团队 - 海望无边天作岸,山登绝顶我为峰

转换类型
描述
语法
外部转换 对事件做出响应,引起状态变化或自身转换,同时引发一个特定动作,如果离开或进入状态将引发进入转换、离开转换 事件(参数)[监护条件]/动作
内部转换 对事件做出响应,并执行一个特定的活动,但并不引起状态变化或进入转换、离开转换 事件(参数)[监护条件]/动作
进入转换 当进入某一状态时,执行相应活动 entry/活动
退出转换 当离开某一状态时,执行相应活动 exit/活动

[OOAD]---状态图 - 小小团队 - 海望无边天作岸,山登绝顶我为峰

    只有动作描述,进入和退出和操作方法写在了里面
    各种转换的区别
    进入和退出转换:当进入一个状态时,执行某个动作;或当退出某个状态时,执行什么动作。这时就可以使用进入和退出转换来表示
    内部转换:用来处理一些不离开该状态的事件

[OOAD]---状态图 - 小小团队 - 海望无边天作岸,山登绝顶我为峰

活动与延迟事件

    活动:当对象处于一个状态时,它一般是空闲的,在等待一个事件的发生。但是某些时间,你可能希望描述个正在进行的活动。在处于一个状态的同时,对象做着某些工作,并一直继续到被某个事件中断
    延迟事件:延迟事件是一种特殊的事件,它是指该事件不会触发状态的转换,当对象处于该状态时事件不会丢失,但会被延迟执行。例如,当E-mail程序中正在发送第一封邮件时,用户下达发送第二封邮件执令就会被延迟,但第一封邮件发送完成后,这封邮件就会被发送。这种事件就属于延迟事件

复合状态表示法

[OOAD]---状态图 - 小小团队 - 海望无边天作岸,山登绝顶我为峰

顺序复合状态图

[OOAD]---状态图 - 小小团队 - 海望无边天作岸,山登绝顶我为峰

监护条件为“应答音”,代表已连接。

并发复合状态图

[OOAD]---状态图 - 小小团队 - 海望无边天作岸,山登绝顶我为峰

三种评测方式

历史

    “一个圆圈中加上字母H”,是用来表示历史状态的。
    它的含义是:当从状态“结账”和“显示购物车”返回子状态“显示索引信息”时,将进入的是离开时的历史状态。也就是说,转到购物车或结账区之后,再回到“浏览目录”的页面时,其中的内容是不变的,仍然保留原来的信息。

[OOAD]---状态图 - 小小团队 - 海望无边天作岸,山登绝顶我为峰

子状态机

将子状态机单独定义,并对其进行命名(通常以大写字母开头),然后在需要使用的地方来引用它

[OOAD]---状态图 - 小小团队 - 海望无边天作岸,山登绝顶我为峰

引用C状态机

如何绘制状态机图

绘制状态机图

绘制状态机图的理想步骤是:寻找主要的状态,确定状态之间的转换,细化状态内的活动与转换,用复合状态来展开细节

寻找主要状态:对于航班机票预订系统而言,显然包括的状态主要有

    -- 在刚确定飞机计划时,显然是没有任何预订的,并且在有人预订机票之前都将处于这种“无预订”状态
    -- 对订座而言显然有“部分预订”和“预订完”两种状态
    -- 而当航班快要起飞时,显然要“预订关闭”

总结一下,主要有四种状态:无预订、部分预订、预订完以及预订关闭

确定状态间转换
部分预订
不直接转换
关闭()预订关闭
表格横向是转出预订完关闭()预订完无转换
表格纵向是转入
预订关闭部分预订不直接转换无转换
源目标
无预订退订(),使预订人=0退订()无转换
无预订
预订()预订(),无空座关闭() 

[OOAD]---状态图 - 小小团队 - 海望无边天作岸,山登绝顶我为峰

细化状态内的活动与转换

[OOAD]---状态图 - 小小团队 - 海望无边天作岸,山登绝顶我为峰

使用复合状态

[OOAD]---状态图 - 小小团队 - 海望无边天作岸,山登绝顶我为峰

状态机图应用说明

对对象生命周期建模:主要描述对象能够响应的事件、对这些事件的响以及过去对当前行为的影响

    对反应型对象建模:这个对象可能处于的稳定状态、从一个状态到另一个状态之间的转换所需的触发事件,以及每个状态改变时发生的动作
    状态机图既可以用来表示一个业务领域的知识,也可以用来描述设计阶段对象的状态变迁

本章小结

    首先介绍了“状态”的概念和UML表示法,然后引入了状态机的概念
    通过三个例子逐一说明简单状态机图、包含复杂转换的状态机图以及包含复合状态的状态机图的阅读方法
    紧接着通过一个航班机票预订系统来阐述了状态图的绘制过程:确定状态,分析状态间的转换,细化活动与内部转化,通过复合状态来组织
    简明地点出状态图的两大功能:对对象的生命周期建模以及对反应型对象的行为建模 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值