流程图(Flow Chart),就是用来直观地描述一个工作过程的具体步骤图,它使用图形表示流程思路,也可以称之为输入-输出图。它通常用一些图框来表示各种类型的操作,在框内写出各个步骤,然后用带箭头的线把它们连接起来,以表示执行的先后顺序,用图形表示执行步骤,十分直观形象,易于理解。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
主要作用 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
帮助我们把一个复杂的过程简单而直观地展示出来。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
方便我们将实际操作的步骤和我们想象的过程进行比较、对照,更加方便我们寻求改进的机会。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
帮助我们将工作过程中复杂的、有问题的、重复的部分、多余的环节以及可以简化和标准化的地方都显示出来,有利于我们把复杂流程简单化。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
活动图
活动图是UML用于对系统的动态行为建模的另一种常用工具,它描述活动的顺序,展现从一个活动到另一个活动的控制流。活动图在本质上是一种流程图。活动图着重表现从一个活动到另一个活动的控制流,是内部处理驱动的流程。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
优点
1、使用活动图来描述用例场景,可以帮助我们认识问题领域,从问题领域中发现关键对象。
2、活动图能够表示并发活动的情形,非常适合支持并行行为,是支持多线程编程的很好的工具。
缺点
1、活动图实际上描述的是业务流程,可能会导致OO的类职责的混乱。
2、如果从活动图的观点来描述业务,实际上是不能直接看到对象是如何发挥作用的,这样在观念上很容易导致对象独立性被破坏。
3、不能显示对象之间的合作,以及对象在其生命周期内的运转情况。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
简单来说,流程图可以帮助我们将复杂的工作流程可视化出来,便于传播和理解以及优化。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
流程图范围很大,根据符号复杂度(活动图)和呈现方式(泳道图)又可以进一步细分,只是名字不同,但都属于流程图的范畴。如业务流程图就是带泳道的流程图,是表述业务流程的。任务流程图是无泳道的流程图,是表述任务的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
基础概念
常用符号
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
三大结构
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
进阶概念 - 活动图
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
活动(Activity):是履行操作必须发生的主要任务。
状态(State):定义事件或活动的当前条件。
用户(Actor):即系统角色,可以是人、其他系统或者子系统。
控制流(Control Flow)
是指执行或评估命令式或声明式程序的各个语句,指令或函数调用的顺序。(实线)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
```plantuml
@startuml
start
:action1;
' 在流上写文字
-> 控制流;
:action2;
-> 控制流;
:action3;
stop
@enduml
```
对象流(Object Flow)
是动作状态或者活动状态与对象之间的依赖关系,表示动作使用对象或者动作对对象的影响。(虚线)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
代码示例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
```plantuml
@startuml
start
:action1;
' 修改线条样式
-[dashed]-> 对象流;
' 下划线__xxx__
:__Object__]
-[dashed]-> 对象流;
:action2;
stop
@enduml
```
分支与合并(Decision and Merge Nodes)
分支与合并用菱形表示文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
代码示例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
```plantuml
start
:归还图书;
if (是否超期) then (超期)
:支付罚金;
else (未超期)
endif
stop
```
分叉与汇合(Fork and Join Nodes)
对象在运行时可能会存在两个或多个并发运行的控制流,为了对并发的控制流建模,UML中引入了分叉与汇合的概念。分叉用于将动作流分为两个或多个并发运行的分支,而汇合则用于同步这些并发分支,以达到共同完成一项事务的目的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
代码示例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
```plantuml
@startuml
' 上图
start
fork
:行为 1;
fork again
:行为 2;
fork again
:行为 3;
fork again
:行为 4;
end merge
stop
' 下图
start
fork
:行为 1;
fork again
:行为 2;
fork again
:行为 3;
fork again
:行为 4;
end fork
stop
@enduml
```
泳道(SwimLane)
泳道将活动图中的活动划分为若干组,并把每一组指定给负责这组活动的业务组织,即对象。在活动图中,泳道区分了负责活动的对象,它明确地表示了哪些活动是由哪些对象进行的。在包含泳道的活动图中,每个活动只能明确地属于一个泳道。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
泳道是用垂直实线绘出,垂直线分隔的区域就是泳道。在泳道的上方可以给出泳道的名字或对象的名字,该对象负责泳道内的全部活动。泳道没有顺序,不同泳道中的活动既可以顺序进行也可以并发进行,动作流和对象流允许穿越分隔线。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
代码示例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
```plantuml
@startuml
|泳道1|
start
:foo1;
' 设置泳道颜色
|#AntiqueWhite|泳道2|
:foo2;
:foo3;
|泳道1|
:foo4;
|泳道2|
:foo5;
stop
@enduml
```
实例解析
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
代码示例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html```plantuml
@startuml
|会员|
start
:选择商品加入购物车;
' 设置泳道颜色
|系统|
:产生订单;
fork
:核对信用卡;
if (余额) then (充足)
:付款;
else (不足)
(A)
note right: 连接器
endif
fork again
:核对库存数量;
if (库存) then (充足)
:发送商品;
else (不足)
(A)
detach
(A)
:取消订单;
:其他流程;
stop
endif
end fork
stop
@enduml
```
泳道分为:会员泳道和系统泳道。会员选择商品并加入购物车,系统完成订单生成及其支付完毕。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
开始节点:会员添加商品到购物车,点击【订单确认】,开始交于系统处理订单流程文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
结束节点:商品发送完毕和付款成功,订单处理流程结束文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
活动状态:产生订单、核对信用卡、核对库存量、发送商品、付款文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html
分叉与汇合:【产生订单】份叉为检查库存量和会员支付金额是否足够,如果不足,取消订单,如过库存量和支付金额足够,发送商品和付款,最后汇合为订单完成。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38088.html