摘要:提倡在對(duì)象技術(shù)中基于角色識(shí)別對(duì)象及其協(xié)調(diào)關(guān)系,然后展開到類模型、接口模型、實(shí)體模型,同時(shí)對(duì)角色模型的形式化定義和表示方法進(jìn)行了系統(tǒng)地研究,并在此基礎(chǔ)上設(shè)計(jì)和實(shí)現(xiàn)了基于RML的可視化角色建模工具RModeler。RModeler目前完成了代碼實(shí)現(xiàn)和測(cè)試工作,并在實(shí)際開發(fā)中使用,運(yùn)行良好。RModeler支持業(yè)務(wù)過程中采用RML語言的建模,具備將RML模型轉(zhuǎn)換為UML模型的功能,采用業(yè)界標(biāo)準(zhǔn)數(shù)據(jù)描述格式XMI來傳遞和共享建模信息。
關(guān)鍵詞:角色; 角色模型; 角色建模語言; 軟件工具; 擴(kuò)展元數(shù)據(jù)交換
中圖分類號(hào):TP311.0文獻(xiàn)標(biāo)志碼:A
文章編號(hào):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)從標(biāo)準(zhǔn)化到產(chǎn)業(yè)化,已被國際軟件業(yè)界廣泛應(yīng)用。UML雖然被廣泛使用,但正如美國學(xué)者F.Martin等人[2]所認(rèn)為:UML在軟件設(shè)計(jì)和實(shí)現(xiàn)上是一個(gè)十分有效的方法和建模語言,而在軟件系統(tǒng)需求分析方面顯得十分軟弱。UML中的類建模是反映對(duì)象共有相似性的抽象機(jī)制,適用于軟件設(shè)計(jì)和實(shí)現(xiàn)階段,但對(duì)于概念建模的支持能力不足。
本文從軟件工程方法論研究出發(fā),通過引入其他一些建模視點(diǎn)和手段如角色模型,來克服UML的概念建模缺陷。文中針對(duì)基于角色模型的建模,系統(tǒng)地研究了角色和角色模型,給出了角色模型的形式化定義;對(duì)角色模型的規(guī)格描述語言RML(role modeling language)進(jìn)行了深入研究;在Eclipse平臺(tái)上設(shè)計(jì)并實(shí)現(xiàn)了支持角色建模的CASE工具,在實(shí)際開發(fā)中運(yùn)行良好,已達(dá)到提高軟件開發(fā)效率和質(zhì)量的目的。
1角色模型
1.1對(duì)象模型化的四個(gè)視點(diǎn)
構(gòu)造對(duì)象模型必須根據(jù)使用者的立場(chǎng)和視點(diǎn)來認(rèn)識(shí)對(duì)象。如圖1所示,可以將這些視點(diǎn)歸納為角色視點(diǎn)、類視點(diǎn)、接口視點(diǎn)、數(shù)據(jù)—實(shí)體視點(diǎn)四個(gè)方面[3]。
a)角色視點(diǎn): 在對(duì)象系統(tǒng)中,對(duì)象間的協(xié)調(diào)行為是模型化首先要考慮的重要因素。在協(xié)調(diào)的對(duì)象模型中,一個(gè)對(duì)象所具有的角色必須與被協(xié)調(diào)對(duì)象的角色相匹配。因此,角色視點(diǎn)在面向?qū)ο竽P椭忻枋鰧?duì)象存在的理由,角色模型抽象地描述對(duì)象在系統(tǒng)協(xié)調(diào)行為中的作用。角色和類是兩個(gè)不同的概念,角色從概念上描述了類的行為,一個(gè)角色可以由多個(gè)類來實(shí)現(xiàn),一個(gè)類也可以實(shí)現(xiàn)多個(gè)角色。
b)接口視點(diǎn): 描述對(duì)象在外觀上的操作和行為的接口。
c)類視點(diǎn): 描述對(duì)象如何抽象和實(shí)現(xiàn)。著重于對(duì)象的屬性和操作等結(jié)構(gòu)規(guī)范的描述。
然而對(duì)于描述一種活動(dòng)時(shí),用類抽象存在以下問題:
(a)以共性為基礎(chǔ)將對(duì)象“分類”成類是一種有效的分解策略,因?yàn)檫@樣可以大大減少要描述的實(shí)體個(gè)數(shù),然而對(duì)于一個(gè)活動(dòng)來說,它總是通過對(duì)象的交互來完成的,所以活動(dòng)是分布于參加活動(dòng)的各個(gè)對(duì)象的。
(b)如果在協(xié)作中對(duì)象間交互方式是可變的,而交互方式的變化會(huì)引起對(duì)象狀態(tài)的變化,從而又引起對(duì)象間所提供的服務(wù)的變化,要刻畫這樣一種活動(dòng)時(shí)便需要了解特定對(duì)象在活動(dòng)中的狀態(tài)變化,以及消息發(fā)送和接收的順序。
(c)在容錯(cuò)系統(tǒng)應(yīng)用設(shè)計(jì)中需要考慮存在一個(gè)服務(wù)被多個(gè)冗余對(duì)象支持的可能性,所以在結(jié)構(gòu)設(shè)計(jì)和描述活動(dòng)時(shí)要合理使用類層次的抽象。
(d)數(shù)據(jù)—實(shí)體視點(diǎn): 視對(duì)象為數(shù)據(jù)—實(shí)體,描述實(shí)體及其之間的關(guān)系。
基于角色識(shí)別對(duì)象及其協(xié)調(diào)關(guān)系,并展開到類模型、接口模型、實(shí)體模型,是本文提倡的對(duì)象模型化方法。對(duì)于標(biāo)志、描述和應(yīng)用像軟件模式這類可重用的軟件知識(shí)和經(jīng)驗(yàn),這樣做是更加必要的。
1.2角色模型
OOram[4]方法中產(chǎn)生了一種新的抽象方法——角色建模(role modeling,RM)。用角色模型(role model)作為基本建模單元來描述一個(gè)通過要求服務(wù)和提供服務(wù)而相互作用的對(duì)象集合。
角色模型是一種全新的對(duì)象抽象機(jī)制;角色建模是一種基于角色抽象的面向?qū)ο蠼7椒ā=巧橄蟛煌谕ǔC嫦驅(qū)ο蠼C(jī)制所支持的類抽象,它用一個(gè)角色刻畫一個(gè)特定的對(duì)象,角色具有可標(biāo)志性和封裝性;角色模型包含了一系列角色的集合。角色模型刻畫對(duì)象交互作用的主題、對(duì)象間的關(guān)系、對(duì)象協(xié)作時(shí)向協(xié)作者傳送的消息以及模型信息的處理過程。
這種抽象機(jī)制有如下幾個(gè)特征:角色維持了對(duì)象的可標(biāo)志性,角色模型刻畫了相互協(xié)作的對(duì)象結(jié)構(gòu),這樣的模型有利于研究系統(tǒng)的綜合行為;RM支持“分而視之”原則,而其綜合技術(shù)更使之具有強(qiáng)大的重用能力;角色的概念重視一個(gè)對(duì)象在系統(tǒng)內(nèi)存在的理由、責(zé)任和位置,角色模型規(guī)定了對(duì)象的作用及其作用的協(xié)調(diào)關(guān)系,因此RM適用于系統(tǒng)的需求分析和概要設(shè)計(jì);RM是在角色協(xié)作中對(duì)對(duì)象的語義進(jìn)行描述,它提供了對(duì)對(duì)象的一種新的抽象機(jī)制,可以讓用戶成為信息系統(tǒng)的一個(gè)部分;RM與模式技術(shù)具有很好的一致性;RM中接口描述提供了RM抽象和類抽象的兼容。
UML[5]中對(duì)角色概念的支持表現(xiàn)在兩方面:UML中類間關(guān)系可以定義成每端添加一個(gè)所謂的角色名稱。通用UML機(jī)制可以添加其他規(guī)約,但現(xiàn)在還沒有提供具體的角色建模支持;UML提供Collaboration概念讓開發(fā)者描述對(duì)象為完成一個(gè)具體任務(wù)如何協(xié)作。Collaboration讓開發(fā)者指明結(jié)構(gòu)而不是行為,它的表達(dá)能力與基本OOram的角色模型相當(dāng),但它缺乏如角色模型綜合等的高級(jí)特性。
1.3角色模型中的幾個(gè)基本概念
根據(jù)文獻(xiàn)[6]中對(duì)角色建模的幾個(gè)概念進(jìn)行形式化定義:
1)角色的定義
角色是對(duì)象在相互協(xié)調(diào)的活動(dòng)中所承擔(dān)責(zé)任和作用的抽象,可表示為 role={R,S,B}。其中:R表示角色名role name;S表示狀態(tài)屬性;B表示行為語義。
在概念建模初始階段,role可以只有role name。
2)角色模型的定義
〈role model name〉={〈role〉[+],…,〈role〉[+]}
每個(gè)role model在上一級(jí)模型范圍內(nèi)具有惟一的名。除了名之外,role model可以有一個(gè)惟一的縮寫來簡(jiǎn)化對(duì)名的引用。
3)角色模型中包含有限個(gè)數(shù)的角色
〈role name〉={〈role path〉,…,〈role path〉}
role的名在它所在的role model內(nèi)惟一,而在不同role model中的role都是不同的role。無論名是否相同,在引用一個(gè)role時(shí)應(yīng)指明它的名以及它定義所在的role model的名或縮寫。
4)角色的屬性通過一個(gè)role path集合來定義
role path=〈role name〉:{〈message〉,…,〈function〉,…}
role path的定義通過引用同一個(gè)role model中的其他role來實(shí)現(xiàn),所以這里的〈role name〉不需要限定它所在的role mo-del名。Role path的兩端可以是同一個(gè)role,也就是self path,這種自交互(self-interaction)減少了對(duì)象對(duì)內(nèi)部實(shí)現(xiàn)自我服務(wù)(self-service)的依賴。
5)角色模型用來描述不同的活動(dòng)或一個(gè)活動(dòng)在不同層面下的抽象
它關(guān)注的是對(duì)象之間的協(xié)作而不是單個(gè)對(duì)象,它的role描述了對(duì)象在活動(dòng)中如何與其他對(duì)象交互和對(duì)象與該活動(dòng)相關(guān)的屬性;而類是描述對(duì)象整個(gè)的生命周期,與對(duì)象所在的特定環(huán)境無關(guān),它關(guān)注的是單個(gè)的對(duì)象以及對(duì)象在生命周期中所能參加的各種活動(dòng)。
在RM中,不用手工定義和每個(gè)role對(duì)應(yīng)的類,在role屬性的基礎(chǔ)上可以自動(dòng)定義出一個(gè)類,它具有與這個(gè)role相同的函數(shù)和消息的參數(shù)等屬性:
〈class name〉=〈Role model name〉.〈role name〉
6)由RM技術(shù)產(chǎn)生的概念模型被稱為角色建模模型(role modeling model)或簡(jiǎn)稱RM模型
RM模型由一系列的類、衍生類和role model組成:
〈model name〉={{〈class〉,…,〈class〉},{〈derived class〉,…,〈derived class〉},{〈role model〉,…,〈role model〉}}
2角色模型的表示
RM靜態(tài)結(jié)構(gòu)圖的基本元素[7](圖2):a)角色對(duì)象用圓角矩形表示,角色用畫在圓角矩形上的黑點(diǎn)表示。如果角色只有一個(gè),且角色名與角色對(duì)象名相同,則角色名可省略。b)角色間的協(xié)調(diào)關(guān)聯(lián)用直線表示,角色間的使用關(guān)系用帶箭頭的直線表示,角色間的繼承關(guān)系用帶黑箭頭的直線表示,角色間協(xié)調(diào)的多重關(guān)系用數(shù)字表示。圖2中所表示的是一個(gè)角色對(duì)象R1與一個(gè)或一個(gè)以上角色對(duì)象R2之間的協(xié)調(diào)關(guān)聯(lián)。c)角色約束的描述一般使用自然語言,隨著角色的細(xì)化,也可使用OMG/OCL [1]進(jìn)行描述。用同樣的方法也可以描述RM中角色之間的約束關(guān)系。除靜態(tài)結(jié)構(gòu)圖之外,角色模型還包括描述角色對(duì)象之間動(dòng)態(tài)關(guān)系的行為協(xié)調(diào)圖等[6]。
RM受到越來越多的重視,歐美一些研究者如D.Richle和D.Notkin研究一種新的角色建模語言規(guī)格說明RML(role modeling language):在著眼于對(duì)象的角色之間關(guān)系的基礎(chǔ)上描述業(yè)務(wù)模型的一種語言,用類似于UML的圖來表達(dá)模型,適合于描述業(yè)務(wù)領(lǐng)域的分析模型。
3角色建模工具RM odeler的設(shè)計(jì)與實(shí)現(xiàn)
3.1RM-odeler支持RM-L子集
RModeler所支持的RML語言是RML vol.0.76[7]的一個(gè)子集。該子集針對(duì)本系統(tǒng)的應(yīng)用領(lǐng)域即設(shè)計(jì)信息管理系統(tǒng)、銷售管理系統(tǒng)和物流管理系統(tǒng),為簡(jiǎn)單起見僅采用了role、association、aggregation、generalization、interaction、message和note等建模事物,而沒有定義package、 multi role-interface、implied role、role equivalent、association aggregation等概念,模型圖用靜態(tài)圖(也稱角色圖)和協(xié)作來表示。
3.1.1靜態(tài)圖中的記號(hào)設(shè)計(jì)
在這個(gè)RML實(shí)用版本中,靜態(tài)圖中的元素有:role、association、aggregation、generalization 和 note。其記號(hào)的實(shí)現(xiàn)分別如圖3所示。
1)RoleRole的構(gòu)成要素包括名、類型、屬性和抽象行為。Role名不能省略,并在模型范圍內(nèi)有惟一性檢查。
2)Association構(gòu)成要素有兩端的角色名、關(guān)聯(lián)名和角色類型名。其中兩端角色名不能省。
3)Aggregation構(gòu)成要素有兩端的角色名、集約名和角色類型名。其中兩端角色名不能省。
4)Generalization普化關(guān)系連接的兩端分別是sub role和super role。模型語法檢查中禁止繼承關(guān)系出現(xiàn)成環(huán)情況。
5)Note注釋是在Note記號(hào)內(nèi)的正文,用于對(duì)模型加以說明。
3.1.2動(dòng)態(tài)圖中的記號(hào)設(shè)計(jì)
動(dòng)態(tài)圖中出現(xiàn)的記號(hào)有actor role、interaction、message和note,其記號(hào)的實(shí)現(xiàn)分別如圖4所示。
1)Actor role記號(hào)同靜態(tài)構(gòu)造的role,用類型名actor(actor, ACTOR)表示。
2)Interaction協(xié)作中相互作用的角色間用直線表示其互動(dòng)關(guān)系,運(yùn)行同一個(gè)角色自身的interaction。
3)Message詳細(xì)表示相互作用的角色間的動(dòng)作關(guān)系。
3.2主要功能設(shè)計(jì)
為方便用戶學(xué)習(xí)和實(shí)用,實(shí)現(xiàn)RML和UML在使用上的一致性,RModeler借鑒了最廣為接受的UML編程工具Rational Rose的設(shè)計(jì)風(fēng)格,為用戶提供了建立RML模型的可視化環(huán)境。圖5是本文設(shè)計(jì)的RModeler工具做的一個(gè)簡(jiǎn)單例子,它直觀地從使用角度來說,將該工具的功能分為菜單、樹和圖三部分。
RModeler的布局如圖5所示,窗口最上部是菜單,下面依次是工具按鈕、打開模型文件路徑顯示條、主處理窗口和狀態(tài)條。模型編輯器是RModeler的主要部分,分為左、右兩部分,左上為模型元素樹,左下為選中元素的屬性面板;右為角色模型編輯區(qū),其上部狀態(tài)條可動(dòng)態(tài)更新目前模型圖中的角色和關(guān)系數(shù),下為較為豐富的編輯工具區(qū)(靜態(tài)和動(dòng)態(tài)略有不同),同時(shí)在進(jìn)行模型一致性檢查時(shí)還會(huì)拖拽出模型檢查結(jié)果窗口。
鑒于XML已經(jīng)成為目前數(shù)據(jù)描述的事實(shí)標(biāo)準(zhǔn),本工具的角色模型的UML變換操作是將當(dāng)前的RML模型通過一定規(guī)則轉(zhuǎn)換成UML模型所對(duì)應(yīng)的XMI格式文件。作為RML模型向UML模型轉(zhuǎn)換的結(jié)果,采用在筆者開源軟件Argouml[8]基礎(chǔ)上設(shè)計(jì)的建模軟件Modeler作為UML建模工具,在Modeler中導(dǎo)入此XMI文件。UML變換處理步驟如圖6所示。
本版本RModeler的集成功能提供了對(duì)Static EAI的第二種方式的支持。對(duì)角色的置換只提供了用戶將role的視圖手工拖拽到相應(yīng)位置以實(shí)現(xiàn)視圖合二為一的功能。
動(dòng)態(tài)圖中可選中interaction和message,并對(duì)message進(jìn)行屬性編輯,如不同方向上消息的添加或刪除等。對(duì)interaction沒有屬性編輯,只有名字修改。
3.3軟件結(jié)構(gòu)設(shè)計(jì)
3.3.1軟件模塊劃分
該項(xiàng)目從邏輯上被設(shè)計(jì)為RML工具、模型控制和模型管理。圖7表示了三個(gè)部分之間的關(guān)系。對(duì)UML的轉(zhuǎn)換和對(duì)UML工具的調(diào)用由模型控制部分實(shí)現(xiàn);而對(duì)模型信息的存儲(chǔ)管理由模型管理部分完成。
3.3.2軟件詳細(xì)設(shè)計(jì)
根據(jù)以上的功能和模塊設(shè)計(jì),RModeler在Eclipse 3.2平臺(tái)上開發(fā)了五十多個(gè)類進(jìn)行軟件實(shí)現(xiàn)工作。
模型的一致性檢查對(duì)于正確建模十分重要,RModeler不僅在作圖時(shí)設(shè)定了一些限制條件,如普化關(guān)系不能存在自反等,而且設(shè)計(jì)有專門的模型檢查模塊,同時(shí)提供CheckInfoPanel來顯示模型檢查結(jié)果。圖8只是簡(jiǎn)單表述了一致性檢查的主要過程,可以根據(jù)模型進(jìn)一步建立的要求不斷擴(kuò)充檢查項(xiàng)目和要求。
UML的XMI轉(zhuǎn)換前,模型首先通過一致性檢查;然后對(duì)模型信息進(jìn)行平坦化操作,從平坦化模型中得到項(xiàng)目數(shù)組,根據(jù)項(xiàng)目數(shù)分別創(chuàng)建UML的包及其包中類結(jié)構(gòu)(圖9)。XMI文件創(chuàng)建采用JDOM包,需注意JDOM的早期版本不支持Modeler所采用的“:”符號(hào),所以需要另外加入文件中符號(hào)變換過程,使Modeler能正確識(shí)別。
每一項(xiàng)目中的變換過程是:首先創(chuàng)建UML包頭結(jié)構(gòu);其次對(duì)項(xiàng)目中每一角色進(jìn)行轉(zhuǎn)換,同時(shí)處理角色所擁有的關(guān)聯(lián)關(guān)系、普化關(guān)系、集約關(guān)系轉(zhuǎn)換。轉(zhuǎn)換中需要注意:凡第一次出現(xiàn)某關(guān)系與非本項(xiàng)目角色相連,應(yīng)加入此角色于本UML包中。
4結(jié)束語
本文介紹了在Eclipse平臺(tái)下角色模型支持工具RModeler的開發(fā)過程。通過軟件結(jié)構(gòu)設(shè)計(jì)及詳細(xì)設(shè)計(jì)研究了RModeler的實(shí)現(xiàn)技術(shù)。
可視化建模工具RModeler具有如下特點(diǎn):a)支持業(yè)務(wù)過程中采用RML語言的建模。b)設(shè)計(jì)風(fēng)格與UML編輯工具Rational Rose的設(shè)計(jì)風(fēng)格保持了較好的一致性,便于用戶的學(xué)習(xí)和使用。c)具備將RML模型轉(zhuǎn)換為UML模型的功能。d)角色建模工具RModeler與富士通的BO分析設(shè)計(jì)平臺(tái)[9]、RMLEditor[10]等相比,主要優(yōu)點(diǎn)為:(a)采用Java語言編寫實(shí)現(xiàn),而BO分析設(shè)計(jì)平臺(tái)、RMLEditor都用C++實(shí)現(xiàn),因此RMode-ler的跨平臺(tái)能力強(qiáng);(b)BO分析設(shè)計(jì)平臺(tái)、RMLEditor只是實(shí)現(xiàn)了基本的RML編輯功能,RModeler已經(jīng)實(shí)現(xiàn)了靜態(tài)和動(dòng)態(tài)協(xié)作圖建模功能以及角色集成、分解功能;(c)用戶界面友好;(d)UML轉(zhuǎn)換功能已經(jīng)實(shí)現(xiàn);(e)RModeler采用業(yè)界標(biāo)準(zhǔn)數(shù)據(jù)描述格式XMI來傳遞和共享建模信息,而BO分析設(shè)計(jì)平臺(tái)、RMLEditor無此功能。
RModeler目前完成了代碼實(shí)現(xiàn)和測(cè)試工作,并在實(shí)際開發(fā)中使用,運(yùn)行良好。根據(jù)日本BO聯(lián)合系統(tǒng)開發(fā)中與RModeler功能類似的“BO分析設(shè)計(jì)平臺(tái)”所承擔(dān)的重要性來看,其應(yīng)用前景是廣闊的,
但角色建模工具RModeler還需進(jìn)一步完善。目前的功能還不完整,需要考慮RML模型分解操作、模型內(nèi)修改等功能;分析到設(shè)計(jì)的規(guī)約轉(zhuǎn)換還較為單一,應(yīng)加上對(duì)角色模式的支持等。
參考文獻(xiàn):
[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]文斌,劉長(zhǎng)青,毛曉光. 基于角色模型的從分析到設(shè)計(jì)的規(guī)約結(jié)構(gòu)[J].計(jì)算機(jī)應(yīng)用研究,2005,22(1):207-210.
“本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文”