UML活动图、状态图
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UML活动图、状态图相关的知识,希望对你有一定的参考价值。
参考技术A近期写文档逐渐考虑规范化,带上UML图可让开发方案更为直观,也可理清需求
1,安装画图工具Rational Rose 2007:
https://blog.csdn.net/lovelry/article/details/120538050
2,活动图定义
活动图可以在分析系统业务时用来演示业务流,也可以在收集系统需求的时候显示一个用例中的事件流。活动图显示了系统中某个业务或者某个用例中,要经历哪些活动,这些活动按什么顺序发生。
3,创建活动图
(1) 用于分析系统业务:在浏览器中右击Use Case视图,选择new→activity diagram。
(2) 用于显示用例中的事件流:在浏览器中选中某个用例,然后右击这个用例,选择new→activity diagram。
4,增加泳道
泳道是框图里的竖段,包含特定人员或组织要进行的所有活动。
可以把框图分为多个泳道,每个泳道对应每个人员或组织。
在工具栏选择swimlane按钮,然后单击框图增加泳道,最后用人员或组织给泳道命名。
注意:先创建一个活动图,才会有swinlane
5,增加活动并设置活动的顺序
(1) 在工具栏中选择Activity 按钮,单击活动图增加活动,命名活动。
(2) 在工具栏中选择Transition按钮,把箭头从一个活动拖向另一个活动。
6,增加同步
(1)选择synchronization工具栏按钮,单击框图来增加同步棒。
(2)画出从活动到同步棒的交接箭头,表示在这个活动之后开始并行处理。
(3) 画出从同步棒到可以并行发生的活动之间的交接箭头。
(4) 创建另一同步棒,表示并行处理结束。
(5) 画出从同步活动到最后同步棒之间的交接箭头,表示完成所有这些活动之后,停止并行处理。
以上来源: https://blog.csdn.net/gz153016/article/details/49641847
网上找一个完整的流程图
7,个别符号理解
自身转移(Self-Transitions):状态可以有返回自身状态的转移,称之为自身转移;2S后,Poll input事件执行,转移到自己状态【Waiting】
8,活动图和时序图作用对象的区别
活动图泳道的粒度通常比较大,是一个服务,角色,系统;
时序图对象生命线的粒度比较小,通常是一个类
状态和活动(state activity):状态是一种静止的概念(名词),activity是运动的概念(动词)。可以是由activity获得state,也可以根据state去activity某个操作,比如通过增删改操作(activity)获取到设备信息(state)。通过设备信息去进行网关同步(activity)
状态图
状态(state)是指在对象的生命期中的某个条件或状况,在此期间对象将满足某些条件、执行某些活动或等待某些事件。所有对象都具有状态,状态是对象执行了一系列活动的结果,当某个事件发生后,对象的状态发生变化。
活动图和状态图的比较
状态图和活动图元素很像,基本上就少了泳道
活动图粒度大些:
--描述并行的过程或这行为
--描述一个算法
--描述一个跨越多个用例的活动
状态图粒度小些描述了一个具体对象的可能状态以及他们之间的转换。
状态图的一个状态可以将多个行为表示出来
状态图示例:
可参考其他文章: https://blog.csdn.net/xuxixixi_/article/details/120816384
https://www.cnblogs.com/jingwhale/p/4230235.html
UML-状态图
温馨提示:
-
对于 UML图有用无用,网上说法不一,不管怎样 也是 可 以稍微 学习一下的 -
看懂本文可能需要 -
编程思维 -
懂中文:) -
您的观看与点赞是对本公众号最大力的支持和鼓励~~
目录
状态图
状态(state)是指在对象的生命期中的某个条件或状况,在此期间对象将满足某些条件、执行某些活动或等待某些事件。所有对象都具有状态,状态是对象执行了一系列活动的结果,当某个事件发生后,对象的状态发生变化。
状态图(statechart diagram),用来描述一个特定的对象所有可能的状态,以及由于各种事件的发生而引起的状态之间的转移和变化。并不是所有的类都需要画状态图,有明确意义的状态,在不同状态下行为有所不同的类才需要画状态图。如下,一个机器的状态图
再如,CD Player的状态图
1.状态
一个状态有以下几个部分:状态名(name)、进入/退出动作(entry/exit action)、内部转移(internal transttion)、子状态(substate)、延迟事件(dferred event)。状态可以细分为不同的类型,例如初态、终态、中间状态、组合状态、历史状态等。一个状态图只能有一个初态,但终态可以有一个或多个,也可以没有终态。中间状态包括两个区域:名字域和内部转移域,如图所示。其中内部转移域是可选的。
横线上面是名字域,下面是转换域(可选)。
ntry/turnOn:当转入该状态时,做开灯动作。do/blinkFivetimes:当处于该状态时,灯闪烁5次。do活动是只在状态内出现的活动,不能附加到转换上。event poweroff/powerSupplySelf:当电源关闭事件发生时,用自备电源。exit/turnOff:当转出该状态时,做关灯动作。event selfTest/defer:当selfTest事件发生时,对象将延迟响应,到别的状态中再处理,用defer这个特定动作表示延迟。
2.状态图的要素
椭圆或圆角矩形:表示对象的一种状态,椭圆内部填写状态名 箭头:表示从箭头出发的状态可以转换到箭头指向的状态 事件:引起状态转换的原因。事件名可在箭头线上方标出 条件:事件名后加方括号,括号内写状态转换条件 实心圆:初始状态 内部实心的同心圆:最终状态
3.状态的类型
①按状态过程分:
②含有子状态的状态被称为组合或嵌套状态
组合状态可以使用“与”关系分解为并发子状态,或者通过“或”关系分解为互相排斥的顺序子状态。两种表示方法:顺序子状态,并发子状态
顺序子状态
如果一个组成状态的子状态对应的对象在其生命期内的任何时刻都只能处于一个子状态,即多个子状态之间是互斥的,不能同时存在,这种子状态称为顺序子状态。
并发子状态
有时组合状态有两个或者多个并发的子状态机,此时称组成状态的子状态为并发子状态。
③历史状态是伪状态,其目的是记住从组合状态中退出时所处的子状态,当再次进入组合状态时,可以直接进入这个子状态,而不是再从组合状态的初态开始。
浅(shallow)历史状态, 只记住最外层组合状态的历史。
深(deep)历史状态, 可以记住任意深度的组合状态的历史。
CD Player,running状态被打断到power on状态,再转回到running状态时,希望直接进入历史状态
4.转移(Transition)
转移是两个状态间的一种关系,表示对象将在当前状态中执行动作,并在某个特定事件发生或某个特定的条件满足时进入后继状态。每个转移只允许有一个事件触发,一个事件只允许有一个动作。
①转移的五要素(注意格式)
格式:事件(参数)[条件]/动作
-
源状态 -
目标状态 -
触发事件 -
如果箭头上不带任何事件名,表示是一个自动转换,当与源状态相关的活动完成时就会自动触发。 -
监护条件 -
动作
②转换的类型
内部转移:不导致状态改变的转移,不会执行entry和exit动作
外部转移 自转移
5.事件(Event)
事件是对一个时间和空间上占有一定位置的有意义的事情的规格说明。事件触发状态的转移。
四类主要事件:
-
信号事件 -
调用事件 -
变化事件 -
时间事件
①信号signer事件
对象之间通过发送信号和接收信号实现通信。信号是一种异步机制。在计算机中,鼠标和键盘的操作均属于此类事件。对于一个信号而言,对象一般都有相应的事件处理器,如onMouseClick()等。
②调用call事件
表示一个操作的调度。一个对象请求调用另一个对象的操作 信号是一个异步事件,而调用事件一般是同步的。也就是说,当对象调用另一对象的操作时,控制就从发送者传送到接收者,该事件触发转换,完成操作后,接收者转换到一个新的状态,控制返还给发送者。
③变化change事件
用关键字When,后面跟布尔表达式 When(temperature>120)/alerm() 变化事件的意图是要频繁测试表达式,只要表达式由假变为真,事件就会发生。
注意: 变化事件与监护条件的区别
④时间(time)事件
时间事件是指在绝对时间或在某个时间间隔内发生的事情所引起的事件。例如到达某一时间或经过了某一时间段。用关键字When 或After表示。
6.状态图建模技术
建模步骤:①找出适合用模型描述其行为的类。②确定对象可能存在的状态。③确定引起状态转换的事件。④确定转换进行时对象执行的相应动作。⑤对建模的结果进行相应的精化和细化。
活动图与状态图的比较
1.活动图与状态图的相同点:
都是对系统的动态行为建模。
2.活动图与状态图的区别:
①描述对象不同
状态图:描述对象状态及状态之间的转移;活动图:描述从活动到活动的控制流。
②使用场合不同
状态图:描述对象在其生命期中的行为状态变化;活动图:描述过程的流程变化。
原文链接
https://www.cnblogs.com/jingwhale/p/4230235.html UML状态图和活动图
end
以上是关于UML活动图、状态图的主要内容,如果未能解决你的问题,请参考以下文章