崔亞芬,李晗雙,蔣振剛
(1.吉林省招生辦公室,長(zhǎng)春 130000;2.長(zhǎng)春理工大學(xué) 計(jì)算機(jī)科學(xué)技術(shù)學(xué)院,長(zhǎng)春 130022)
軟件復(fù)用是指重復(fù)使用“為了復(fù)用目的而設(shè)計(jì)的軟件”的過程[1]。其中,構(gòu)件組裝和構(gòu)件通信是軟件復(fù)用中的核心技術(shù),目前國內(nèi)外都有這方面的研究,在美國軍方與政府資助的項(xiàng)目中,已建立了若干構(gòu)件庫系統(tǒng),如CARDS、ASSET、DSRS等[2];國內(nèi)許多科研機(jī)構(gòu)也致力于構(gòu)件方面的研究,如:北京大學(xué)軟件工程研究所、中國科學(xué)院軟件研究所[3]。國內(nèi)外在構(gòu)件組裝與構(gòu)件通信技術(shù)上,都取得了優(yōu)秀的成果,但也有許多不足之處[4]。比如傳統(tǒng)組裝技術(shù)對(duì)現(xiàn)有構(gòu)件模型和構(gòu)件之間的協(xié)同關(guān)系支持不足;其次從軟件體系結(jié)構(gòu)角度看,缺乏對(duì)構(gòu)件組裝體系結(jié)構(gòu)模型的支持;在構(gòu)件通信方面上,組裝后的軟件系統(tǒng),在構(gòu)件通信上復(fù)雜度較高。結(jié)合以上觀點(diǎn),無論哪種形式都是基于接口形式的組裝,為了適應(yīng)不同軟件環(huán)境,在軟件開發(fā)中,每個(gè)構(gòu)件都需要重新編寫接口程序,之后才能進(jìn)行組裝,從而導(dǎo)致構(gòu)件之間具有了隱式的依賴關(guān)系,同時(shí)使構(gòu)件之間也過于依賴外部的服務(wù),為構(gòu)件之間的組裝增加了難度。
針對(duì)構(gòu)件組裝與構(gòu)件通信的問題,本文提出的一種基于反射機(jī)理的組裝構(gòu)件通信技術(shù),簡(jiǎn)稱CMP(Configurable Messaging Protocol),是把構(gòu)件組裝和構(gòu)件通信分離,構(gòu)件的組裝是依靠構(gòu)件基類進(jìn)行組裝的,只需要繼承;而構(gòu)件的通信依賴于反射機(jī)理,不需要重新編寫接口程序。通過這樣的機(jī)制,為構(gòu)件組裝和系統(tǒng)設(shè)計(jì)與系統(tǒng)演化提供了相當(dāng)大的柔性,減少了軟件的開發(fā)風(fēng)險(xiǎn),同時(shí)也能相應(yīng)地提高軟件的質(zhì)量。主要從兩個(gè)方面解決此問題,一是在構(gòu)件組裝方面:在體系結(jié)構(gòu)的基礎(chǔ)上設(shè)計(jì)構(gòu)件模型,為構(gòu)件通信提供基礎(chǔ)平臺(tái);二是在構(gòu)件通信的方面:在構(gòu)件組裝總線模型上,設(shè)計(jì)單位總線式管理模型,以解決構(gòu)件通行存在的再開發(fā)問題。
所謂構(gòu)件組裝,指的是將構(gòu)件組裝成一個(gè)大的構(gòu)件或系統(tǒng)所采取的“動(dòng)作”[5,6]。本文提出的構(gòu)件組裝模型,是結(jié)合OOP思想并根據(jù)企業(yè)信息化應(yīng)用的分析與研究結(jié)果,總結(jié)出的CMP通信技術(shù)模型??傮w結(jié)構(gòu)如圖1所示?;贑MP的構(gòu)件組裝框架主要分為五個(gè)層次:界面顯示層、功能控件層、基礎(chǔ)類庫層、數(shù)據(jù)處理層及系統(tǒng)參數(shù)管理。
當(dāng)用戶啟動(dòng)軟件時(shí)加載系統(tǒng)基本對(duì)象,并按照對(duì)象的配置要求初始化。通過加載抽象的業(yè)務(wù)對(duì)象和加載系統(tǒng)的配置參數(shù)對(duì)象,使用總線控制單元組裝功能構(gòu)件,這樣就完成了可視化的交互界面的初始化。這部分功能主要包括:
構(gòu)件信息管理對(duì)象:構(gòu)件信息對(duì)象是由系統(tǒng)加載并創(chuàng)建。構(gòu)件信息對(duì)象完成對(duì)需要組裝構(gòu)件屬性值的加載,并以靜態(tài)泛型的形式存儲(chǔ)于系統(tǒng),構(gòu)件信息對(duì)象包括:生命周期、組裝構(gòu)件信息、顯示定位參數(shù)等功能。
基礎(chǔ)Form虛擬對(duì)象:基礎(chǔ)Form虛擬對(duì)象是功能界面的基類?;A(chǔ)Form虛擬對(duì)象提供以界面為單位的虛擬組裝管理者,是所有界面的父類。
可視化功能控件對(duì)象:可視化功能控件對(duì)象是界面創(chuàng)建的,并且在界面釋放時(shí)也相應(yīng)的釋放。可視化功能控件對(duì)象是等同于構(gòu)件。可視化功能控件對(duì)象需要在界面中注冊(cè)和交互,主要包括:屬性、事件的入口、可以讀取界面中的公共參數(shù)值等??梢暬δ芸丶?duì)象有一個(gè)基類,繼承基類后,在組裝過程中,基本上不需要管理。
圖1 CMP框架總體結(jié)構(gòu)
功能控件層主要由兩部分組成,一部分是功能控件的父類,另一部分是功能控件的功能實(shí)現(xiàn)部分。功能控件父類的主要任務(wù)是到其父容器中注冊(cè),主要注冊(cè)的信息包括:屬性信息、事件入口信息、獲取事件參數(shù)值,綜合來說就是完成與父容器之間的全部交互工作,并為功能控件提供可實(shí)現(xiàn)某種功能的虛函數(shù);功能控件對(duì)象的任務(wù)是完成預(yù)先設(shè)置好的功能,并盡可能地降低耦合度。
基礎(chǔ)類庫是基礎(chǔ)的類和屬性、方法的一個(gè)集合,為所有層次提供功能。
數(shù)據(jù)處理層是處理業(yè)務(wù)邏輯的[7]。
系統(tǒng)參數(shù)層主要包括以下幾個(gè)對(duì)象:
(1)系統(tǒng)參數(shù)管理對(duì)象:系統(tǒng)參數(shù)對(duì)象是由系統(tǒng)加載并創(chuàng)建[8]。系統(tǒng)參數(shù)對(duì)象是管理記錄系統(tǒng)級(jí)別的參數(shù),也是為構(gòu)件通信提供參數(shù)的對(duì)象,系統(tǒng)參數(shù)對(duì)象還包括參數(shù)的生命周期、參數(shù)的定位、參數(shù)唯一性判斷等功能。
(2)系統(tǒng)基礎(chǔ)屬性對(duì)象:系統(tǒng)參數(shù)對(duì)象是由系統(tǒng)加載創(chuàng)建的。系統(tǒng)參數(shù)對(duì)象是記錄系統(tǒng)基礎(chǔ)屬性如版本、作者、語言等。
(3)系統(tǒng)事件管理對(duì)象:系統(tǒng)事件對(duì)象是由擁有者創(chuàng)建的,并且擁有者在釋放時(shí),系統(tǒng)事件管理對(duì)象也相應(yīng)的釋放。系統(tǒng)事件對(duì)象是由功能控件觸發(fā)的,并根據(jù)配置數(shù)據(jù)依次執(zhí)行注冊(cè)功能控件的入口函數(shù),從而達(dá)到組裝功能控件之間的通信作用。
以上為CMP的核心對(duì)象部分,采用面向?qū)ο罄碚?。所有的存?chǔ)形式全部采用對(duì)象的形式。當(dāng)軟件在某個(gè)領(lǐng)域內(nèi)使用時(shí)會(huì)生產(chǎn)出大量的功能對(duì)象,而這些功能對(duì)象可以通過參數(shù)配置的形式動(dòng)態(tài)組合,完成具體的功能。
構(gòu)件通信是構(gòu)件組裝的核心部分。在目前的構(gòu)件組裝中最難解決的問題之一就是構(gòu)件的通信,目前的構(gòu)件模型的通信方式分為:基于方法調(diào)用(消息傳遞)的組合、插頭插座式組合、基于連接子的構(gòu)件組合[9],并且沒有一個(gè)統(tǒng)一的標(biāo)準(zhǔn)[10]。Kung-Kiu Lau通過分析現(xiàn)有構(gòu)件組裝方法的不足,認(rèn)為構(gòu)件組裝的不足主要表現(xiàn)在消息傳遞上,雖然有人提出了連接器模型及構(gòu)造連接器的復(fù)合方法,但也需要重新編寫連接器。
針對(duì)構(gòu)件組裝后的構(gòu)件通信問題,本文提出的構(gòu)件通信采用反射機(jī)理,通過局部共享池來解決構(gòu)件之間的通信問題。這種方式不需要重新編接口程序,可以極大地提高軟件系統(tǒng)的內(nèi)聚,明顯地降低軟件系統(tǒng)的耦合度。下面分為三個(gè)部分具體介紹CMP的構(gòu)件通信:
(1)反射調(diào)用應(yīng)用,反射調(diào)用是構(gòu)件通信的核心部分,在用戶需要執(zhí)行某個(gè)功能時(shí),某個(gè)單獨(dú)構(gòu)件不足以完成,這時(shí)需要多個(gè)構(gòu)件協(xié)同來完成,構(gòu)件協(xié)同工作需要相互傳遞觸發(fā)事件和傳遞參數(shù),為降低軟件系統(tǒng)的耦合性,引入了反射機(jī)理。反射需要的條件是:路徑、命名空間、類名、事件名稱、參數(shù)值。只要在軟件系統(tǒng)開發(fā)時(shí)把這些配置參數(shù)寫到配置源中,即可通過反射就可以執(zhí)行某個(gè)類中的函數(shù),在CMP中提出使用這種方式來建立構(gòu)件的通信。
(2)CMP構(gòu)件的反射觸發(fā)事件,構(gòu)件觸發(fā)事件指的是在初始化界面完成時(shí),用戶在操作某個(gè)功能時(shí)候所觸發(fā)的事件。通過這個(gè)事件來調(diào)用反射共享池中的某個(gè)構(gòu)件組合。首先構(gòu)件中可能會(huì)存在多個(gè)用戶操作,把每一個(gè)操作起一個(gè)唯一的名稱,這個(gè)名稱就代表一個(gè)完整的用戶操作。其次調(diào)用反射池入口,通過這個(gè)名稱找到反射共享池,找到構(gòu)件組合通行的配置函數(shù)列表,通過反射依次調(diào)用相應(yīng)的構(gòu)件。這樣就完成了構(gòu)件的反射觸發(fā)事件。
圖2 CMP構(gòu)件協(xié)同通信
(3)CMP的構(gòu)件協(xié)同通信。上面兩點(diǎn)完成了CMP構(gòu)件通信的準(zhǔn)備工作,如圖2具體介紹多個(gè)構(gòu)件協(xié)同通信。
如上所述,CMP的構(gòu)件通信采用反射機(jī)理,通過配置參數(shù)的形式實(shí)現(xiàn)構(gòu)件之間的通信功能,這樣減少構(gòu)件之間的相互依賴性。在實(shí)際應(yīng)用中,面對(duì)不斷的需求變化可以重新開發(fā)某個(gè)功能構(gòu)件而不會(huì)影響整個(gè)軟件系統(tǒng)。
本文提出的基于反射機(jī)理的構(gòu)件組裝與通信方法,通過編寫CMP軟件,得到證實(shí),此種方式是可行的。軟件界面如圖3所示,是一個(gè)組裝后的軟件界面,是通過三個(gè)復(fù)合構(gòu)件組裝而形成的,三個(gè)復(fù)合構(gòu)件通過配置參數(shù),以界面為總線單元建立參數(shù)共享池、事件共享池,并進(jìn)行通信。CMP和傳統(tǒng)軟件相比較,構(gòu)件組裝降低了70%的開發(fā)周期時(shí)間和84%的項(xiàng)目成本。
圖3 CMP構(gòu)件組裝軟件
本文在以往的構(gòu)件組裝模型和構(gòu)件開發(fā)模型上,提出一種新型的構(gòu)件組裝方式。本文所提出的構(gòu)件組裝模型,拋棄接口式的構(gòu)件組裝,在CMP軟件平臺(tái)上通過配置參數(shù)創(chuàng)建多個(gè)總線單元模型,并通過配置參數(shù),在總線模型中調(diào)用構(gòu)件中的功能,實(shí)現(xiàn)構(gòu)件的組裝和通信。通過這種模型可以使功能和軟件分離,而通過這種功能和軟件分離的方法給軟件復(fù)用提供了一種新的思想。這種構(gòu)件組裝的模型可以滿足用戶需求的多變性。表1和表2列出本文提出的CMP模型和其它構(gòu)件組裝模型在接口和組裝方式上的區(qū)別。
表1 CMP模型和其它構(gòu)件組裝接口比較
表2 CMP模型和其它構(gòu)件組裝方式比較
在后續(xù)的工作中我們也需要嘗試基于軟件體系結(jié)構(gòu)的推演方法,并結(jié)合面向服務(wù)架構(gòu)的理論,實(shí)現(xiàn)軟件系統(tǒng)平臺(tái)式的半自動(dòng)或智能的分配和管理構(gòu)件的基礎(chǔ)通信功能,使軟件趨向于智能系統(tǒng)。
[1]Will Tracz.Confessions of a Used Program Salesman-Institutionalizing Software Reuse[C].Addison-Wesley Publishing Co.,New York,NY,April 1995.
[2]呂建,張鳴,廖宇,等.基于移動(dòng)Agent技術(shù)的構(gòu)件軟件框架研究[J].軟件學(xué)報(bào),2000,11(8):1018-1023.
[3]楊芙清,梅宏,李克勤,等.支持構(gòu)件復(fù)用的青鳥III型系統(tǒng)概述[J].計(jì)算機(jī)科學(xué),1999,26(5):50-55.
[4]Roger S Pressman.Software Engineering:A Practitioner’sApproach[M].NewYork:McGraw-Hill Higher Education,2001.
[5]K Lau,P V Elizondo,Wang Z.Exogenous connectors for software Components[C].In Proceedings of 8th International Symposium on Component Based Software Engineering,Springer-Verlag,2005:90-106.
[6]Gan Guohua,Sun Changsong.A Component Composition Description Language Based on XML[C].Proceedings of the International Workshop on Modern Science and Technology Kitami,Japan,2004,9.
[7]于海.基于J2EE構(gòu)架的生產(chǎn)物流管理系統(tǒng)的研究與實(shí)現(xiàn)[D].天津:南開大學(xué),2012.
[8]侯立華,寧汝新.J2EE平臺(tái)上的PDM系統(tǒng)構(gòu)件設(shè)計(jì)[J].北京理工大學(xué)學(xué)報(bào),2003(2):181-185.
[9]陳波.基于軟件體系結(jié)構(gòu)的構(gòu)件模型和語言研究[D].長(zhǎng)沙:國防科學(xué)技術(shù)大學(xué),2007.
[10]Ravichandran T.Organizational Assimilation of Complex Technologies:An Empirical Study of Component-Based Software Development[J].IEEE Transactions on Engineering Management,2005,52(2):249-268.