UML状态图
正如其名字一样,顺序子状态按照顺序一个接 着一个出现
running forward backward
并发子状态
同时执行的状态是并发状态。
forward
backward
lowspeed
highspeed
课堂练习
每次乘车,大家都要去买票,现在大家分 析预定车票和买票过程中,车票这个对象 的状态图。
状态图
讲授内容
状态图基本表示 状态、事件、转移、活 动 状态图练习 状态图知识点小节
什么是状态图
按电灯的开关时,电灯改变了它的状态 按遥控器的调频按钮时,电视机的状态由显 示一个频道的节目变为显示另一个频道的节 目 经过一段时间,洗衣机由洗涤变为漂洗状态 夏天树叶绿了,秋天变黄了 如何表示这些变化呢?
子状态(substate)
某些状态存在于另一个状态之中,因此它们被称为 子状态。子状态以两种形式出现:顺序子状态和并 发子状态。
如果一个组成状态的子状态对应的对象在 其生命期内的任何时刻都只能处于一个子 状态,即多个子状态之间是互斥的,不能 同时存在,这种子状态称为顺序子状态。
顺序子状态(sequential substate)
对象与状态
class Teacher { private boolean isWorking; …………. public void receivephone () { …. If (isWorking ==true) refuse(); else listen(); } }
class maintest { static public void main(){ Teacher li= new Teacher(); li.setWork( false); li.receivephone(); Teacher lin = new Teacher(); lin.setWork(true); lin.receivephone(); }
UML必须包括状态图,因为它能够帮助分析员、设计员和 开发人员理解系统中各个对象的行为。开发人员尤其应该 知道对象是如何体现各自的行为的,因为他们要用软件实 施这些行为。只实施对象的静态特征是不够的:开发人员 必须要让对象能够做一些事情。
作业
自学历史状态
状态图
状态图对对象的生命周期建立模型来 描述对象随时间变化的动态行为。
预 备 铃 响
上课铃响
准备
教学
下 课 铃 响
课间铃响
状态图要素
对象:教师。 事件:预备铃响,上课铃响,下课铃响。 状态:初态、终态;准备、教学。 转移:转换
对象与状态
状态是对象某一属性的取值。比如教师类 的对象。 class Teacher { private boolean isWorking; …………. }
3 初始状态
初始状态代表状态图的起始位置,只能作 为转换的源,而不能作为转换的目标。 初始状态在一个状态图中只允许有一个, 它用一个实心的圆表示。
4 终止状态
终止状态是模型元素的最后状态,是一个 状态图的终止点。 终止状态只能作为转换的目标,而不能作 为转换的源。 终止状态在一个状态图中可以有多个,它 用一个套有一个实心圆的空心圆表示。
售票状态图
assigned to
time out lock buy sold
available
locked
unlock
exchange
售票状态图说明ຫໍສະໝຸດ 初始状态是Available状态。在票开始对外出 售前,一部分票是给预约者预留的。 当顾客预定票,被预定的票首先处于锁定状态, 此时顾客仍有是否确实要买这张票的选择权,故这 张票可能出售给顾客,也可能因为顾客不要这张票 而解除锁定状态。 如果超过了指定的期限顾客仍未做出选择,此 票被自动解除锁定状态。预约者也可以换其他车次 的票,如果这样的话,最初预约票也可以对外出售。
分析图书馆管理系统中的状态图
“书”的状态图 “借书证”的状态图
1. 书的状态图
2. 借书证的状态图
小结
系统中的对象改变自身的状态以响应事件和时间的流逝。 UML状态图就能捕获这些状态变化,状态图的焦点就是一个 对象状态的变化。 状态用一个圆角矩形表示,状态转移用带箭头的实线表示, 它指向目标状态。 转移可能作为对触发器事件的响应而发生,并且需要一个 活动;转移可能因为状态中的活动完成而引起:这种方式 发生的转移叫做无触发器转移;转移还可能起因于一个特 定条件而引起。
在状态图中增加细节
可以把状态图标分成两个区域。最上面的区域保存状态名(必 要),下面的区域保存在该状态中发生的活动。 如图所示:
准备 entry/ 进入教室 do/ 打开投影 exit/ 宣布上课
常见的三个活动是:
1、入口动作(entry ) :进入某一状态时执行的动作。
2、动作(do):系统处于该状态时要发生的动作。 3、出口动作 (exit ):离开某一状态时执行的动作 。
引起对象状态变化的就是事件。 事件存在很多形式,比如:接收到从一个对象
到另一个对象的调用;某些值的改变或一个时间段 的终结。
事件分类
调用事件。表示对操作的调度。可以理解为一个 对象对另一个对象发出的消息。 变化事件:布尔表达式中的变量发生变化后,该 表达式也变了,从而满足某些条件。(when) 时间事件:满足一定时间表达式的情况出现,到 了某一时间点或经过某一时间段。(after、when) 信号事件:信号事件表示对象接收到信号这种情 况,信号事件一般会触发状态的转移。
对象与状态
当给定状态下的多个对象接收到相同事件 时会执行相同的动作; 然而处于不同状态下的对象会通过不同的 动作对同一事件做出不同的反应。
状态图
示意图:
1 状态
状态由一个带圆角的 矩形表示。 状态图标可以分为: 名称 内部转换
① ②
名称
entry/ exit/
2 转换
转换用带箭头的直线表示,一端连接源状态即转 出的状态,箭头一端连接目标状态即转入的状态。 转换可以标注与此转换相关的选项如事件、动作 和监护条件。
5 判定
判定在状态图中的位置:工作流在此处按 监护条件的取值而发生分支。 判定用空心小菱形表示。
因为监护条件为布尔表达式,所以通常条
件下的判定只有一个入转换和两个出转换。
根据监护条件的真假可以触发不同的分支 转换。
状态1 [ 满足监护条件 ] 状态2
[ 不满足监护条件 ]
状态3
事件