2.7 UML状态图
问题的引出
顺序图是对对象的动态行为进行建模,有多个对象的参与、协作
问题:
当需要考察单个实体的动态行为时, 用UML如何来建模呢?
什么是单个实体:一个软件系统?一个子系统?一个模块、一个构件?
选择单个对象
软件系统中核心的、需要进行详细分析的单个实体
从不同的视点(ViewPoint)可有不同的选择
类的对象、构件、整个系统
原则:从选定的角度,把要考察的实体看作一个整体
UML提供了建模机制
状态图, 单个对象的动态行为
状态图的概念
状态(state):
是对象的生命期中的一个条件或状况
在此期间,对象可以响应事件、执行某活动等
例如,灯,有几个状态?
例如类,color,
状态机(state machine) :
是一种行为,
说明对象在它的生命期中, 响应事件所经历的状态序列 以及它们对每个事 件的响应
状态图(state diagram, State Chart ):
状态机可以用状态图来可视化。
状态图显示了一个状态机,它强调从状态到状态的控制流
状态有以下几个部分组成:
1)名称(name)
每个单词首字母大写
2)进入/退出动作(entry/exit action)
3)内部迁移(internal transition)
Transitions that are handled without causing a change in state
4)子状态 (substate)
5)延迟事件 (deferred event)
事件 Event
是对一个在时间和空间上占有一定位置的有意义的事情的描述
在状态机的语境中,一个事件是一个激励的发生,它能够触发一个状态迁移
UML 对4种事件进行建模
参量变化 change event
布尔表达式值变化、定时器、溢出:是内部事件
信号 signal (异步)
调用 call (同步)
时间事件 time event
时间事件 是表示一段时间的推移
用关键字after 后面跟着时间表达式
用关键字at 表示某个绝对时间点上发生的时间事件
变化事件 表示状态的一个变化或某些条件得到满足的事件
用关键字 when后跟一个布尔表达式,当条件满足,则引发变化事件
迁移Transition
在状态A,发生事件并满足一定条件,转到状态B
一个迁移由5部分组成
源状态 source state
事件触发器 event trigger (触发事件名称)
触发条件 guard condition
效应(effect) (或称,迁移动作)
可执行的动作
目标状态
特殊的迁移
自身迁移 self transition
从状态A迁移到状态A
内部迁移 internal transition
在状态A内部 行为
状态图的建模元素
状态
一般状态:圆角矩形
初始状态:实心圆
结束状态:“牛眼” (bull’s eye)
事件
触发事件名[触发条件]/迁移动作
这三个部分都是可以省略的,但至少有一部分
事件依附于表示迁移的箭线
迁移
叉形箭头实线
从初始状态指向目标状态
状态图建模
建模步骤
1、选择对象及视点
简单类的实例
构件
整个系统 或子系统
用例
2、定义 对象在生命期内可能存在的状态
状态要有意义
状态持续一定的时间
3、在每种状态下可以接受的事件及将要转去的新的状态
状态图建模注意事项:
不允许孤立的状态存在
不允许只进不出的状态迁移 (“黑洞”)
不允许只出不进的状态迁移 (“奇迹”)
不允许没有事件发生的迁移
或者“迁移” 没有指明具体的事件
比较状态图与交互图、活动图
交互
对共同工作的对象群体的行为建模
动态行为
状态机
对单个对象的行为建模
有时,可以对单个“完整系统”的行为建模
说明对象在它的生命期中响应事件所 经历的状态序列以及对那些事件的响应
动态行为建模
活动图
强调从活动到活动的控制流,多个业务角色
状态图是强调 对象潜在的状态和这些状态之间的迁移
UML工具小结
建模、模型
统一建模语言 UML,Unified Modeling Language
工具包
用例模型 UseCase Model
活动图 Activity Diagram
类图 Class Diagram
顺序图 Sequence Diagram
通信图 Communication Diagram
状态图 State Diagram
2.7 UML状态图的更多相关文章
- UML状态图和活动图
UML状态图和活动图 统一建模语言UML(Unified Modeling Language)是非专利的第三代建模和规约语言.UML是一种开放的方法,用于说明.可视化.构建和编写一个正在开发的.面向对 ...
- 时序扩展的UML状态图的测试用例生成研究
一.基本信息 标题:时序扩展的UML状态图的测试用例生成研究 时间:2014 出版源:西南大学 领域分类:时序扩展:UML状态图:测试用例:需求规格说明:模型 二.研究背景 问题定义:时序扩展的UML ...
- UML状态图(转载)
概述: 图表本身的名称,阐明该图的目的和其他细节.它描述了在一个系统中的一个组成部分不同的状态.状态是特定的一个系统的组件/对象. 状态图描述了一个状态机.我们阐明的状态机可以被定义为一台机器,它定义 ...
- Python设计模式 - UML - 状态图(State Machine Diagram)
简介 状态图主要用于描述对象在其生命周期中各种状态.状态之间的转换过程.触发状态转换的各种事件(条件)及执行的动作. 状态图构建步骤 - 找出适合用状态图描述的类.确定类中需要做状态图的重要对象 - ...
- UML状态图
状态图(Statechart digram)是系统分析的一种经常使用工具,系统分析员在对系统建模时,最先考虑的不是基于活动之间的控制流,而是基于状态之间的控制流,由于系统中对象的状态变化最易被发现和理 ...
- UML——状态图
状态图(Statechart Diagram),主要用于描述对象在其生命周期中基于事件的动态行为,显示了对象如何根据当前的状态对不同的事件(Events)作出反应(Action).一般我们用状态机来对 ...
- 【UML】状态图Statechart diagram(转)
前言 UML由动态图和静态图组成,状态图就是属于动态图中较为重要的一张图. 定义 用来描述一个特定对象的所有可能状态以及由于各种事件的发生而引起的状态之间的转移. 目的 ...
- UML简介
Unified Modeling Language (UML)又称统一建模语言或标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型 ...
- UML(统一建模语言)
最近看了一个UML图,所以特意来了解一下UML 统一建模语言 锁定 同义词 UML(统一建模语言)一般指统一建模语言 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . Unified Mo ...
随机推荐
- 在vim中 安装php的xdebug和 vdebug插件, 在vim中进行调试php代码
在vim中 安装php的xdebug和 vdebug插件, 在vim中进行调试php代码 参考: http://www.cnblogs.com/qiantuwuliang/archive/2011/0 ...
- CF113D 高斯消元、dp
题目链接 https://codeforces.com/contest/113/problem/D 思路 \(k[i]=\frac{1-p[i]}{ru[i]}\) f[i][j]表示经过i和j的次数 ...
- Excel lastindex of a substring
I think I get what you mean. Let's say for example you want the right-most \ in the following string ...
- P3975 [TJOI2015]弦论
思路 一眼SAM板子,结果敲了一中午... 我还是太弱了 题目要求求第k小的子串 我们可以把t=0当成t=1的特殊情况,(所有不同位置的相同子串算作一个就是相当于把所有子串的出现位置个数(endpos ...
- BZOJ 4771 七彩树(可持久化线段树合并)
题意 https://www.lydsy.com/JudgeOnline/problem.php?id=4771 思路 和 HDU 3333 其实有点像,不过是把序列的问题放在了树上,多维护一个深度即 ...
- PHP 常见的数据加密技术
单项散列加密技术(不可逆的加密) 把任意长的输入字符串变化为固定长的输出串的一种函数 MD5 string md5 ( string $str [, bool $raw_output = false ...
- JavaScript重点知识(二)
三.JS的API 3.1知识点(DOM) 1)DOM本质 将html结构化成浏览器和JS可识别可操作的东西 2)变量计算---强制类型转换 获取DOM节点 Attribute(对html标签属性的修改 ...
- 安装logstash和logstash-input-jdbc
一.安装logstash 1.mac 下直接 brew install logstash 二.安装logstash-input-jdbc 直接在logstash的安装目录bin下运行 ./logsta ...
- python3 items() 与 python2 中iteritems()的区别
在Python2.x中, iteritems() 用于返回本身字典列表操作后的迭代 Python 3.x 里面, iteritems() 方法已经废除了,而 items() 得到的结果是和 2.x 里 ...
- selenium 指定滚动到某个元素
from selenium import webdriver from selenium.common.exceptions import NoSuchElementException from se ...