需要这个区分。
而有些时候呢,我们这个活动图呢,很多 同学容易把它跟那个状态图混淆,因为这个它们两个长得很像
但实际上这两个是完全不同的两种描述行为的一种模型
这个,如果你这个混了之后呢,就完全错误了 本身你这个,它们这个视角,观察点是不一样的
所以,但是它们长得,或者说它们的这个 样子,很容易给人产生混淆。
我们状态这种弧状,弧角矩形,而这个动作是一种这个
两边是弧的这么一种弧形,所以很多人一看好像一样,其实不是。
所以在活动图中只有动作 而这个在状态图中呢只有这个状态。
这个还有一些子活动 这个描述这个活动呢,实际上呢是
本身呢,活动图也可以描述一些这个并发,并发的一个活动 这里我们给出一些简单的一些例子。
描述子活动呢实际上是 用来这个调用,在当前的活动中调用另外的活动图 中所定义的一些活动,这个
就是说这里呢我们给出一个例子,这是一个最简单不过的一个活动图
这是邮递员在进行投递这个邮件的一个 流程。
比如邮递员首先检查所有的一些 自己这个兜里边的所有的一些邮件,然后呢
这个第二个检查完之后,把它们进行分门别类,进行排序 排序完了之后呢,然后就再给它们放到不同的一些邮箱里面去
第一个动作呢是,什么是动作我们前面已经提到了,动作实际上就是一些可以
像别的调用对象自身的一些操作,或者是调用其他对象的一些操作,都可以认为是一些动作
这个动作呢,是这个,调用这个邮递员的 source mail 这个操作。
另外这个 把这些邮件投递到邮箱里边,实际上它又调用了一个什么呢
另外的一个状态,活动图中所定义的一套这个行为。
这时候就用到什么呢 这个,一些这个活动,活动是由动作组成的一些集合
活动是这个动作,相互这个,就前续后继的动作相互组合起来的,调用的这个活动是
另外一个状态,活动图中所定义的,它是传递这个邮件首先要
检查邮筒,然后呢把一个,如果邮筒的地址和这个当前的邮箱,邮件地址呢
一致的话,然后他就,这个 他这里边又调用了一个子活动,是相当于把这个
邮件放到这个盒子里边去,所以这是一套 好另外呢也可以这个,本身呢
也可以用隐含的一种方式来调用,在当前这种系统中,当前这个活动图中呢
全部都是一些最基本的一些动作
投递邮件这个动作,是向这个邮递员发送了一个,发送邮件的这么一个消息
这是一个动作,但是他在执行这个消息的时候,实现这个消息的时候,在另外一个状态图中呢 实际上是由一个活动图来定义的。
另外呢还可以实现一些动态变化,来表示 在当前的这个活动中,实际上是交给相类似的一些人来完成
然后呢他们这个做的工作是相同的,然后就合并起来。
这个 MapReduce 就是这么一种 这个动态并发的一种例子。
然后呢是对象流,如果两个活动之间传递对象流呢,实际上就是一个
对象和对象,两个动作之间不仅有一个前续后继的一种这个箭头关系,还有一种什么呢
还有在这个过程中呢,还有传递一个事件。
就是说像在 这个例子中,拿起一个单据,然后呢这个
填写单据,这两个动作之间
实际上是传递了一个什么呢,传递订单这个对象,相当于这个从一种信息
封装成一个对象的一个信息,从一个动作传递到它这个下面的一个动作。
这个 还有呢就是一些这个,和状态图中类似的一些
起始动作,起始活动,终止活动 交叉和结合,这个呢我们这个其实很容易理解
它在表示,用这种,这种,这种,借用了状态图中相似的一些伪状态,只不过这也叫
一些这个活动节点,然后呢由它们,比如说状态图中有这个决策,这里边也有决策
这用来表示条件判断,在满足条件的时候执行一个动作,在这个满足另外一个条件的时候执行- 另外一个条件
这个是,我们再看一下这个 用这个活动,来表示的一个
这个盖房子的一个并发的一个流程
注意呢,这里呢是,应该是,真正表示的话不是弧状矩形,这是呈状态的,应该是那个 弧形的那种节点。
这里表示这个在盖房子的时候,先修一个地下室,地下室修完之后呢可以并发的
一方面可以盖上层结构,另一方面装修地下室的什么呢 一些电气设备,进行地下室的电气装修
这个做完之后,这两个同时可以并发完成 并发进行,并发进行之后呢,什么时候装这个
上层结构的这个电气设备呢,电线 线路的一些,电路线路的一些安装呢,那必须得是经过
首先呢,这个已经构造好这个主体工程了,然后呢还有这个
地下室的一些电路、 电气装好之后,才能装这个上层
同时,这个只要做完当前的这个主体工程之后就可以往上盖这个屋顶
盖屋顶和装这个,本身这个墙体 的一些这个电路呢,实际上可以并发完成,并发进行
然后,盖上屋顶之后,然后这边 一些这个框架的一些电路设备装好之后呢就可以
装饰这个,墙,墙面。
同时呢还可以 这个装饰和这个外面的这个,外部的一些
电路的一些安装,也是这个同时进行。
最后呢,可以这个 进行一个检查。
所以这些呢,就是有些时候,可以并发的时候用这种
分叉来表示,比如要是说这两个要合到一块儿的时候,这两个必须有两个前驱
都完成之后它才能够执行这个活动的,要用结合的方式 这非常容易理解,我们就不说了。
它实际上是可以用来表示一些并发的一些活动 这个并且有的时候,两个并发之间
两个工作控制流之间,可以这个向对方传递一些消息,对象流 来表示。
这是一些所谓条件,大家也可以看一下,有些情况下呢 可以在一个,在这个分叉的时候呢
在这个分支的时候,在一个点上写上一个什么呢,条件,注意用中括号括起来
写上这个条件那就意味着,另外一个地方不写条件
就是说这个,表示并发,当满足条件的时候呢 它会两个分支同时完成,当满足
其中一个不满足条件,满足条件不满足这个条件的时候呢,它只执行一个
所以,前边的,这个活动图是等价于这个
下面这个活动图的,只不过下面这个活动图呢,描述起来稍微复杂一点,前面一个活动图呢 描述起来比较简单。
当优先级等于 1 的时候,这是 进行一个,相当于一个在软件工程中,在
进行这个测试人员,开发人员,这个一些这个 PM
之间 进行联合起来协作,这个进行这个 fix debug 这个活动。
首先注册了一个 bug,然后呢 注册完这个 bug 之后,进行这个评估。
当然是这个如果 bug 是非常,这个优先级比较高的时候,那这时候要进行什么呢
进行这个评估一下这个 bug 会带来的一些冲击或者是一些问题
进行一些评估,对这个 bug 如果不修改的话这个会产生哪些危害,进行一个评估
当然是如果它的优先级小于 1 的话,那直接就可以进行这个修改了
进行修改 bug,测试 bug,然后发布这个 修订。
然后如果优先级等于 1 的话,实际上呢,这两条线呢,都得做
这里呢就是说,如果优先级等于 1 的话,实际上呢这个 不是两个都得做,就是说,就得先开始做这个
进行这个评估,然后呢这个制定 一个非常完整的修订计划,然后呢才开始这个
进行这个发布这个,这个修订 所以呢,如果优先级等于
1 的话,这里呢我们可以看到 是执行这个。
如果优先级不等于 1 的话呢,它是执行到 执行到,优先级等于
1 的话是 两条线同时都得做,即,一方面呢要这个评估
风险进行这个修订计划,另一方面也同时也要 另外一条线,可能第一条线是由这个
PM 做的,第二条线是由那个 dev 开发人员来做的,另一条线就是这个修订这个
bug,然后测试 bug,这样两个都完成之后才 进行这个 fix。
但是第一条呢,是吧,如果优先级不等于 1 的话 由 PM
不需要做一些评估风险呀,这个进行这个计划呀这些工作 那只有
dev 进行修改就完了,修改完之后并不是说不执行,到时候就死住了,而是修改之完后直接
fix,release fix ,所以这个大家认真看一下。
这个另外呢,在涉及到多个对象之间的这个并发的时候,我们有些时候可以用泳道的方式
来进行描述,这个泳道呢就是,每个泳道表示一个对象,一个对象
做的工作,而整个多个泳道的这个活动图,实际上是描述这个一种协作,多个
多个这个对象之间,一个工作是由多个对象完成的,多个
对象在完成这个工作的时候,有些情况
下呢是需要并发的,有些时候呢需要这个有个结合。
所以这个还有一些这个简便特征,比如说 用一些特定的一些变形的一些动作来描述
发送信号和接受信号,发送信号和接受信号之间呢这个
表示一些这个什么呢?一些这个发送一些这个对象流和控制流。
这个人 这个早上醒了之后,首先呢这个,有个习惯就是去喝一杯咖啡。
喝一杯咖啡呢首先呢得打开咖啡炉, 打开咖啡炉之后,做完这个
活动,做完这个活动了,然后这个咖啡炉呢实际上这个,就是有一个
在等待这个咖啡煮好的这个情况下,他可以去干一些其他的事情,可以往下执行
往下执行呢,就是去拿杯子,去拿杯子之后呢,这个 这时候呢这个,还不能喝咖啡,就是说需要这个等待这个
咖啡炉好,所以这时候,咖啡炉实际上在当前这个动作
在没有,在这个进行这个动作的时候他可以往下进行, 但是呢,在这个很多情况下,这个
需要在这个地方进行一个等待,等待这个咖啡炉煮好之后,
这个咖啡之后,才可以往下进行。
所以这个是个简便技法, 它完全可以等价于我们用刚才讲到的这种分叉和这个
交汇这种方式来进行描述,只不过这样的话呢它使得这个 比较简单。
还有一种呢就是扩展区域,这个是 UML 2
的一个新特征 实际上它可以把一个大的任务并发分解成若干个小的任务,然后交给多个
机器来完成,最后把它们汇总起来。
像这个对于描述,用这种方式描述一些人组成的一些系统。
比如说老师布置作业 然后就交给班里边40多个同学来完成,然后大家完成之后老师再把它收起来,就是这种。
只不过呢,这里呢,它对这个,到底这个 任务的分配,是吧,有一个非常精确的定义。
这个到底是,订单,是吧,分解成若干子项,每个子项 具体到这个每一个部分,是吧,它在这个
在当前这个扩展区域里边进行一个分工,进行一个大任务给他分解为若干小任务,
最后呢,把这小任务的结果,如何给它 这个汇总到,汇总起来,这时候这个离开了这个扩展区域。
所以这些东西也可以描述,甚至是呢这个,在 UML 2 中产生了一些这个
动作和动作之间的一种引脚,就像动作和动作跟这个 集成电路板一样它有一些引脚,实际上引脚呢实际上就是一种表示这个
一个动作做完之后向另外一个动作传递的一些对象流和数据流,只不过这个
由于它的引脚不同呢,导致它这个 相当于它这个输入的参数是不同的,可以认为是一些这个输入参数。