孫 祿, 盧 瀟, 張 強
(空軍工程大學(xué) 電訊工程學(xué)院,陜西 西安 710077)
模型表示研究一直是解決模型管理中存在問題的主要方式[1]。目前模型表示比較流行的方法有框架表示、結(jié)構(gòu)化表示、面型對象表示、抽象表示、建模語言表示等,這些表示方法在理論研究和設(shè)計中對實際問題的解決都有顯著的成效,然而各自又或多或少存在著不足:
1)框架表示模型類的定義沒有引入繼承機制,以及不支持模型的層次構(gòu)造,而且將模型結(jié)構(gòu)的數(shù)據(jù)轉(zhuǎn)換為方法所需要的數(shù)據(jù)形式也非常困難。
2)結(jié)構(gòu)表示模型的元素是對于特定的模型實例定義的,如果模型中的元素增多,則必須修改。很多模型不能正確區(qū)分各種元素,因此也就無法使用結(jié)構(gòu)化表示。
3)用建模語言描述的模型實質(zhì)上就是一個實際問題的求解過程,由于它不能使模型與數(shù)據(jù)集相獨立,所以不能做到模型的重用和共享。
4)模型抽象的缺點是沒有將對象和過程封裝成一個整體,這是它與面向?qū)ο蠓椒ǖ闹饕獏^(qū)別。面向?qū)ο蠓椒ㄕ窃诔橄髷?shù)據(jù)型的基礎(chǔ)上發(fā)展起來的。
面向?qū)ο骩2]的表示方法是當(dāng)前最為流行的研究方法。它將模型作為對象來處理,每個對象都擁有自己的屬性和操作這些屬性的方法,即“對象=屬性+方法”。再把模型和對象對應(yīng),將模型看作“類”,模型的輸入輸出參數(shù)和對象的屬性對應(yīng),模型的運算操作、數(shù)據(jù)的存取操作和對象的方法對應(yīng),最終構(gòu)造了個適當(dāng)?shù)挠嘘P(guān)類和子類的結(jié)構(gòu)。
伴隨著計算機和網(wǎng)絡(luò)技術(shù)飛速發(fā)展,雖然面向?qū)ο蠓椒ㄒ焉钊肴诵?,但隨著軟件科學(xué)的不斷發(fā)展,使軟件應(yīng)用置身與更加廣闊的環(huán)境中,從而對應(yīng)用軟件的跨語言、跨平臺和互操作性提出了更要求[3]。在這種情況下,傳統(tǒng)的面向?qū)ο蠓椒ㄒ呀?jīng)難以適應(yīng)現(xiàn)代的分布式軟件應(yīng)用,這時基于組件的軟件開發(fā)技術(shù)便蓬勃發(fā)展起來。
組件化軟件開發(fā)技術(shù)不同于傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計技術(shù),也不同于面向?qū)ο蟪绦蛟O(shè)計技術(shù)??梢哉J為組件化程序設(shè)計位于這二者之上,它更注重于應(yīng)用系統(tǒng)的全局,要求對應(yīng)用系統(tǒng)進行全方位的考察。在具體到某個組件或模塊的設(shè)計時,仍然是以結(jié)構(gòu)化程序設(shè)計和面向?qū)ο蟪绦蛟O(shè)計技術(shù)作為基礎(chǔ)。組件開發(fā)模型的特點:1)組件可以方便地集成于框架中,不用修改代碼,不用重新編譯;2)組件的接口和實現(xiàn)兩者分離。組件的具體實現(xiàn)被封裝在內(nèi)部,用戶只需關(guān)心接口,不必關(guān)心實現(xiàn)細節(jié)。組件通過接口實現(xiàn)與其他組件和框架進行交互;3)組件的接口具有統(tǒng)一的標(biāo)準(zhǔn),組件的組合運用相對容易。
組件開發(fā)流程如圖1所示。
圖1 組件開發(fā)流程圖Fig.1 Flow chart of component development
目前較成熟的組件技術(shù)有Microsoft公司的COM/COM+,OMG公司的CORBA,SUN公司的Java Bean。這3種組件規(guī)范都實現(xiàn)了組件對象邏輯層次和位置分布的透明性以及相關(guān)服務(wù),為基于組件的軟件開發(fā)提供對象管理的基礎(chǔ)設(shè)施。
CORBA是一種標(biāo)準(zhǔn)的面向?qū)ο髴?yīng)用程序體系規(guī)范。主要優(yōu)勢在于它的語言獨立性、位置透明性、跨平臺和互操作性,而且具有很好的負載均衡能力和安全性,并有眾多公司的支持。但由于OMG向各公司提供的是技術(shù)規(guī)范而非實現(xiàn)細節(jié),因此各種CORBA版本不是完全相同的,在利用這些擴展性能的同時,開發(fā)者可能不得不損失掉CORBA的互操作性和移植性。
COM/COM+組件是Microsoft提出的組件標(biāo)準(zhǔn),最初作為桌面操作系統(tǒng)平臺上的組件技術(shù)?,F(xiàn)已發(fā)展成為Microsoft軟件世界的應(yīng)用系統(tǒng)集成標(biāo)準(zhǔn)。缺點是只能在Windows家族平臺上運行,跨平臺性差,無法滿足異構(gòu)環(huán)境下企業(yè)應(yīng)用要求。
Java Bean組件模型為系統(tǒng)開發(fā)者和用戶都提供了很多的便利,如減少系統(tǒng)的市場化時間,很好的可擴展性和可移植性,減少對開發(fā)者技術(shù)包的依賴,提高開發(fā)效率,保護企業(yè)已有的投資,降低開發(fā)應(yīng)用軟件的成本等。在多層應(yīng)用環(huán)境下,廠商所開發(fā)的應(yīng)用服務(wù)器擔(dān)任著企業(yè)信息系統(tǒng)中不可或缺的角色,而EJB標(biāo)準(zhǔn)受到全世界大多數(shù)廠家的支持,在系統(tǒng)的開發(fā)、升級過程中會有更大的選擇空間。
Java Bean是一個純粹的Java類。一個Java Bean由屬性、方法和事件3部分組成。其中,屬性描述了組件的靜態(tài)特征。通常組件對象中的私有數(shù)據(jù)成員外界不能夠直接訪問,需要通過專門的訪問(Accessor)方法才能訪問。Accessor方法在Bean中一般以getXxx()和setXxx()的形式成對出現(xiàn),分別用于讀取和寫入屬性的值。屬性是Bean的共有特性,分為簡單(simple)、索引(index)、綁定(bound)和限制(constrained)4種。方法用來表述Java Bean組件動態(tài)行為。在這些方法中有用來實現(xiàn)獲取屬性值和設(shè)置屬性值的,Bean的公有方法是Bean和外界接口的一部分。同普通類不同的是,一方面,調(diào)用Bean的實例方法不是主要途徑;另一方面,屬性和事件是和Bean交互的主要方式。事件用于組件之間的交互,一個Bean產(chǎn)生的事件可以被多個Bean接收。事件處理是Java Bean體系結(jié)構(gòu)的核心之一,通過事件處理機制,可以讓一些組件作為事件源,發(fā)出可被組件環(huán)境或者其他組件接收的事件。這樣不通過的組件就可以在構(gòu)造工具內(nèi)組合在一起,組件之間通過事件的傳遞進行通信,構(gòu)成一個應(yīng)用。
模型組件化建立在模型規(guī)范化的基礎(chǔ)上,采用組件技術(shù)實現(xiàn)決策支持系統(tǒng)中模型操作和運行的方法,通過上面對模型表示的敘述以及目前流行的3種組件技術(shù)標(biāo)準(zhǔn)的比較,本文以Java Bean組件技術(shù)為基礎(chǔ),研究設(shè)計模型組件化表示方案,內(nèi)容包括模型設(shè)計規(guī)范、模型接口描述、模型運行描述。
模型的規(guī)范化就是提取各個模型的公共信息,對模型進行統(tǒng)一表達,以方便模型管理、運行、組合等,包括模型編碼規(guī)范化、模型數(shù)據(jù)規(guī)范化、模型規(guī)范化封裝等。編碼規(guī)范化便于模型管理,模型數(shù)據(jù)規(guī)范化便于模型的統(tǒng)一調(diào)度、組合運行等。它不僅影響模型的存儲方式、運行方式、模型的組合結(jié)構(gòu),而且也直接影響到模型管理系統(tǒng)和模型服務(wù)器的體系結(jié)構(gòu)。
傳統(tǒng)方法認為,模型分為原子模型和復(fù)合模型。原子模型是劃分的最小單位,功能不可再分割;復(fù)合模型是由2個以上的原子模型復(fù)合而成,它們的概念描述[4]為:
原子模型類(AMC)={Input,Output,Manipulate,Knowledge}; 復(fù)合模型類 (CMC)={Input,Output,Manipulate,Knowledge,F(xiàn)it-together}。
由于模型的表示基本上采用的是程序化設(shè)計,在程序表示中,將模型規(guī)定為相同的屬性形式有利于模型組合和調(diào)用,減少區(qū)分的各種開銷。
在規(guī)范模型標(biāo)準(zhǔn)情況下本文將原子模型和復(fù)合模型定義為具有相同的屬性形式:Model={Sort,F(xiàn)unction,Input/Output,Combination},即分類屬性、功能屬性、輸入輸出屬性、組合屬性。具體含義是:1)分類屬性:確定模型的分類特征,以此對模型進行查找、調(diào)用;2)功能屬性:描述模型的功能作用;3)輸入輸出屬性:模型輸入輸出參數(shù)說明;4)組合屬性:模型是否可以組合以及組合方式特點。
在研究模型的組合特性時,需要對模型之間的關(guān)系進行劃分[5]。不是所有模型之間都存在組合的可能性,相同或相似的知識領(lǐng)域內(nèi)的模型,在滿足組合條件的情況下才有組合的可能。模型組合的方法主要是通過輸入輸出的控制實現(xiàn),這是模型組合的接口。模型能夠組合需要滿足以下2個條件:
1)Sm1∩Sm2≠?; 2)m1(O)∩m2(I)≠?;
即模型m1和m2的分類屬性不為空;模型m1和m2的輸出輸入之間存在聯(lián)系。
對于模型分類可描述為[6]:M0={mi∈M}Si} i=1,2,…,n;
其中,M0為總模型體系,Si為分類體系,mi為第i類功能模型群。 Mi={mij∈mi}Sij} i=1,2,…,n j=1,2,…,n;其中,Sij為第i類個群的分類關(guān)系,mij為第i類模型群中第j個具體模型。
圖2所示為模型屬性形式。
圖2 模型屬性形式Fig.2 Model attribution form
在規(guī)范化設(shè)計的基礎(chǔ)上,結(jié)合組件技術(shù)對模型的各個部分進行定義:
模型類型(modelSort)的參數(shù)包括 modelname, comment,fatherports, childports;重要函數(shù)是 showmdelinfo(),用以顯示以上參數(shù)。
接口(modelports)共分為3類,輸入接口、輸出接口和內(nèi)部接口,模型組件對外只呈現(xiàn)輸入和輸出接口,用于模型組合是傳遞參數(shù)。兩類接口的函數(shù)分別為set/getIutputData();set/getOutputData();
組合關(guān)系 (modelcombrelation)用來描述模型的組合信息,這也是確定模型是否具有組合的可能。
模型的功能部分(modelfunction)是模型內(nèi)部運行部分,對外只有描述信息。這部分是模型設(shè)計者主要設(shè)計的部分。主要函數(shù)是 showfunctioninfo(),calculate()。
模型管理系統(tǒng)是實現(xiàn)模型管理的系統(tǒng),它對模型的管理主要體現(xiàn)在模型的建立、模型的運行、模型的修改維護以及模型的組合、集成等方面。模型庫是模型管理系統(tǒng)的主要組成部分,模型庫中的每一個模型都有如下部分:1)描述部分包括描述、主題和關(guān)鍵字等;2)輸入輸出部分包括輸入?yún)?shù)部分和運行結(jié)果部分;3)運行部分,模型運行方法,模型的主要方法,得到的就是運行結(jié)果。
所有模型都通過統(tǒng)一格式的接口來管理模型庫下的所有模型,利用Java Bean規(guī)范來調(diào)用模型。在組件接口中可以定義主方法,而主方法需要在Bean的實現(xiàn)類中實現(xiàn)。在每個模型的實現(xiàn)類就是這里的Bean實現(xiàn)類,它必須有相應(yīng)的方法:
public void ModelCreate();//建立模型;
public void ModelRemove();//模型消除;
public void ModelActivate();//激活模型;
public void setSessionContext();//它允許會話 Bean存儲會話環(huán)境信息;
而在模型刪除、修改、更新方面,則采用基于模型表的管理方式,模型表中存儲的就是模型字典的信息,對于每個模型在模型表中都有相應(yīng)的記錄對應(yīng)。
public void setPropertity(String prop1){};//設(shè)置屬性,其中propertity表示表里一個字段;
public String getPropertity(){return prop};//取得屬性值;
在框架化設(shè)計的基礎(chǔ)上,下面對模型的創(chuàng)建流程給出描述,如圖3所示。整個過程分為3個階段,編碼階段,設(shè)計階段和運行階段。
圖3 模型文件運行流程Fig.3 Running flow of model files
在編碼階段,模型設(shè)計人員按照模型需求編寫Java Bean的軟件組件,此時需要建立Bean的屬性、方法及事件,允許對Bean進行配置并相互傳遞參數(shù)。編寫B(tài)ean程序與編寫其他任何的Java程序一樣,但要求寫出的行為更容易配置。在設(shè)計階段,模型設(shè)計人員通過運行組件集成工具結(jié)合需求分析將需要的Bean組件“關(guān)聯(lián)”到一起形成新的Bean。設(shè)計階段包括程序設(shè)計與系統(tǒng)集成。設(shè)計階段最終輸出結(jié)果是以jar文件形式給出的軟件組件的裝配結(jié)果。運行階段,用戶只要運行包含了已經(jīng)完成的定制的jar組件既可實現(xiàn)模型的調(diào)用。
組件技術(shù)在復(fù)雜軟件系統(tǒng)的設(shè)計中應(yīng)用廣泛,同時,模型表示研究又是模型管理研究的熱點問題。本文運用Java Bean組件技術(shù)的優(yōu)點,設(shè)計了組件化模型表示方法和模型管理系統(tǒng)框架。具有以下特點:1)利用了面向?qū)ο蟮姆庋b特性,將數(shù)據(jù)和模型的方法結(jié)合到一起,在模型的調(diào)用中避免數(shù)據(jù)和模型的分離帶來的不便;2)規(guī)范化后的模型表示在組合中通過一致的接口進行參數(shù)的傳遞,提高了組合的效率;3)模型文件采用java語言編程描述,然后打包成jar文件,在跨平臺調(diào)用上有突出的優(yōu)點。
[1]陳文偉.決策支持系統(tǒng)及其開發(fā)[M].北京:清華大學(xué)出版社,2000.
[2]陳昊鵬,李偉華.面向?qū)ο蟮腄SS模型庫管理系統(tǒng)設(shè)計[J].西北大學(xué)學(xué)報:自然科學(xué)版,2002,32(1):48-50.CHEN Hao-peng, LIWei-hua.Design ofmodel-base managementsystem ofDSS based on object-oriented database[J].Journal of Northwest University:Nature Science Edition,2002,32(1):48-50.
[3]Goul M,Corral K.Enterprise model management and next generation decision support[J].Decision Support Systems,2007(43):915-932.
[4]申建剛,夏國平.采用擴展OWL-S的決策模型表示框架[J].計算機工程與應(yīng)用,2009,45(23):1-5.SHEN Jian-gang,XIA Guo-ping.Representation framework for decision models using extended OWL-S[J].Computer Engineering and Applications,2009,45(23):1-5.
[5]高暢.模型管理操作研究[D].北京:燕山大學(xué),2006.
[6]Jarzabek S.Domain model-driven software reengineering and maintenance[J].Journal of System and Software,1993,20(1):37-51.