UML期末复习题——2.3:UML State Diagram
第三题 状态图
重要概念:
1.定义:事件、状态和转换:
事件:指一件值得注意的事情的发生。
状态:指对象在事件发生之间某时刻所处的情形。
转换:两个状态之间的关系。它表明当某事件发生时,对象从先前的状态转换到后来的状态。
2.状态无关和状态依赖对象
如果一个对象对某事件的响应总相同,则认为此对象对该事件状态无关(或非模态)。例如,如果对象接收某个消息,响应该消息的方法总做相同的事情,则该对象对于该消息状态无关。如果,对所有事件,对象的响应总是相同的,则该对象是一个状态无关对象。
相反,状态依赖对象对事件的响应根据对象的状态或模式而不同。
3.有关准则:
a.考虑为具有复杂行为的状态依赖对象而不是状态无关对象建立状态机图
b.一般来讲,业务信息系统通常只有少数几个复杂的状态依赖类,对此,状态机建模通常作用不大。与此相反,在过程控制、设备控制、协议处理和通信等领域通常有许多的状态依赖对象。如果你在这些领域工作,应该熟悉和考虑使用状态机建模。
4.状态图主要用于描述一个对象在其生存期间的动态行为,表现为一个对象所经历的状态序列,引起状态转移的事件(Event),以及因状态转移而伴随的动作(Action)。一般可以用状态机对一个对象的生命周期建模,状态图用于显示状态机,重点在与描述状态图的控制流。
5.绘制状态机图步骤
绘制状态机图的理想步骤是:寻找主要的状态,确定状态之间的转换 ,细化状态内的活动与转换,用复合状态来展开细节
a.寻找主要状态:对于航班机票预订系统而言,显然包括的状态主要有 -- 在刚确定飞机计划时,显然是没有任何预订的,并且在有人预订机票之前都将处于这种“无预订”状态 -- 对订座而言显然有“部分预订”和“预订完”两种状态 -- 而当航班快要起飞时,显然要“预订关闭” 总结一下,主要有四种状态:无预订、部分预订、预订完以及预订关闭
b.确定状态间转换。表格进行表示:表格横向是转出,表格纵向是转入
c.细化状态内的活动与转换
d.使用复合状态
6.转换的5要素:
•源状态:即受转换影响的状态
•目标状态:当转换完成后对象的状态
•触发事件:用来为转换定义一个事件,包括调用、改变、信号、时间四类事件
•监护条件:布尔表达式,决定是否激活转换、
•动作:转换激活时的操作
绘制要点:
具体方法见:http://www.cnblogs.com/ywqu/archive/2009/12/17/1626043.html
http://www.cnblogs.com/sura/archive/2012/07/01/2572083.html
在这里,直接引用了两篇我觉得已经讲的很详细的介绍。
第一篇概念性的描述较多,第二篇实例较多,可根据不同需要进行理解。
注意事项:
A.注意状态图的对象是什么。它可能是一个system,也可能是一个用例,也可能是一个对象,一定要看清楚题目要求画什么东西的状态图。
B.画系统和用例的状态图一般是画它的过程,而画对象的状态图是画它的生命周期。
C.然后就是找状态了,一定要知道状态变量是什么,一定要能枚举状态有哪些情况。
D.接下来是操作。
1、 识别状态图的对象
2、 识别状态:考试是有组合状态的。
3、 转换边:
格式:触发事件 [监护条件] / 动作
触发事件:触发转换的事件,包括调用、触发信号、时间等(对象或系统里面创建什么计划,发生什么变化)
监护条件(guard):决定是否能转换的条件,监护条件为true才能转换
动作:转换被激活时会发生的操作(外部发生的事件)
√ 事件一般用被动语态写出来(用被动语态写出来的叫做触发,如onKeyPressed,一般是与代码对应的函数名相同的)。
√ 如果程序显式告诉你,“如果什么,怎么样”,则一定要写guard,否则要扣分
√ 动作可以不写,写错了要扣分
√ 一定要在连线上写出各种条件!
√ 文档详细告诉有何状态,一定要完整写出
E.状态图不一定有终点,一定有起点!
试题答案: