UML状态机图和建模
目标:
- 通过例子和各种建模应用,介绍UML状态机图表示法。
同活动图一样,UML状态图时动态视图。UML包含了可用来描述视图的事件和状态的表示法。
示例
通常的做法是会包含一个初始位置太,当实例创建时,自动从初始位置太转换到另外一个状态。
状态图显示了对象的生命周期:对象经历的事件、对象转换和对象在相和谐事件之间的状态。状态图不必描述所有可能的事件:图个所发生的事件未在图中表示,则说明其不影响该状态机图所关注的内容。因此,我们可以根据需要创建状态机图,在任意简单或复杂的细节程序上描述对象的生命周期。
定义:事件、状态和转换
事件是指意见值得注意的事情的发生。
状态是指对象在事件发生之间某时刻所处的情形。
转换是两个状态之间的关系。它表示当某事件发生时,对象从先前的状态转换到后来的状态。
如何应用状态机图
状态无关和状态依赖对象
如果一个对象对某事件的响应总相同,则认为此第项对于该事件状态无关。如果,对于所有事件,对象的响应总是相同的,则该对象是一个状态无关对象。相反,张太太依赖对象对事件的响应根据对象的状态而不同。
考虑未具有复杂行为的状态依赖对象而不是状态无关对象建立状态机图。
只有对于这些复杂的状态依赖问题,状态机图才有助于人们对某些方面的理解和文档化。
一般来讲,业务信息系统通常只有少数几个复杂的状态依赖类,对此,状态机建模通常用处不大。与此相反,在过程控制、设备控制、协议处理和通信等登录通常有许多的状态依赖对象。如果你在这些领域工作,应该熟悉和考虑使用状态机建模。
对状态依赖对象建模
泛泛地将,可以采用两种方式应用状态机:
- 对复杂的事件交互对象建模
- 对操作协议和语言规范的合法序列建模。
- 如果将语言、协议或者过程看作“对象”,此种凡是可以认为是第一种方式的特化。用于与语境无关语言的形式化文法是一种状态机。
以下是一组通常未状态依赖对象的常见对象,对这些对象创建状态机是有意义的。
复杂的反应式对象
- 软件控制的物理设备
- 事物处理以及相关的业务对象
- 角色转换器
协议和合法序列
- 通信协议
- UI页面/窗口流或导航
- UI流控制器或会话
- 用例系统操作
- 单个UI窗口的事件处理
更多UML状态机图表示法
转换动作和监护
转换可以出发动作。在软件实现中,这可能意味着状态机图所表示对象的某个方法的调用。转换可以有一个条件监护逻辑测试-或布尔测试。只有测试通过时,转换才发生。
嵌套状态
一个状态允许嵌套,可以包含子状态,子状态继承其赴状态的所有转换。
示例:使用状态机进行UI导航建模
示例:NextGen用例的状态机图
过程:UP中的状态机图
在UP中没有叫“状态模型”的东西。事实上,任何模型中的任何元素都可以使用状态机类帮助理解它们响应事件的动态行为。