在
前面的文章中,我們從Rational Rose開始,啟動(dòng)并建立了一個(gè)類圖。今天我們的任務(wù)就是要通過(guò)BankAPP實(shí)例來(lái)了解如何用Rose構(gòu)造業(yè)務(wù)模型。
業(yè)務(wù)企業(yè)模型
業(yè)務(wù)前景,目標(biāo),組織-分別提供
業(yè)務(wù)事件[UML信號(hào)事件-指定的激勵(lì)表格或文檔]和過(guò)程(UML 用例)
過(guò)程名 參與者 事件/輸入 轉(zhuǎn)換 事件/輸出 約束 描述 引用 聯(lián)系點(diǎn)
WithdrawFromAccount Customer,Teller,BankDB WithdrawRequest UpdateAccount WithdrawRecord
[譯注:Customer:客戶;Teller:出納員 ;withdraw:取款;account:賬戶;BankDB:銀行數(shù)據(jù)庫(kù)]
Business Actors, Business Workers,業(yè)務(wù)實(shí)體(問(wèn)題域?qū)嶓w)
業(yè)務(wù)參與者(UML 參與者) 業(yè)務(wù)員(UML 參與者) 業(yè)務(wù)實(shí)體(UML 類)
Customer Teller Account,SavingsAccount,CheckingAccount
[譯注:saving:儲(chǔ)蓄;checking:支票]
業(yè)務(wù)規(guī)則目錄
規(guī)則標(biāo)識(shí)符 參與者,實(shí)體,過(guò)程 描述:IF條件..then 動(dòng)作 區(qū)域 引用 聯(lián)系點(diǎn)(Point of Contact)
ValidAccount Account If AccountNum 有效,then Acccount 有效
業(yè)務(wù)接口(指定操作集)-由架構(gòu)師提供
業(yè)務(wù)模式目錄-參見《Business Modeling with UML》(Eriksson 和Penker 著)。
業(yè)務(wù)術(shù)語(yǔ)-待完備
業(yè)務(wù)系統(tǒng)體系結(jié)構(gòu)-由架構(gòu)師提供
需求模型
需求:BankApp應(yīng)該管理支票和存款賬戶的存款和取款。將來(lái)(還要提供)查詢,轉(zhuǎn)賬,透支,等等從TellerGUI 到BankApp的輸入/輸出: sAcctNum, nDeposit, nWithdraw,sText。從BankApp 到BankDB的輸入/輸出: sAcctNum, nDeposit, nWithdraw.
需求可追蹤性表:需求號(hào),名稱,引用,用例名,UML元素,測(cè)試用例,描述,職責(zé)。
需求可追蹤性表(部分)
需求編號(hào) 需求名 引用 用例名 UML元素 測(cè)試實(shí)例 描述 職責(zé)
1.1 DepositToSavingsAccount DepositToSavingsAccount BankPkg
1.2 DepositToCheckingAccount DepositToCheckingAccount BankPkg
1.3 WithdrawFromSavingAccount WithdrawFromSavingAccount BankPkg
1.4 WithdrawFromCheckingAccount WithdrawFromCheckingAccount BankPkg
需求-用例圖-所有用例
Rose用例圖:在瀏覽器窗口,選擇Use Case View;Main Use CaseDiagram;在圖上放置參與者,用例,關(guān)系[Rose單向關(guān)聯(lián)(Unidirectional Association)],泛化;選擇每一個(gè)參與者-單擊鼠標(biāo)右鍵鍵入?yún)⑴c者的操作;選擇Tools-Check Model;選擇File-Save.
需求-高級(jí)別協(xié)作圖[環(huán)境圖(Context Diagram)]
Rose高級(jí)別協(xié)作圖:在瀏覽器窗口,選擇Use Case View;選擇Browse-Interaction Diagram(交互圖)-Use Case View- ;選擇Collaboration Diagram;鍵入圖名;在圖上放置對(duì)象表示參與者;雙擊每個(gè)對(duì)象,然后從下拉列表中選擇參與者名;在圖的中央放置一個(gè)對(duì)象以表示系統(tǒng);雙擊對(duì)象,鍵入系統(tǒng)名;選擇Rose Object Link (對(duì)象連接符)并且在參與者和系統(tǒng)之間拖曳;選擇Rose 文本框TextBox"ABC" ,鍵入傳遞的對(duì)象/數(shù)據(jù);選擇Tools-Check Model;選擇File-Save。
需求-用例增量
增量1:支票和儲(chǔ)蓄賬戶的存款和取款
增量2:查詢和轉(zhuǎn)賬
增量3:透支
每個(gè)增量?jī)?nèi)進(jìn)行迭代:樂觀的,正常的,悲觀的
需求用例規(guī)約:名稱,觸發(fā)器,輸入?yún)?shù),輸出返回值,出現(xiàn)的前置條件/異常,出現(xiàn)的(raised)后置條件/異常,基本的/樂觀場(chǎng)景,替代性可選的/悲觀的場(chǎng)景,業(yè)務(wù)規(guī)則,測(cè)試實(shí)例。
WithdrawFromCheckingAccount用例的用例規(guī)約
用例名:WithdrawFromCheckingAccount
觸發(fā)器: WithdrawFromCheckingAccount
輸入?yún)?shù): sAcctNum, nWithdraw
輸出返回值: sText
前置條件: ValidAccount = true and nWithdraw <= nCurrentBalance
出現(xiàn)的前置條件異常: 待定的
描述/轉(zhuǎn)換: nCurrentBalance = nCurrentBalance - nWithdraw
后置條件: nCurrentBalance < nOldBalance
后置條件異常:無(wú)
相關(guān)用例: Generalization, Includes, Extends/Extension Point: 無(wú)
基本場(chǎng)景/樂觀場(chǎng)景: Text(文本) - 待定;Diagram(圖) -見 WithdrawFromCheckingAccount樂觀場(chǎng)景順序圖
替代性可選場(chǎng)景/被動(dòng)場(chǎng)景:Text -待定;Diagram -見WithdrawFromCheckingAccount 活動(dòng)圖
業(yè)務(wù)規(guī)則: ValidAccountRule, AdequateBalanceRule
測(cè)試實(shí)例:1 - 樂觀的:輸入: sAcctNum - BGates001, nWithdraw - 100, nCurrentBalance - 1000 Conditions: None, 輸出:"BGates001 withdraw $100 OK and recorded";2 ...待定
輸入/輸出表單:
WithdrawFromCheckingAccount用例的輸入/輸出表單
Withdraw Request Form(取款需求表單)
Customer Account Number(客戶賬號(hào))__________
Withdraw Amount(取款數(shù)量) ________
Button-Submit(提交按鈕) Button-Clear(清除按鈕)
Withdraw Response Form(取款響應(yīng)窗體)
Customer Account Number __________
Withdraw Amount __________
Status (狀態(tài)) ________________________
Button-OK(OK 按鈕)
需求-順序圖WithdrawFromCheckingAccount - 樂觀場(chǎng)景
注:getApp的第一筆事務(wù)需要達(dá)到應(yīng)用程序的最高級(jí)別
Rose 順序圖:在瀏覽器窗口,選擇Use Case View;選擇 Use Case Diagram;選擇一個(gè)用例;選擇Browse-Interaction Diagram-Use Case View- ;選擇Sequence Diagram;鍵入圖名,例如WithdrawFromCheckingAccount-OptiminticScenario;在圖上放置對(duì)象以表示參與者;雙擊每個(gè)對(duì)象,然后從下拉列表中選擇參與者名;
在圖的中央放置一個(gè)對(duì)象以表示系統(tǒng);雙擊對(duì)象,從下拉列表中鍵入系統(tǒng)名;選擇Rose Object Link (對(duì)象連接符),在參與者和系統(tǒng)之間拖曳;選擇Tools-Check Model;選擇File-Save .
4-WithdrawFromCheckingAccount用例-所有場(chǎng)景的需求活動(dòng)圖
注:getApp的第一筆事務(wù)需要達(dá)到應(yīng)用程序的最高級(jí)別
Rose狀態(tài)-活動(dòng)圖: 在瀏覽器窗口,選擇Use Case View;
選擇Use Case Diagram 顯示圖;
選擇一個(gè)用例;選擇Browse - State Diagram;
如果"State Diagram" 是灰色,則返回到用例圖并重新選擇一個(gè)用例;
在圖上放置活動(dòng)狀態(tài)(activity states);通過(guò)在兩個(gè)狀態(tài)之間拖曳,放置轉(zhuǎn)移;
選擇Tools-Check Model;
選擇File-Save 。
需求-產(chǎn)品性能:高可靠性,10個(gè)并發(fā)的用戶,2秒響應(yīng)時(shí)間。
需求/分析-高階概念模型(HOCM--High Order Concept Model)
外部參與者:TellerGUI,BankDB.內(nèi)部實(shí)體(Internal Entities): BankApp, Account, CheckingAccount, SavingsAccount
Rose高級(jí)別概念模型圖: 推薦使用鉛筆和紙做HOCM。作為替代,創(chuàng)建不含屬性和操作的Rose類圖。
分析模型-草圖
分析類圖 - 最簡(jiǎn)結(jié)構(gòu)
Rose類圖: 見〈使用Rational Rose〉
分析包圖
Rose包圖:在瀏覽器窗口選擇Logical View;選擇Browse-Class Diagram-Logical View- 。輸入包圖名;在圖上放置包;從工具條中選擇依賴箭頭然后從源包到目的包拖曳,放置依賴關(guān)系。在瀏覽器中,拖動(dòng)每個(gè)類到適當(dāng)?shù)陌?;選擇Tools-Check Model;選擇File-Save。
分析 WithdrawFromCheckingAccount順序圖-樂觀場(chǎng)景
注:getApp的第一筆事務(wù)需要達(dá)到應(yīng)用程序的最高級(jí)別
Rose順序圖:見〈使用Rational Rose〉
8- 分析Account類的狀態(tài)圖
Rose 狀態(tài)-活動(dòng)圖:在瀏覽器窗口,選擇Use Case View;選擇Use Case Diagram 顯示;選擇一個(gè)用例;選擇Browse - State Diagram;如果 "State Diagram" 是灰色,則返回到用例圖并重新選擇一個(gè)用例;在圖上放置活動(dòng)狀態(tài)(activity states);通過(guò)在兩個(gè)狀態(tài)之間拖曳,放置轉(zhuǎn)移;選擇Tools-Check Model;選擇File-Save .
分析-復(fù)雜操作:待定的-每一個(gè)操作的活動(dòng)圖 和/或操作規(guī)約:名稱,輸入,前置條件/異常,轉(zhuǎn)換,后置條件/異常,業(yè)務(wù)規(guī)則,描述。
Rose規(guī)約: 顯示類圖;選擇一個(gè)類;按鼠標(biāo)右鍵顯示Specification Dialog Box;選擇一個(gè)標(biāo)簽,例如Operations;雙擊一個(gè)操作;填寫操作信息;選擇 Tools - Check Model;選擇File - Save.
設(shè)計(jì)模型 - 編碼的基礎(chǔ)
設(shè)計(jì)過(guò)程環(huán)境:Linux 6.2版, GNU C++ 6.2版, C++ 標(biāo)準(zhǔn)庫(kù),CORBA 3。
設(shè)計(jì)潛在模式
企業(yè)級(jí):基于分布式CORBA,具有公共接口的組件
系統(tǒng)(組件到組件):分層,會(huì)話-實(shí)體(Session - Entity),回調(diào)(Callbacks),發(fā)行者-訂閱者(Publisher - Subscriber)
組件:應(yīng)用-文檔,控制器-實(shí)體-邊界,虛包(Facade)
類設(shè)計(jì):UML, Factory(工廠),事務(wù)
JAVA 語(yǔ)言:Java Bean, Enterprise Java Bean, Servlet, RMI
設(shè)計(jì)包圖
設(shè)計(jì)類圖 說(shuō)明類型和參數(shù)-目標(biāo)是完成編碼
注:CheckingAccount和SavingsAccount 提供多態(tài)操作的實(shí)現(xiàn)。
設(shè)計(jì)順序圖WithdrawFromCheckingAccount - 樂觀場(chǎng)景
注:getApp的第一筆事務(wù)需要達(dá)到應(yīng)用程序的最高級(jí)別
設(shè)計(jì)協(xié)作圖WithdrawFromCheckingAccount - 樂觀場(chǎng)景
在Rational Rose中打開順序圖,按F5 自動(dòng)創(chuàng)建協(xié)作圖。
設(shè)計(jì)CheckingAccount類withdraw()操作的操作規(guī)約
用例名: withdraw
觸發(fā):withdraw
輸入?yún)?shù): nWithdraw : int
輸出返回值: boolean
前置條件: nWithdraw <= nCurrentBalance
出現(xiàn)的前置條件/異常: exInsuffientFunds
描述/轉(zhuǎn)換: nCurrentBalance = nCurrentBalance - nWithdraw
后置條件: nCurrentBalance < priorCurrentBalance
后置條件異常: exIncorrectBalance
基本/樂觀場(chǎng)景 :見WithdrawFromCheckingAccount 順序圖
替代性場(chǎng)景/悲觀場(chǎng)景:見WithdrawFromCheckingAccount 活動(dòng)圖
業(yè)務(wù)規(guī)則:ValidAccountRule, AdequateBalanceRule
設(shè)計(jì)異常類(exception classes)異常超類(操作:Exception()/Exception(string);異常子類:exInsufiicientFunds [操作 :exInsufiicientFunds()、exInsufiicientFunds(string)];exIncorrectBalance[操作:exIncorrectBalance()、exIncorrectBalance(string)]。
設(shè)計(jì) CheckingAccount 類的狀態(tài)圖
實(shí)施模型(Implementation Models)
實(shí)施模型
設(shè)計(jì)過(guò)程環(huán)境
實(shí)施組件圖
實(shí)施文件(Implementation Files): TellerGUI.exe, BankApp.exe, BankDB.exe
組件接口選擇:
1) BankApp具有單接口 IbankApp,其所有操作都是公有的(exposed)
2) BankApp暴露(exposes) IBankApp, ICheckingAccount, & ISavingAccount 接口
3) BankApp暴露(exposes) IBankApp, IWithdraw, IDeposit, ICheckingAccount, & ISavingAccount 接口
CORBA IDL/C++ 需要對(duì)接口進(jìn)行描述
Rose 組件圖:在瀏覽器窗口,選擇Component View;,將"Main"重命名為"Component View";雙擊圖名顯示該圖;在圖上放置組件和依賴關(guān)系(從client組件到supplier組件拖曳);在瀏覽器中把每個(gè)類拖到相應(yīng)的組件中;選擇Tools-Check Model;選擇File-Save.
實(shí)施部署圖
Rose 部署圖:在瀏覽器窗口選擇Deployment View;雙擊以顯示該圖;在圖上放置節(jié)點(diǎn)和關(guān)系;選擇Tools-Check Model;選擇File-Save.
//使用CORBA的 BankApp系統(tǒng)的接口

