状态图(Statechart Diagram)
目录 |
状态图是指描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的事件做出反应的。通常我们创建一个UML状态图是为了以下的研究目的:研究类、角色、子系统、或组件的复杂行为。
建立状态图的步骤如下:
(1)确定上下文环境。状态图是立足于状态迁移而进行行为描述的。因此建立状态图时首先要搞清楚状态的主体,确定状态的上下文环境。常见的状态主体有:类、用例、多个用例和整个系统。
(2)识别状态。状态主体会表现出一些稳定的状态,它们需要被识别出来,并且标记出其中的初始状态和结束状态集。在有些情况下,可能会不存在确定的初始状态和结束状态。
(3)建立状态转换。根据需求所描述的系统行为,建立各个稳定状态之间可能存在的转换。
(4)补充详细信息,完善状态图。添加转换的触发事件、转换行为和监护条件等详细信息。
在有些情况下也可能会需要建立状态图的层次结构或者进行其他更加复杂的工作。
例如,针对ATM系统示例,可以按照下面的步骤建立取钱类的状态图:
(1)明确状态图的主体:取钱类。
(2)识别取钱类可能存在的稳定状态:
①接收取钱请求状态。
②身份验证状态。
③向银行信息系统提交取钱信息状态。
④处理取钱交易状态。
⑤处理身份验证错误状态。
⑥处理取钱成功状态。
⑦询问是否进行其他交易。
其中,接收取钱请求为系统的初始状态。
(3)建立状态转换。可能的状态转换如表所示,其中如果第i行第J列的元素被标记为y,则表示第i行的状态可以转换为第J列的状态。
接收取钱请求 | 身份验证 | 提交信息 | 处理取钱交易 | 处理身份验证错误 | 取钱交易失败处理 | 询问是否进行其他交易 | |
接收取钱请求 | Y | Y | |||||
身份验证 | Y | Y | |||||
提交信息 | Y | Y | |||||
处理取钱交易 | Y | ||||||
处理身份验证错误 | Y | ||||||
取钱交易失败处理 | Y | ||||||
询问是否进行其他交易 | Y |
(4)在已识别状态和转换的基础上,添加详细的信息说明,建立状态图。