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的強大作用了。
一點感想
工作中實際用到這個功能,大概是快十年之前的事情了。今天能用序列圖以自己滿意的形式表達出來,那份成就感,滿足感不是一個理工男可以用語言來表達的,真希望閱讀本文的你也能夠體會到。
抄錄一首宋代陸九淵的【讀書】,與大家共勉。
讀書切戒太匆忙,
涵泳功夫興味長。
未曉不妨權放過,
切身需要急思量。
以上就是今天的文章,如果它能給您帶來些許收穫,歡迎點贊並推薦給朋友!
閱讀更多更新文章,請關注【面向對象思考】微信公眾號!
推薦閱讀:
※R語言學習筆記——R語言面向對象編程系列2
※大話設計模式之簡單工廠模式與策略模式
※Python面向對象小總結
※簡析面向切面編程AOP