在学习Thinking in Patterns chapter 18: Complex system states中的StateMachine的前半部分时(TIPatterns.htm#_Toc41169779),与我原来看那本System Analysis and Design中文译本中的UML建模中的状态图作了一下比较。发现二者有比较大的区别,故把状态图的有关知识再复习了一下。
下面是我在网上搜索到的一篇讲述UML状态图的文章,其中对状态图的基本定义和它在实际应用中的示例和原则都作了详细的阐述。不过比较长,而且是翻译过来的,很不好理解。尤其是前半部分讲基础概念的,更是模模糊糊的。我根据自己的需要,把上面的内容摘录了一些提纲性的东西备用。
一、基础部分
状态图(Statechart Diagram)是描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的时间做出反应的。通常我们创建一个UML状态图是为了以下的研究目的:研究类、角色、子系统、或组件的复杂行为。
状态机由状态组成,各状态由转移链接在一起。状态是对象执行某项活动或等待某个事件时的条件。转移是两个状态之间的关系,它由某个事件触发,然后执行特定的操作或评估并导致特定的结束状态。图 1 描绘了状态机的各种元素。
状态机的要素:(图 1:状态机符号。)
状态的要素:
|
转移的要素:
|
二、应用示例部分(结合示例讲了画状态图的一些准则):
我觉得文中的这个示例太好了,值得经常看看。
1、通用准则
1.1)、当行为的改变和状态有关时才创建状态图。
敏捷建模( AM) ( Ambler 2002)的原则--最大化项目干系人的投资--建议你只有当模型能够提供正面价值的时候才创建模型。
图⒈班级注册的一个UML状态图。
1.2)、把初始状态放置在左上角。
1.3)、把最终状态放置在右下角。
2、状态指南
状态是一个实体的行为模式的某个阶段。 状态的表示是通过实体的属性值。
2.1)、状态名称要简单但应具有描述性。
2.2)、避免"黑洞"状态。
2.3)、避免"奇迹"状态。
3、子状态建模指南
3.1)、为复杂的目标建模子状态。
图⒉Seminar的完整生命周期
3.2)、把通用的子状态变换放在一起
3.3)、为复杂的实体创建一个分层的状态图
图⒊Seminar的高阶状态图。
3.4)、最高阶的状态图总有初始态和最终态
4、变换和动作
变换是从一种状态到另一种状态的序列,它可能是通过一个事件触发的。
4.1)、用实现语言的命名规则命名软件动作
4.2)、只有对所有的入口变换都合适时才注明入口动作
4.3)、只有对所有的出口变换适合时才注明出口动作
4.4)、出口动作,用exit/标记来表示,工作方式类似于入口动作。
4.5)、只有当你想终止并再进入该状态时才建模递归变换
4.6)、用过去式命名转换事件
4.7)、把转换标记放在接近源状态的地方
4.8)、以转换方向为基础放置变换标记
4.9)、为了更易于判断哪个标记和变换是一起的,按照如下的规则来放置变换标记:
4.9.1)、在变换线条上的从左到右。
4.9.2)、在变换线条下的从右到左。
4.9.3)、变换线条右边的往下。
4.9.4)、变换线条左边的往上。
5、警戒点
一个警戒点是为了穿过一个转换而必须为真的一个条件。
5.1)、警戒点不应该重叠
5.2)、为可视化的定位警戒点而引入接合点。
5.3)、警戒点不必配套
5.4)、一致的命名警戒点
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
摘录完毕