//Sample IDL Interface Code(IDL 接口代碼樣本) module BankApp { interface IBankApp { exception exInsuffientFunds; IBankApp getApp(); boolean depositToCheckingAccount (in string sAcctNum, in int nDeposit) ; boolean depositToSavingAccount (in string sAcctNum, in int nDeposit) ; boolean withdrawFromCheckingAccount (in string sAcctNum, in int nWithdraw)raises (exInsuffientFunds); boolean withdrawFromSavingAccount (in string sAcctNum, in int nWithdraw) raises (exInsuffientFunds); };}; //Sample Java Interface Code Using Remote Method Invocation //(使用RMI 的Java接口樣本) import java.rmi.*; package BankApp; public interface IBankApp extends java.rmi.Remote { boolean depositToCheckingAccount (String sAcctNum, int nDeposit) throws java.rmi.RemoteException ; boolean depositToSavingAccount (String sAcctNum, int nDeposit) throws java.rmi.RemoteException ; boolean withdrawFromCheckingAccount (String sAcctNum, int nWithdraw) throws java.rmi.RemoteException; boolean withdrawFromSavingAccount (String sAcctNum, int nWithdraw) throws java.rmi.RemoteException; } //Sample Microsoft IDL Interface Code for COM - Simplified //(Microsoft IDL 的COM接口編碼樣本-簡(jiǎn)化版) library BankAppLib { dispinterface IBankApp { IBankApp getApp(); boolean depositToCheckingAccount (BSTR sAcctNum, int nDeposit) ; boolean depositToSavingAccount (BSTR sAcctNum, int nDeposit) ; boolean withdrawFromCheckingAccount (BSTR sAcctNum, int nWithdraw); boolean withdrawFromSavingAccount (BSTR sAcctNum, int nWithdraw); }; coclass BankApp { dispinterface IBankApp; }; }; //Sample SOAP (Simple Object Access Protocol) SDL (Service Description Language) with XML -Incomplete //包含XML 的SOAP SDL樣本-不完全 <?xml version=‘1.0‘?> <serviceDescription name=‘BankApp‘ xmlns=‘urn:schemas-xmlsoap-org:sdl.2000-01-25‘ xmlns:dt=‘http://www.w3.org/1999/XMLSchema‘ xmlns:IBankApp=‘IBankApp‘> <import namespace=‘IBankApp‘ location=‘#IBankApp‘/> <soap xmlns=‘urn:schemas-xmlsoap-org:soap-sdl-2000-01-25‘> <interface name=‘IBankApp‘> <requestResponse name=‘WithdrawFromCheckingAccount‘> <request ref=‘IBankApp:WithdrawFromCheckingAccount‘/> <response ref=‘IBankApp:WithdrawFromCheckingAccountResponse‘/> </requestResponse> </interface> <service> <addresses> <address uri=‘http://myserver/IBankApp.asp‘/> </addresses> <implements name=‘IBankApp‘/> </service> </soap> <IBankApp:schema id=‘IBankApp‘ targetNamespace=‘IBankApp‘ xmlns=‘http://www.w3.org/1999/XMLSchema‘> <element name=‘WithdrawFromCheckingAccount‘> </element> <element name=‘WithdrawFromCheckingAccountResponse‘> <type> <element name=‘return‘ type=‘dt:boolean‘/> </type> </element> </IBankApp:schema> </serviceDescription>
構(gòu)建
編碼/命名標(biāo)準(zhǔn);接口代碼-CORBA IDL;C++代碼;CASE 工具腳本/定制報(bào)告的VBA /代碼生成
Rose代碼生成-需要Rose 專業(yè)版或企業(yè)版. 見Help Topic Code Generation(幫助主題-Code Generation)。
步驟:
1 - 檢查模型;
2 - 創(chuàng)建組件;
3 - 映射/分配類到組件;
4 - 設(shè)定代碼生成特性;
5 - 選擇一%A