EA&UML日拱一卒--活動圖::AcceptCallAction和ReplyAction

大多數情況下,開發者實現的功能都是被其他模塊調用的,如果是對C/C++理解地比較深的讀者,應該會知道參數和返回值的傳遞機制。

UML也提供了這方面的功能,這就是今天的話題:接受調用動作和應答動作。

接受調用動作(AcceptCallAction)

AcceptCallAction是一個接受事件的動作,該動作代表一個同步調用請求的接受。除了一般的參數以外,這個動作產生一個輸出,這個輸出為ReplyAction提供返回信息,以便把控制返還給調用者。

這個動作是用於同步調用的,如果它被用來處理一個非同步調用,則隨後的應答動作將會不起作用。

應答動作(ReplyAction)

ReplyAction是一個動作,接受一個返回值集合和一個從AcceptCallAction傳過來的返回信息。應答動作把上述信息返回給前面調用的調用者,完成整個調用的執行。

示例

我們還是以解一元二次方程為例說明,這次以更接近於實際開發的方式展現出來。

先看類圖

首先是Solution類,是一元二次方程的解,我們知道一元二次方程的解有三種情況:兩個解,一個解,無解。這裡用DoubleSolution,SingleSolution,NullSolution來表現。

接下來就是Calculator類,它有一個方法solveEquation。solveEquation的原型為:

Solution* solveEquation(double a, double b, double c);

這次就以solveEquation為例說明AcceptCallAction和ReplyAction的用法。

添加活動圖

右鍵點擊【Project Browser】中的Calculator節點打開上下文菜單,選擇【Add】-【Add Diagram...】以後選擇添加名為solveEquation的活動圖。

添加AcceptCallAction

從工具欄拖動Action圖標到活動圖並選擇AcceptCall以後,雙擊得到的AcceptCallAction圖形打開屬性對話框。

打開General屬性頁,修改名稱為solveEquationEntry。

打 開Tiggers屬性頁,Name欄中輸入solveEquation,選擇Type為Call。接下來點擊Specification欄右側的 【...】按鈕以後,在【Select Operation】對話框中選擇Calculator類的solveEquation方法以後按下【確定】按鈕。

按下下圖中【Save】按鈕以後,按下【確定】按鈕。

右鍵打開活動圖中的AcceptCallAction的上下文菜單,選擇【New Child Element】-【ActionPin】,增加a,b,c三個輸出引腳。

註:比較理想的狀態應該是選擇了Trigger以後自動生成a,b,c三個引腳,但是作者還沒有找到方法,所以先手動添加。請高手指導。

經過以上的操作,【Project Browser】中的AcceptCallAction節點變成下面這樣。

拖動returnInfomation引腳到活動圖中的AcceptCallAction,並調整引腳位置以後,活動圖中的AcceptCallAciton變成下面這樣。

a,b,c對應solveEquation的參數,returnInformation下一步轉送給ReplyAction。

添加ReplyAction

從工具欄拖動Action圖標到活動圖並選擇Reply以後,修改名稱為Solution。

右鍵單擊AcceptCallAction打開上下文菜單,選擇【New Child Element】-【ActionPin】,設定名稱為空,Type為Solution*。

從【Project Browser】中的ReplyAction節點拖動returnInfomation引腳到活動圖中的ReplyAction,並調整引腳位置以後,活動圖中的ReplyAciton變成下面這樣。

用法總結

補齊其他的處理以後,得到如下的活動圖·。

在這個例子中,solveEquationEntry動作代表一個同步調用請求的接受。除了一般的參數a,b,c以外,這個動作產生一個輸出returnInformation,這個輸出為ReplyAction提供返回信息,以便把控制返還給調用者。

ReplySolution動作接受返回值Solution*和從AcceptCallAction傳過來的returnInformation返回信息並把上述信息返回給前面調用的調用者,完成整個調用的執行。

關於示例

雖然作者多方努力,還是沒有找到有關於AcceptCallAction,ReplyAction的有意義的參考示例。這裡的例子可以說是作者根據自己的理解嘗試著畫出的。算是拋磚引玉吧。

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

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

推薦閱讀:

如何畫UML的時序圖?
如何反駁 UML 無用論?
業務實時監控的統一抽象
如何用面向對象設計一個程序,經典推薦?

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