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日拱一卒--類圖::關聯(關聯,聚合,組合)