EA&UML日拱一卒--序列圖(Sequence Diagram)::連續

今天是時序圖的最後一個話題,連續(continuation)。在UML中是這樣定義連續的:

交互中的一個標籤,允許將條件拆分成兩個片段。而這兩個片段在語義上是連在一起的。

示例

這裡採用EA幫助系統中的例子,當然版權也屬於SparxSystems。首先是主流程。

eatab調用repos:File的reqConn方法,如果請求成功,則調用logConn後執行pathSucc連續標籤引導的部分,如果失敗,則執行pathFail連續標籤引導的部分。兩個標籤分別引導的處理被設計到了ConnHandler中。

pathSucc標籤接下來的處理是向estab返回connListen,而pathFail標籤接下來的處理是調用ReCt的trackFail方法跟蹤錯誤。

使用了連續標籤以後,使用者可以自由定義成功和失敗時的處理。

如果本文就這麼結束了,是不是覺得太簡單了?

之所以把本文拖到今天才寫是因為有一個疑問一直沒有解決:如果連續的效果僅限於此的話,完全可以通過保存reqConn的執行結果,然後再利用參數傳遞給ConnHandler的方式來實現,這樣只會更加清晰。

我們忽略了什麼呢?

還是用自創的例子來說明吧。這裡以某智能攝像頭為例。

基本流程如下:

5STimer每次發生Timeout以後會向SmartCamera發出通知,SmartCamera接到通知後拍攝照片,然後把拍攝的照片向雲端傳送。這裡為拍攝成功,拍攝失敗,傳送成功,傳送失敗分別準備了連續標籤以備其他處理使用。

下面是一種處理方式的例子:

這裡只是簡單地在拍照失敗,雲推送失敗時向MobilePhone報告錯誤信息。也可以定義其他的處理,例如雲推送失敗時本地保存等等。

在本例中,拍照/推送的處理處於無限循環的處理中,永遠(基本上)也等不到處理結束的時候。因此也就不存在返回值如何如何了。

總結

連續(continuation)更像條件分支中的回調函數。

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

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


推薦閱讀:

類圖::添加操作和方法
狀態圖::開篇
EA&UML日拱一卒--序列圖(Sequence Diagram)::時間約束
EA&UML日拱一卒--活動圖::活動分區

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