摘要:提倡在對象技術中基于角色識別對象及其協調關系,然后展開到類模型、接口模型、實體模型,同時對角色模型的形式化定義和表示方法進行了系統地研究,并在此基礎上設計和實現了基于RML的可視化角色建模工具RModeler。RModeler目前完成了代碼實現和測試工作,并在實際開發中使用,運行良好。RModeler支持業務過程中采用RML語言的建模,具備將RML模型轉換為UML模型的功能,采用業界標準數據描述格式XMI來傳遞和共享建模信息。
關鍵詞:角色; 角色模型; 角色建模語言; 軟件工具; 擴展元數據交換
中圖分類號:TP311.0文獻標志碼:A
文章編號:1001-3695(2008)04-1257-04
Key words:role; role model; role modeling language(RMI); software tool; XMI (eXtensible metadata interchange)
OMG(object management group)提供的UML[1](unified modeling language)從標準化到產業化,已被國際軟件業界廣泛應用。UML雖然被廣泛使用,但正如美國學者F.Martin等人[2]所認為:UML在軟件設計和實現上是一個十分有效的方法和建模語言,而在軟件系統需求分析方面顯得十分軟弱。UML中的類建模是反映對象共有相似性的抽象機制,適用于軟件設計和實現階段,但對于概念建模的支持能力不足。
本文從軟件工程方法論研究出發,通過引入其他一些建模視點和手段如角色模型,來克服UML的概念建模缺陷。文中針對基于角色模型的建模,系統地研究了角色和角色模型,給出了角色模型的形式化定義;對角色模型的規格描述語言RML(role modeling language)進行了深入研究;在Eclipse平臺上設計并實現了支持角色建模的CASE工具,在實際開發中運行良好,已達到提高軟件開發效率和質量的目的。
1角色模型
1.1對象模型化的四個視點
構造對象模型必須根據使用者的立場和視點來認識對象。如圖1所示,可以將這些視點歸納為角色視點、類視點、接口視點、數據—實體視點四個方面[3]。
a)角色視點: 在對象系統中,對象間的協調行為是模型化首先要考慮的重要因素。在協調的對象模型中,一個對象所具有的角色必須與被協調對象的角色相匹配。因此,角色視點在面向對象模型中描述對象存在的理由,角色模型抽象地描述對象在系統協調行為中的作用。角色和類是兩個不同的概念,角色從概念上描述了類的行為,一個角色可以由多個類來實現,一個類也可以實現多個角色。
b)接口視點: 描述對象在外觀上的操作和行為的接口。
c)類視點: 描述對象如何抽象和實現。著重于對象的屬性和操作等結構規范的描述。
然而對于描述一種活動時,用類抽象存在以下問題:
(a)以共性為基礎將對象“分類”成類是一種有效的分解策略,因為這樣可以大大減少要描述的實體個數,然而對于一個活動來說,它總是通過對象的交互來完成的,所以活動是分布于參加活動的各個對象的。
(b)如果在協作中對象間交互方式是可變的,而交互方式的變化會引起對象狀態的變化,從而又引起對象間所提供的服務的變化,要刻畫這樣一種活動時便需要了解特定對象在活動中的狀態變化,以及消息發送和接收的順序。
(c)在容錯系統應用設計中需要考慮存在一個服務被多個冗余對象支持的可能性,所以在結構設計和描述活動時要合理使用類層次的抽象。
(d)數據—實體視點: 視對象為數據—實體,描述實體及其之間的關系。
基于角色識別對象及其協調關系,并展開到類模型、接口模型、實體模型,是本文提倡的對象模型化方法。對于標志、描述和應用像軟件模式這類可重用的軟件知識和經驗,這樣做是更加必要的。
1.2角色模型
OOram[4]方法中產生了一種新的抽象方法——角色建模(role modeling,RM)。用角色模型(role model)作為基本建模單元來描述一個通過要求服務和提供服務而相互作用的對象集合。
角色模型是一種全新的對象抽象機制;角色建模是一種基于角色抽象的面向對象建模方法。角色抽象不同于通常面向對象建模機制所支持的類抽象,它用一個角色刻畫一個特定的對象,角色具有可標志性和封裝性;角色模型包含了一系列角色的集合。角色模型刻畫對象交互作用的主題、對象間的關系、對象協作時向協作者傳送的消息以及模型信息的處理過程。
這種抽象機制有如下幾個特征:角色維持了對象的可標志性,角色模型刻畫了相互協作的對象結構,這樣的模型有利于研究系統的綜合行為;RM支持“分而視之”原則,而其綜合技術更使之具有強大的重用能力;角色的概念重視一個對象在系統內存在的理由、責任和位置,角色模型規定了對象的作用及其作用的協調關系,因此RM適用于系統的需求分析和概要設計;RM是在角色協作中對對象的語義進行描述,它提供了對對象的一種新的抽象機制,可以讓用戶成為信息系統的一個部分;RM與模式技術具有很好的一致性;RM中接口描述提供了RM抽象和類抽象的兼容。
UML[5]中對角色概念的支持表現在兩方面:UML中類間關系可以定義成每端添加一個所謂的角色名稱。通用UML機制可以添加其他規約,但現在還沒有提供具體的角色建模支持;UML提供Collaboration概念讓開發者描述對象為完成一個具體任務如何協作。Collaboration讓開發者指明結構而不是行為,它的表達能力與基本OOram的角色模型相當,但它缺乏如角色模型綜合等的高級特性。
1.3角色模型中的幾個基本概念
根據文獻[6]中對角色建模的幾個概念進行形式化定義:
1)角色的定義
角色是對象在相互協調的活動中所承擔責任和作用的抽象,可表示為 role={R,S,B}。其中:R表示角色名role name;S表示狀態屬性;B表示行為語義。
在概念建模初始階段,role可以只有role name。
2)角色模型的定義
〈role model name〉={〈role〉[+],…,〈role〉[+]}
每個role model在上一級模型范圍內具有惟一的名。除了名之外,role model可以有一個惟一的縮寫來簡化對名的引用。
3)角色模型中包含有限個數的角色
〈role name〉={〈role path〉,…,〈role path〉}
role的名在它所在的role model內惟一,而在不同role model中的role都是不同的role。無論名是否相同,在引用一個role時應指明它的名以及它定義所在的role model的名或縮寫。
4)角色的屬性通過一個role path集合來定義
role path=〈role name〉:{〈message〉,…,〈function〉,…}
role path的定義通過引用同一個role model中的其他role來實現,所以這里的〈role name〉不需要限定它所在的role mo-del名。Role path的兩端可以是同一個role,也就是self path,這種自交互(self-interaction)減少了對象對內部實現自我服務(self-service)的依賴。
5)角色模型用來描述不同的活動或一個活動在不同層面下的抽象
它關注的是對象之間的協作而不是單個對象,它的role描述了對象在活動中如何與其他對象交互和對象與該活動相關的屬性;而類是描述對象整個的生命周期,與對象所在的特定環境無關,它關注的是單個的對象以及對象在生命周期中所能參加的各種活動。
在RM中,不用手工定義和每個role對應的類,在role屬性的基礎上可以自動定義出一個類,它具有與這個role相同的函數和消息的參數等屬性:
〈class name〉=〈Role model name〉.〈role name〉
6)由RM技術產生的概念模型被稱為角色建模模型(role modeling model)或簡稱RM模型
RM模型由一系列的類、衍生類和role model組成:
〈model name〉={{〈class〉,…,〈class〉},{〈derived class〉,…,〈derived class〉},{〈role model〉,…,〈role model〉}}
2角色模型的表示
RM靜態結構圖的基本元素[7](圖2):a)角色對象用圓角矩形表示,角色用畫在圓角矩形上的黑點表示。如果角色只有一個,且角色名與角色對象名相同,則角色名可省略。b)角色間的協調關聯用直線表示,角色間的使用關系用帶箭頭的直線表示,角色間的繼承關系用帶黑箭頭的直線表示,角色間協調的多重關系用數字表示。圖2中所表示的是一個角色對象R1與一個或一個以上角色對象R2之間的協調關聯。c)角色約束的描述一般使用自然語言,隨著角色的細化,也可使用OMG/OCL [1]進行描述。用同樣的方法也可以描述RM中角色之間的約束關系。除靜態結構圖之外,角色模型還包括描述角色對象之間動態關系的行為協調圖等[6]。
RM受到越來越多的重視,歐美一些研究者如D.Richle和D.Notkin研究一種新的角色建模語言規格說明RML(role modeling language):在著眼于對象的角色之間關系的基礎上描述業務模型的一種語言,用類似于UML的圖來表達模型,適合于描述業務領域的分析模型。
3角色建模工具RM odeler的設計與實現
3.1RM-odeler支持RM-L子集
RModeler所支持的RML語言是RML vol.0.76[7]的一個子集。該子集針對本系統的應用領域即設計信息管理系統、銷售管理系統和物流管理系統,為簡單起見僅采用了role、association、aggregation、generalization、interaction、message和note等建模事物,而沒有定義package、 multi role-interface、implied role、role equivalent、association aggregation等概念,模型圖用靜態圖(也稱角色圖)和協作來表示。
3.1.1靜態圖中的記號設計
在這個RML實用版本中,靜態圖中的元素有:role、association、aggregation、generalization 和 note。其記號的實現分別如圖3所示。
1)RoleRole的構成要素包括名、類型、屬性和抽象行為。Role名不能省略,并在模型范圍內有惟一性檢查。
2)Association構成要素有兩端的角色名、關聯名和角色類型名。其中兩端角色名不能省。
3)Aggregation構成要素有兩端的角色名、集約名和角色類型名。其中兩端角色名不能省。
4)Generalization普化關系連接的兩端分別是sub role和super role。模型語法檢查中禁止繼承關系出現成環情況。
5)Note注釋是在Note記號內的正文,用于對模型加以說明。
3.1.2動態圖中的記號設計
動態圖中出現的記號有actor role、interaction、message和note,其記號的實現分別如圖4所示。
1)Actor role記號同靜態構造的role,用類型名actor(actor, ACTOR)表示。
2)Interaction協作中相互作用的角色間用直線表示其互動關系,運行同一個角色自身的interaction。
3)Message詳細表示相互作用的角色間的動作關系。
3.2主要功能設計
為方便用戶學習和實用,實現RML和UML在使用上的一致性,RModeler借鑒了最廣為接受的UML編程工具Rational Rose的設計風格,為用戶提供了建立RML模型的可視化環境。圖5是本文設計的RModeler工具做的一個簡單例子,它直觀地從使用角度來說,將該工具的功能分為菜單、樹和圖三部分。
RModeler的布局如圖5所示,窗口最上部是菜單,下面依次是工具按鈕、打開模型文件路徑顯示條、主處理窗口和狀態條。模型編輯器是RModeler的主要部分,分為左、右兩部分,左上為模型元素樹,左下為選中元素的屬性面板;右為角色模型編輯區,其上部狀態條可動態更新目前模型圖中的角色和關系數,下為較為豐富的編輯工具區(靜態和動態略有不同),同時在進行模型一致性檢查時還會拖拽出模型檢查結果窗口。
鑒于XML已經成為目前數據描述的事實標準,本工具的角色模型的UML變換操作是將當前的RML模型通過一定規則轉換成UML模型所對應的XMI格式文件。作為RML模型向UML模型轉換的結果,采用在筆者開源軟件Argouml[8]基礎上設計的建模軟件Modeler作為UML建模工具,在Modeler中導入此XMI文件。UML變換處理步驟如圖6所示。
本版本RModeler的集成功能提供了對Static EAI的第二種方式的支持。對角色的置換只提供了用戶將role的視圖手工拖拽到相應位置以實現視圖合二為一的功能。
動態圖中可選中interaction和message,并對message進行屬性編輯,如不同方向上消息的添加或刪除等。對interaction沒有屬性編輯,只有名字修改。
3.3軟件結構設計
3.3.1軟件模塊劃分
該項目從邏輯上被設計為RML工具、模型控制和模型管理。圖7表示了三個部分之間的關系。對UML的轉換和對UML工具的調用由模型控制部分實現;而對模型信息的存儲管理由模型管理部分完成。
3.3.2軟件詳細設計
根據以上的功能和模塊設計,RModeler在Eclipse 3.2平臺上開發了五十多個類進行軟件實現工作。
模型的一致性檢查對于正確建模十分重要,RModeler不僅在作圖時設定了一些限制條件,如普化關系不能存在自反等,而且設計有專門的模型檢查模塊,同時提供CheckInfoPanel來顯示模型檢查結果。圖8只是簡單表述了一致性檢查的主要過程,可以根據模型進一步建立的要求不斷擴充檢查項目和要求。
UML的XMI轉換前,模型首先通過一致性檢查;然后對模型信息進行平坦化操作,從平坦化模型中得到項目數組,根據項目數分別創建UML的包及其包中類結構(圖9)。XMI文件創建采用JDOM包,需注意JDOM的早期版本不支持Modeler所采用的“:”符號,所以需要另外加入文件中符號變換過程,使Modeler能正確識別。
每一項目中的變換過程是:首先創建UML包頭結構;其次對項目中每一角色進行轉換,同時處理角色所擁有的關聯關系、普化關系、集約關系轉換。轉換中需要注意:凡第一次出現某關系與非本項目角色相連,應加入此角色于本UML包中。
4結束語
本文介紹了在Eclipse平臺下角色模型支持工具RModeler的開發過程。通過軟件結構設計及詳細設計研究了RModeler的實現技術。
可視化建模工具RModeler具有如下特點:a)支持業務過程中采用RML語言的建模。b)設計風格與UML編輯工具Rational Rose的設計風格保持了較好的一致性,便于用戶的學習和使用。c)具備將RML模型轉換為UML模型的功能。d)角色建模工具RModeler與富士通的BO分析設計平臺[9]、RMLEditor[10]等相比,主要優點為:(a)采用Java語言編寫實現,而BO分析設計平臺、RMLEditor都用C++實現,因此RMode-ler的跨平臺能力強;(b)BO分析設計平臺、RMLEditor只是實現了基本的RML編輯功能,RModeler已經實現了靜態和動態協作圖建模功能以及角色集成、分解功能;(c)用戶界面友好;(d)UML轉換功能已經實現;(e)RModeler采用業界標準數據描述格式XMI來傳遞和共享建模信息,而BO分析設計平臺、RMLEditor無此功能。
RModeler目前完成了代碼實現和測試工作,并在實際開發中使用,運行良好。根據日本BO聯合系統開發中與RModeler功能類似的“BO分析設計平臺”所承擔的重要性來看,其應用前景是廣闊的,
但角色建模工具RModeler還需進一步完善。目前的功能還不完整,需要考慮RML模型分解操作、模型內修改等功能;分析到設計的規約轉換還較為單一,應加上對角色模式的支持等。
參考文獻:
[1]OMG.Unified modeling language v1.4 specification (draft)[S]. 1999.
[2]FOWLER M. Analysis patterns and business object[C]//Proc of OOPLSA’96.1996.
[3]REENSKAUG T. UML collaboration and OOram semantics new version of a green paper[M].1999.
[4]REENSKAUG, WOLD, LEHNE. Working with objects: the OOram software engineering method[M].[S.l.]:Prentice Hall,1996.
[5] Rational Software Corporation. UML v1.1 semantics[R]. 1997.
[6]ANDERSEN E P. Conceptual modeling of objects: a role modeling approach[D]. Dr Scient Thesis. Dept of Informatics, University of Oslo,1997.
[7]HE Ke-qing. RML (role modeling language) specification[R].version 0.76. Fujitsu Limited:[s.n.],2000.
[8]ArgoUML[EB/OL]. http://argouml.tigris.org
[9]LIMITED F. Genesis development corporation. UML profile for enterprise distributed object computing, OMG Document ad/99-10-08[R].version l.0. 1999.
[10]文斌,劉長青,毛曉光. 基于角色模型的從分析到設計的規約結構[J].計算機應用研究,2005,22(1):207-210.
“本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文”