EA &UML日拱一卒-活動(dòng)圖::AcceptCallAction和ReplyAction
大多數(shù)情況下,開發(fā)者實(shí)現(xiàn)的功能都是被其他模塊調(diào)用的,如果是對(duì)C/C++理解地比較深的讀者,應(yīng)該會(huì)知道參數(shù)和返回值的傳遞機(jī)制。
UML也提供了這方面的功能,這就是今天的話題:接受調(diào)用動(dòng)作和應(yīng)答動(dòng)作。
接受調(diào)用動(dòng)作(AcceptCallAction)
AcceptCallAction是一個(gè)接受事件的動(dòng)作,該動(dòng)作代表一個(gè)同步調(diào)用請(qǐng)求的接受。除了一般的參數(shù)以外,這個(gè)動(dòng)作產(chǎn)生一個(gè)輸出,這個(gè)輸出為ReplyAction提供返回信息,以便把控制返還給調(diào)用者。
這個(gè)動(dòng)作是用于同步調(diào)用的,如果它被用來(lái)處理一個(gè)異步調(diào)用,則隨后的應(yīng)答動(dòng)作將會(huì)不起作用。
應(yīng)答動(dòng)作(ReplyAction)
ReplyAction是一個(gè)動(dòng)作,接受一個(gè)返回值集合和一個(gè)從AcceptCallAction傳過(guò)來(lái)的返回信息。應(yīng)答動(dòng)作把上述信息返回給前面調(diào)用的調(diào)用者,完成整個(gè)調(diào)用的執(zhí)行。
示例
我們還是以解一元二次方程為例說(shuō)明,這次以更接近于實(shí)際開發(fā)的方式展現(xiàn)出來(lái)。
先看類圖
首先是Solution類,是一元二次方程的解,我們知道一元二次方程的解有三種情況:兩個(gè)解,一個(gè)解,無(wú)解。這里用DoubleSolution,SingleSolution,NullSolution來(lái)表現(xiàn)。
接下來(lái)就是Calculator類,它有一個(gè)方法solveEquation。solveEquation的原型為:
Solution* solveEquation(double a, double b, double c);
這次就以solveEquation為例說(shuō)明AcceptCallAction和ReplyAction的用法。
添加活動(dòng)圖
右鍵點(diǎn)擊【Project Browser】中的Calculator節(jié)點(diǎn)打開上下文菜單,選擇【Add】-【Add Diagram...】以后選擇添加名為solveEquation的活動(dòng)圖。
添加AcceptCallAction
從工具欄拖動(dòng)Action圖標(biāo)到活動(dòng)圖并選擇AcceptCall以后,雙擊得到的AcceptCallAction圖形打開屬性對(duì)話框。
打開General屬性頁(yè),修改名稱為solveEquationEntry。
打 開Tiggers屬性頁(yè),Name欄中輸入solveEquation,選擇Type為Call。接下來(lái)點(diǎn)擊Specification欄右側(cè)的 【...】按鈕以后,在【Select Operation】對(duì)話框中選擇Calculator類的solveEquation方法以后按下【確定】按鈕。
按下下圖中【Save】按鈕以后,按下【確定】按鈕。
右鍵打開活動(dòng)圖中的AcceptCallAction的上下文菜單,選擇【New Child Element】-【ActionPin】,增加a,b,c三個(gè)輸出引腳。
注:比較理想的狀態(tài)應(yīng)該是選擇了Trigger以后自動(dòng)生成a,b,c三個(gè)引腳,但是作者還沒(méi)有找到方法,所以先手動(dòng)添加。請(qǐng)高手指導(dǎo)。
經(jīng)過(guò)以上的操作,【Project Browser】中的AcceptCallAction節(jié)點(diǎn)變成下面這樣。
拖動(dòng)returnInfomation引腳到活動(dòng)圖中的AcceptCallAction,并調(diào)整引腳位置以后,活動(dòng)圖中的AcceptCallAciton變成下面這樣。
a,b,c對(duì)應(yīng)solveEquation的參數(shù),returnInformation下一步轉(zhuǎn)送給ReplyAction。
添加ReplyAction
從工具欄拖動(dòng)Action圖標(biāo)到活動(dòng)圖并選擇Reply以后,修改名稱為Solution。
右鍵單擊AcceptCallAction打開上下文菜單,選擇【New Child Element】-【ActionPin】,設(shè)定名稱為空,Type為Solution*。
從【Project Browser】中的ReplyAction節(jié)點(diǎn)拖動(dòng)returnInfomation引腳到活動(dòng)圖中的ReplyAction,并調(diào)整引腳位置以后,活動(dòng)圖中的ReplyAciton變成下面這樣。
用法總結(jié)
補(bǔ)齊其他的處理以后,得到如下的活動(dòng)圖·。
在這個(gè)例子中,solveEquationEntry動(dòng)作代表一個(gè)同步調(diào)用請(qǐng)求的接受。除了一般的參數(shù)a,b,c以外,這個(gè)動(dòng)作產(chǎn)生一個(gè)輸出returnInformation,這個(gè)輸出為ReplyAction提供返回信息,以便把控制返還給調(diào)用者。
ReplySolution動(dòng)作接受返回值Solution*和從AcceptCallAction傳過(guò)來(lái)的returnInformation返回信息并把上述信息返回給前面調(diào)用的調(diào)用者,完成整個(gè)調(diào)用的執(zhí)行。
關(guān)于示例
雖然作者多方努力,還是沒(méi)有找到有關(guān)于AcceptCallAction,ReplyAction的有意義的參考示例。這里的例子可以說(shuō)是作者根據(jù)自己的理解嘗試著畫出的。算是拋磚引玉吧。