EA&UML日拱一卒--序列图(Sequence Diagram)::并行和临界区
如果问用序列图最难表现的是什么,那恐怕就是多任务了。序列图中的多任务建模是利用并行和临界区两种复合片段(Fragment)来实现的。今天一一加以说明。
并行(parallel)
定义
并行是表明多重交互的复合片段,其行为是并发执行的。
并行结构有两个或更多的操作域,每个操作域中的消息按顺序执行,但并行操作域之间的消息可以按照任何次序执行。
示例
上图中Actor1,Actor2,Actor3分别位于各自的操作域中,各自独立地和HttpServer进行交互。
临界区(critical region)
定义
临界区表示受保护的处理区域,区域中的处理不可以和其他并行区域中的处理交错执行。
示例
这里用两个任务之间转送数据的处理为例说明。先看图。
::ControlTask 和::UserInterface生命线的方框两侧都多了两条竖线,这表明,这两个类都是主动类,拥有自己的上下文。DataTransmitter的职 责就是在将数据从::ControlTask传送到::UserInterface,步骤如下:
-
::ControlTask调用DataTransmitter的push方法,推送数据。
-
DataTransmitter调用push方法将数据推送给DataList。DataList的push方法处于临界区中,不会被其他任务打断。
-
::ControlTask调用Notify方法向::UserInterface发出数据传送完毕的通知。注意:此处为异步调用。
-
::UserInterface收到通知以后,调用DataTransmitter的pull方法,取得数据。这个动作会执行多次直到数据取完为止。
-
DataTransmitter的pull方法会调用DataList的pull方法,这个pull方法也是处于临界区中,不会被其他任务打断。
都理解了么?
这段时间的文章中看起来分散的知识点,一旦组合起来,就能发挥UML的强大作用了。
一点感想
工作中实际用到这个功能,大概是快十年之前的事情了。今天能用序列图以自己满意的形式表达出来,那份成就感,满足感不是一个理工男可以用语言来表达的,真希望阅读本文的你也能够体会到。
抄录一首宋代陆九渊的【读书】,与大家共勉。
读书切戒太匆忙,
涵泳功夫兴味长。
未晓不妨权放过,
切身需要急思量。
如果阅读本文能给您带来些许收获,欢迎分享给更多的朋友!