虽然写这个博客主要目的是为了给我自己做一个思路记忆录,但是如果你恰好点了进来,那么先对你说一声欢迎。我并不是什么大触,只是一个菜菜的学生,如果您发现了什么错误或者您对于某些地方有更好的意见,非常欢迎您的斧正!
目录
●状态模型
·检查对下你个及其关系随着时间的变化
·描述响应外部激励而发生的操作序列,而不是描述操作做了什么,对什么进行操作
·由多个状态图组成,每个类对应一个状态图
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发送信号
●竞态条件:一个对象从多个对象收到信号,并发信号接收的顺讯会影响到最终状态。