EA&UML日拱一卒--序列圖(Sequence Diagram)::同步/非同步

上一篇文章講到,消息是從一個對象的生命線指向另一個對象的生命線的實線箭頭。

聽起來好像很簡單,但如果打開了消息的屬性對話框,就會知道根本就不是那麼回事,對話框的內容很多,我們首先關注下圖紅圈中的內容。

同步調用

Synch項目選中【Synchronous】以後,Kind項目就固定為【Call】,這時消息就被指定為同步調用方式。具體看下面的例子:

同 步調用消息表示為封閉填充實線箭頭,它的含義為SynchronousClient調用SynchronousServer的sendMessage方 法,sendMessage調用內部處理以後,將結果返回給SynchronousClient。同步調用說起來高大上,實際就是最常見的函數調用。

上圖虛線分叉箭頭表示返回值,它的設定方法很簡單,只要選中消息屬性對話框藍圈中的【Is Ret...】項目即可。

非同步調用

Synch項目選中【Asynchronous】,Kind項目選中【Call】以後,被選中的消息就被指定為非同步調用方式。具體看下面的例子:

異 步調用消息表示為分叉實線箭頭,它的含義是AsynchronousClient調用AsynchronousServer的postMessage方法 時,不等待對應處理結束就直接返回,而對應處理由另外的控制流啟動,任務完成後再將結果以非同步方式通知給AsynchronousClient。非同步調用 的執行說明雖然是連續的,但那只是語義上的連續。

非同步信號

Synch項目選中【Asynchronous】,Kind項目選中【Signal】以後,被選中

的消息就被指定為非同步信號方式。具體看下面的例子:

異 步信號消息和非同步調用消息一樣,表示為分叉實線箭頭,它表明:上圖中SignalActivation並不是SignalServer的方 法,SignalClient在SignalActivation中做的就是激活信號,並不會關注有誰在等待信號,也不會關注處理是否結束。 SignalServer等待信號被激活後執行相應的處理,但並不知道是由誰來激活的。生命線上的執行說明雖然是連續的,但那只是語義上的連續。消息的指 向也是語義上的指向。從類參照的觀點來看,雙方都不需要意識對方的存在。

當SignalServer的處理結束後,往往是激活另外一個信號來報告處理結束,此處省略。信號的實現可能是Event,也可能是Mutex或Semaphore等。

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

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


推薦閱讀:

狀態圖::狀態機
EA&UML日拱一卒--活動圖::AcceptCallAction和ReplyAction
(翻譯)14.2.3.4 States(狀態)(3)
在軟體開發過程中,有哪些UML圖是比較常用的?
EA&UML日拱一卒--類圖::關聯(關聯,聚合,組合)

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