EA&UML日拱一卒--序列图(Sequence Diagram)::并行和临界区

如果问用序列图最难表现的是什么,那恐怕就是多任务了。序列图中的多任务建模是利用并行和临界区两种复合片段(Fragment)来实现的。今天一一加以说明。


并行(parallel)


定义


并行是表明多重交互的复合片段,其行为是并发执行的。


并行结构有两个或更多的操作域,每个操作域中的消息按顺序执行,但并行操作域之间的消息可以按照任何次序执行。


示例

EA&UML日拱一卒--序列图(Sequence Diagram)::并行和临界区_第1张图片


上图中Actor1,Actor2,Actor3分别位于各自的操作域中,各自独立地和HttpServer进行交互。


临界区(critical region)


定义


临界区表示受保护的处理区域,区域中的处理不可以和其他并行区域中的处理交错执行。


示例


这里用两个任务之间转送数据的处理为例说明。先看图。

EA&UML日拱一卒--序列图(Sequence Diagram)::并行和临界区_第2张图片


::ControlTask 和::UserInterface生命线的方框两侧都多了两条竖线,这表明,这两个类都是主动类,拥有自己的上下文。DataTransmitter的职 责就是在将数据从::ControlTask传送到::UserInterface,步骤如下:


  1. ::ControlTask调用DataTransmitter的push方法,推送数据。

  2. DataTransmitter调用push方法将数据推送给DataList。DataList的push方法处于临界区中,不会被其他任务打断。

  3. ::ControlTask调用Notify方法向::UserInterface发出数据传送完毕的通知。注意:此处为异步调用。

  4. ::UserInterface收到通知以后,调用DataTransmitter的pull方法,取得数据。这个动作会执行多次直到数据取完为止。

  5. DataTransmitter的pull方法会调用DataList的pull方法,这个pull方法也是处于临界区中,不会被其他任务打断。


都理解了么?


这段时间的文章中看起来分散的知识点,一旦组合起来,就能发挥UML的强大作用了。


一点感想


工作中实际用到这个功能,大概是快十年之前的事情了。今天能用序列图以自己满意的形式表达出来,那份成就感,满足感不是一个理工男可以用语言来表达的,真希望阅读本文的你也能够体会到。


抄录一首宋代陆九渊的【读书】,与大家共勉。


读书切戒太匆忙,

涵泳功夫兴味长。

未晓不妨权放过,

切身需要急思量。

    

如果阅读本文能给您带来些许收获,欢迎分享给更多的朋友!

阅读更多新文章,请扫描下面二维码,关注公众号【面向对象思考】
EA&UML日拱一卒--序列图(Sequence Diagram)::并行和临界区_第3张图片


你可能感兴趣的:(UML)