常用UML图及PlantUML代码画图:流程图

流程图(Flow Chart),就是用来直观地描述一个工作过程的具体步骤图,它使用图形表示流程思路,也可以称之为输入-输出图。它通常用一些图框来表示各种类型的操作,在框内写出各个步骤,然后用带箭头的线把它们连接起来,以表示执行的先后顺序,用图形表示执行步骤,十分直观形象,易于理解。

主要作用   

帮助我们把一个复杂的过程简单而直观地展示出来。

方便我们将实际操作的步骤和我们想象的过程进行比较、对照,更加方便我们寻求改进的机会。

帮助我们将工作过程中复杂的、有问题的、重复的部分、多余的环节以及可以简化和标准化的地方都显示出来,有利于我们把复杂流程简单化。

活动图

活动图是UML用于对系统的动态行为建模的另一种常用工具,它描述活动的顺序,展现从一个活动到另一个活动的控制流。活动图在本质上是一种流程图。活动图着重表现从一个活动到另一个活动的控制流,是内部处理驱动的流程。

优点
1、使用活动图来描述用例场景,可以帮助我们认识问题领域,从问题领域中发现关键对象。
2、活动图能够表示并发活动的情形,非常适合支持并行行为,是支持多线程编程的很好的工具。
缺点
1、活动图实际上描述的是业务流程,可能会导致OO的类职责的混乱。
2、如果从活动图的观点来描述业务,实际上是不能直接看到对象是如何发挥作用的,这样在观念上很容易导致对象独立性被破坏。
3、不能显示对象之间的合作,以及对象在其生命周期内的运转情况。

简单来说,流程图可以帮助我们将复杂的工作流程可视化出来,便于传播和理解以及优化。

流程图范围很大,根据符号复杂度(活动图)和呈现方式(泳道图)又可以进一步细分,只是名字不同,但都属于流程图的范畴。如业务流程图就是带泳道的流程图,是表述业务流程的。任务流程图是无泳道的流程图,是表述任务的。

UML活动图

UML活动图

基础概念

UML活动图

常用符号

UML活动图

三大结构

UML活动图

进阶概念 - 活动图

UML活动图

活动(Activity):是履行操作必须发生的主要任务。

状态(State):定义事件或活动的当前条件。

用户(Actor):即系统角色,可以是人、其他系统或者子系统。

控制流(Control Flow)

是指执行或评估命令式或声明式程序的各个语句,指令或函数调用的顺序。(实线)

UML活动图

```plantuml@startumlstart    :action1;    ' 在流上写文字    -> 控制流;    :action2;    -> 控制流;    :action3;stop@enduml```

对象流(Object Flow)

是动作状态或者活动状态与对象之间的依赖关系,表示动作使用对象或者动作对对象的影响。(虚线)

UML活动图

代码示例

```plantuml@startumlstart    :action1;    ' 修改线条样式    -[dashed]-> 对象流;    ' 下划线__xxx__    :__Object__]    -[dashed]-> 对象流;    :action2;stop@enduml```

分支与合并(Decision and Merge Nodes)

分支与合并用菱形表示

UML活动图

代码示例

```plantuml@startumlstart    :归还图书;    if (是否超期) then (超期)        :支付罚金;    else (未超期)    endifstop@enduml```

分叉与汇合(Fork and Join Nodes)

对象在运行时可能会存在两个或多个并发运行的控制流,为了对并发的控制流建模,UML中引入了分叉与汇合的概念。分叉用于将动作流分为两个或多个并发运行的分支,而汇合则用于同步这些并发分支,以达到共同完成一项事务的目的。

UML活动图

代码示例

```plantuml@startuml' 上图startfork  :行为 1;fork again  :行为 2;fork again  :行为 3;fork again  :行为 4;end mergestop' 下图startfork  :行为 1;fork again  :行为 2;fork again  :行为 3;fork again  :行为 4;end forkstop@enduml```

泳道(SwimLane)

泳道将活动图中的活动划分为若干组,并把每一组指定给负责这组活动的业务组织,即对象。在活动图中,泳道区分了负责活动的对象,它明确地表示了哪些活动是由哪些对象进行的。在包含泳道的活动图中,每个活动只能明确地属于一个泳道。

泳道是用垂直实线绘出,垂直线分隔的区域就是泳道。在泳道的上方可以给出泳道的名字或对象的名字,该对象负责泳道内的全部活动。泳道没有顺序,不同泳道中的活动既可以顺序进行也可以并发进行,动作流和对象流允许穿越分隔线。

UML活动图

代码示例

```plantuml@startuml|泳道1|start:foo1;' 设置泳道颜色|#AntiqueWhite|泳道2|:foo2;:foo3;|泳道1|:foo4;|泳道2|:foo5;stop@enduml```

实例解析

图片

代码示例

```plantuml@startuml|会员|start:选择商品加入购物车;' 设置泳道颜色|系统|:产生订单;fork    :核对信用卡;    if (余额) then (充足)        :付款;    else (不足)        (A)        note right: 连接器    endiffork again    :核对库存数量;    if (库存) then (充足)        :发送商品;    else (不足)        (A)        detach        (A)        :取消订单;        :其他流程;        stop    endifend forkstop@enduml```

泳道分为:会员泳道和系统泳道。会员选择商品并加入购物车,系统完成订单生成及其支付完毕。

开始节点:会员添加商品到购物车,点击【订单确认】,开始交于系统处理订单流程

结束节点:商品发送完毕和付款成功,订单处理流程结束

活动状态:产生订单、核对信用卡、核对库存量、发送商品、付款

分叉与汇合:【产生订单】份叉为检查库存量和会员支付金额是否足够,如果不足,取消订单,如过库存量和支付金额足够,发送商品和付款,最后汇合为订单完成。

THE END