EA&UML日拱一卒--序列圖(Sequence Diagram)::交互和交互使用

畫序列圖就和寫作文一樣,經常會遇到一發而不可收的情況,結果就是得到一個巨大的時序圖。這種情況下,作者首先會因為完成了一件大工程而感到自豪,可是一旦他把完成的序列圖拿給別人看或者是需要維護的時候就開始意識到問題了,這樣的序列圖既難理解又難維護。

如果是寫代碼的話,可以通過定義函數和調用函數來解決這個問題,序列圖也提供了類似的手段:交互和交互使用。

交互(interaction)

交互描述了在一個上下文中為了執行一個任務,消息在角色之間是如何交換的。交互描述了行為的模式。

----UML參考手冊(第二版)

中文本身相信都能看懂,但想知道說什麼卻不是那麼容易。讓我們換一種說法。

定義一個函數除了需要函數體以外還需要函數聲明。函數聲明規定了調用函數是需要提供哪些信息,函數的返回值是什麼。交互的作用也一樣。

實例

下面以電車速度控制為例說明,首先看下面的序列圖。

電車司機設定加速度上下限,目標速度以後,調用startControlPattern啟動指定模式的速度控制,當目標達成或出現異常情況時,結束控制並反饋結束的原因。

這段時序圖描述了速度控制是如何進行的,但如果想被其他時序圖(嚴格講應該是交互圖)使用,還需要定義交互。這就像有了函數體,還需要函數聲明一樣。

定義交互

首先拖動工具箱中的【Interaction】圖標到時序中。

接下來在【Interation】屬性對話框中各個屬性頁輸入必要的信息。

【General】屬性頁

輸入交互名SpeedControl。

【Behavior】屬性頁

選擇返回值的類型為FinishReason(需要事先定義數據類型)。

【Parameters】屬性頁

定義max_acc,max_dec,speed一共3個參數。它們相當於函數的形參。

按下【確定】按鈕並調整interation框的大小後,序列圖就會變成下面這個樣子。

外層方框的左上角文字為【int SpeedControl(,,)】,其中的int不是表示整數,而是interation的縮寫。

交互使用

定義交互以後自然就是使用交互。

步驟

首 先將定義過Interaction的序列圖拖動到使用該交互的序列圖,這時會出現如下對話框,這裡選【Interaction Occurrence】。在UML中,交互發生(interaction occurrence)和交互使用(interaction use)的含義是一樣的。

設定方法

通過隨後出現的【Interaction Occurrence】對話框中的各個屬性頁來進行設定。

【General】屬性頁

指定調用上下文中的實際名稱。本例輸入ConstantSpeedControl。這個名稱相當於函數調用時的別名。

【Call】屬性頁

點 擊【Behavior】項目右側的【...】按鈕,選擇前面定義的SpeedControl交互以後,在【ReturnValue】項目中輸入 FinishReason,在AttributeName項目中輸入finish_reason。這個finish_reason相當於函數調用時用來接 受返回值的變數。

【Arguments】屬性頁

為Interation的每個參數指定調用上下文中的變數名。輸入的內容相當於定義函數調用時的實參。

按下【確定】按鈕以後,調用側的序列圖變成下面這樣。

圖中明確表明的實參,形參的對應關係,返回值賦值操作等信息。實參應該在使用該交互前指定,返回值可以在調用以後使用。這裡省略。

總結

交互和交互使用就是時序圖中的函數聲明和函數調用。

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

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

推薦閱讀:

ReadSelfAction和ReadStructuralFeatureAction
活動圖::Structural Feature Actions(續)
(翻譯)14.4 ProtocolStateMachines
OOD 高頻面試題 | 如何設計一個ATM
狀態圖::內部遷移

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