实验六 状态图实例
一、实验目的
1.掌握活动图基本要素
2.了解何时使用状态图
二、实验条件
计算机一台,windows操作系统,rational rose或visio软件(2003-2023版)
三、实验原理及内容
状态图表示某个类所处的不同状态和该类的状态转换信息。有人可能会争论说每个类都有状态,但不是每个类都应该有一个状态图。只对"感兴趣的"状态的类(也就是说,在系统活动期间具有三个或更多潜在状态的类)才进行状态图描述。 状态图的符号集包括5个基本元素:初始起点,它使用实心圆来绘制;状态之间的转换,它使用具有开箭头的线段来绘制;状态,它使用圆角矩形来绘制;判断点,它使用空心圆来绘制;以及一个或者多个终止点,它们使用内部包含实心圆的圆来绘制。要绘制状态图,首先绘制起点和一条指向该类的初始状态的转换线段。状态本身可以在图上的任意位置绘制,然后只需使用状态转换线条将它们连接起来。
例1:银行透支状态图
1.创建状态图(图6.1)
(1)在浏览器中右击类。
(2)选择new→statechart diagram,对该类创建一个状态图,并命名该图。
图6.1:创建状态图
2.在图中增加状态,初始和终止状态(图6.2)
(1)选择工具栏的state按钮,单击框图增加一个状态,双击状态命名。
(2)选择工具栏的start state 和end state ,单击框图增加初始状态和终止状态。初始状态是对象首次实例化时的状态,状态图中只有一个初始状态。终止状态表示对象在内存中被删除之前的状态,状态图中有0个、1个或多个终止状态。
图6.2 增加状态
3.状态之间增加交接
(1)选择state transition工具栏按钮。
(2)从一种状态拖到另一种状态。
(3)双击交接弹出对话框,可以在“General”中增加事件(Event) ,如6.3图,在“Detail”中增加保证条件(Guard Condition) (图6.4)等交接的细节。事件用来在交接中从一个对象发送给另一个对象,保证条件放在中括号里,控制是否发生交接。
图 6.3增加事件
图6.4 增加保证条件
4.在状态中增加活动(图6.5)
(1)右击状态并选择open specification。
(2)选择Action标签,右击空白处并选择Insert。
(3)双击新活动(清单中有“Entry/”)打开活动规范,在“name”中输入活动细节。
图6.5在状态中增加活动
例2:账目类的状态图
理解:银行账目可能有几种不同的状态,可以打开、关闭或透支。账目在不同状态下的功能是不同的,账目可以从一种状态变到另一种状态。例如,账目打开而客户请求关闭账目时,账目转入关闭状态。客户请求是事件,事件导致账目从一个状态过渡到另一个状态。
如果账目打开而客户要取钱,则账目可能转入透支状态。这发生在账目结余小于0时,框图中显示为[结余<0]。方括号中的条件称为保证条件,控制状态的过渡能不能发生。
对象处在特定状态时可能发生某种事件。例如,账目透支时,要通知客户。
图6.6账目状态图
例3:
例4:
四、实验思考题
1 请简述状态图的作用。
- 状态图清晰地描述了状态之间的转换顺序,通过状态的转换顺序也就可以清晰地看出事件的执行顺序。如果没有状态图我们就不可避免地要使用大量文字来描述外部事件的合法顺序。
- 清晰的事件顺序有利于程序员在开发程序时避免出现事件顺序错误的情况。
- 状态图清晰地描述了状态转换时所必需的触发事件、监护条件和动作等影响转换的因素,有利于程序员避免程序中非法事件的进入。
- 状态图通过判定可以更好地描述工作流因为不同的条件发生的分支。
2请简述建立状态图的过程。
- 创建状态图:在浏览器中右击类->选择new→statechart diagram,对该类创建一个状态图
- 在图中增加状态,初始和终止状态:
- 选择工具栏的state按钮,单击框图增加一个状态,双击状态命名->选择工具栏的start state 和end state ,单击框图增加初始状态和终止状态。初始状态是对象首次实例化时的状态,状态图中只有一个初始状态。终止状态表示对象在内存中被删除之前的状态,状态图中有0个、1个或多个终止状态
- 状态之间增加交接
- 选择state transition工具栏按钮->从一种状态拖到另一种状态->双击交接弹出对话框,可以在“General”中增加事件(Event),在“Detail”中增加保证条件(Guard Condition)等交接的细节。事件用来在交接中从一个对象发送给另一个对象,保证条件放在中括号里,控制是否发生交接。
- 在状态中增加活动
- 右击状态并选择open specification->选择Action标签,右击空白处并选择Insert->双击新活动(清单中有“Entry/”)打开活动规范,在“name”中输入活动细节。
3 实验例题完成后,将截图粘贴到实验报告中