EA&UML日拱一卒-活动图:: 分叉和结合

分支是一个输入令牌根据条件判断的结果转移到在几条可能的路径中的一条,而合并是几条可能的控制路径的汇合点,任何一条路径上出现令牌,则该令牌会转移到输出路径上。分支和合并都不会改变并发执行线程的数量。简单地讲,分支和合并提供的是选择控制路径的手段。


也存在另外一种情况,一个控制流会转换成两个或多个并发的控制流,这些并发的控制流在完成各自的任务后,又会结合成一个控制流。这就是UML中的分叉和结合。


语义


分叉(folk)节点是一个有一个输入,多个输出的节点,一个输入令牌被复制到每一个输出上。分叉会增加并发线程的数量。


结合(join)是活动图中的一个点,在这里有两个或多个并发线程合并为一个线程。当所有输入的令牌全都到达之后,这些令牌结合成一个令牌并转移到输出路径上。


表示法


分叉表示为有一个转入箭头,两个或多个转出箭头的粗线条;结合表示为多个转入箭头和一个转出箭头的粗线条。


画法


拖动工具栏中下列图标到活动图后,根据需要连接控制流即可。两个图标的区别只在于线条的方向不同。



示例


下面以复印机的动作为例说明分叉和结合的使用方法。



处理相对比较复杂,请耐心看完。


  1. 进入复印功能后首先执行准备处理PrepareCopy

  2. PrepareCopy执行以后分别启动UI和复印处理两个并发流程

  3. 复印流程等待UI流程发送的开始命令。

  4. UI流程表示开始画面

  5. UI流程等待用户按下开始按钮

  6. 用户按下开始按钮

  7. UI流程向复印流程发送开始命令

  8. UI流程等待复印流程发出的通知

  9. 复印流程收到开始命令执行开始复印处理StartCopy

  10. 开始复印处理结束后向UI流程发送复印已经开始通知

  11. UI流程表示复印执行中画面

  12. 复印流程启动扫描流程和打印流程

  13. 扫描和打印执行过程中向UI流程发出扫描和更新通知

  14. UI流程更新复印执行中画面

  15. 扫描和打印流程都结束后结合为复印流程

  16. 复印流程执行复印结束动作FinishCopy

  17. 复印流程向UI流程发送复印结束通知。

  18. UI流程收到复印结束通知以后显示复印完了画面

  19. UI流程和复印流程结合

  20. 全部处理结束


本流程的第2步,第12步为分叉节点;第15步,第19步为结合节点。本流程也可以按照UI流程和复印流程分别理解,这部分就留给读者吧。


以上就是今天的文章,如果它能给您带来些许收获,欢迎点赞并推荐给朋友!

阅读更多更新文章,请扫描下面二维码,关注公众号【面向对象思考】