EA&UML日拱一卒--序列圖(Sequence Diagram)::並行和臨界區

如果問用序列圖最難表現的是什麼,那恐怕就是多任務了。序列圖中的多任務建模是利用並行和臨界區兩種複合片段(Fragment)來實現的。今天一一加以說明。

並行(parallel)

定義

並行是表明多重交互的複合片段,其行為是並發執行的。

並行結構有兩個或更多的操作域,每個操作域中的消息按順序執行,但並行操作域之間的消息可以按照任何次序執行。

示例

上圖中Actor1,Actor2,Actor3分別位於各自的操作域中,各自獨立地和HttpServer進行交互。

臨界區(critical region)

定義

臨界區表示受保護的處理區域,區域中的處理不可以和其他並行區域中的處理交錯執行。

示例

這裡用兩個任務之間轉送數據的處理為例說明。先看圖。

::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的強大作用了。

一點感想

工作中實際用到這個功能,大概是快十年之前的事情了。今天能用序列圖以自己滿意的形式表達出來,那份成就感,滿足感不是一個理工男可以用語言來表達的,真希望閱讀本文的你也能夠體會到。

抄錄一首宋代陸九淵的【讀書】,與大家共勉。

讀書切戒太匆忙,

涵泳功夫興味長。

未曉不妨權放過,

切身需要急思量。

以上就是今天的文章,如果它能給您帶來些許收穫,歡迎點贊並推薦給朋友!

閱讀更多更新文章,請關注【面向對象思考】微信公眾號!


推薦閱讀:

R語言學習筆記——R語言面向對象編程系列2
大話設計模式之簡單工廠模式與策略模式
Python面向對象小總結
簡析面向切面編程AOP

TAG:面向對象編程 | 面向對象分析與設計 | UML建模 |