祁華成 陸英
摘 要:構(gòu)件化軟件一直面臨著構(gòu)件組裝過(guò)程的失配問題。對(duì)此,本文利用形式化方法建立了構(gòu)件接口模型,提出了端口同構(gòu)群和等價(jià)端口的概念,并證明了交互構(gòu)件之間通過(guò)等價(jià)端口實(shí)現(xiàn)相互通信。最后,通過(guò)實(shí)例應(yīng)用闡述了構(gòu)件端口適配方法步驟,建立適配器解決等價(jià)端口的失配問題,為構(gòu)件化軟件接口之間的不匹配提供了一種可行的解決方法。
關(guān)鍵詞:件接口模型;同構(gòu)群;等價(jià)端口;適配器
中圖分類號(hào):TP3-0 文獻(xiàn)標(biāo)識(shí)碼:A
Abstract:Component-based software is always facing the problem of mismatch in assembly process.To solve this problem,component interface model is established using the formal method,the concept of port isomorphic group and equivalent port are proposed.It proves that the equivalent ports can call each other through the reconfiguration port in the paper.Through an example,the steps of component port adaptation are given,and the adapter solves the problem of the mismatch of the equivalent port,which provides a feasible solution for the mismatch between the component-based software syntax.
Keywords:component interface model;isomorphic group;equivalent port;adapter
1 引言(Introduction)
隨著Web服務(wù)和網(wǎng)構(gòu)軟件[1]概念的提出,通過(guò)組裝已有構(gòu)件產(chǎn)生新的軟件,焦點(diǎn)在于復(fù)用,復(fù)用有三方面的要求:構(gòu)件實(shí)體具有通用性、構(gòu)件功能具有完備性、構(gòu)件接口具有兼容性[2]。由于這三方面相互對(duì)立,因此,組裝第三方構(gòu)件失配現(xiàn)象是不可避免的,本文工作重點(diǎn)是自動(dòng)化生產(chǎn)構(gòu)件端口適配器解決構(gòu)件接口失配問題。
為了增強(qiáng)構(gòu)件的復(fù)用度,國(guó)內(nèi)一些學(xué)者從二進(jìn)制代碼重用[3]、特定領(lǐng)域軟件復(fù)用[4]、模型驅(qū)動(dòng)簡(jiǎn)化自適應(yīng)系統(tǒng)[5]出發(fā)做了相關(guān)研究,目前,已有大量工作研究構(gòu)件適配方法并延伸到Web服務(wù)等領(lǐng)域,從適配方法上分為限制性方法和生成性方法[6],限制性方法是指從構(gòu)件協(xié)議中刪除引起失配路徑的方法,缺點(diǎn)是構(gòu)件喪失了部分功能,可能導(dǎo)致不可預(yù)測(cè)的失陪問題;生成性方法是指不更改構(gòu)件行為與功能,通過(guò)重排序消息及數(shù)據(jù)生成適配器協(xié)調(diào)的方法,優(yōu)點(diǎn)保留構(gòu)件功能完備性,缺點(diǎn)是需要修改構(gòu)件接口語(yǔ)法,目前的研究主要使用生成性方法。針對(duì)接口失配,文獻(xiàn)[7]探討了如何在接口映射前提下,依賴于分析有限狀態(tài)機(jī)的所有執(zhí)行軌跡生成適配器;文獻(xiàn)[8]基于PI演算描述構(gòu)件接口行為,然后給出適配器生成方法,該方法只能解決二元適配問題,并且計(jì)算復(fù)雜性較高;文獻(xiàn)[9]基于接口映射規(guī)則生成Web服務(wù)適配器,該方法產(chǎn)生的適配器沒有控制邏輯,一方面不能解決復(fù)雜Web服務(wù)適配場(chǎng)景,另一方面算復(fù)雜度高;文獻(xiàn)[10]利用面向方面的編程技術(shù)把適配方面織入到需適配的Web服務(wù)中,對(duì)失配模式進(jìn)行了分類,闡述每種失配解決的適配思想,該方法需要了了解構(gòu)件的內(nèi)部結(jié)構(gòu)。這些研究存在著很大的改進(jìn)空間:(1)計(jì)算復(fù)雜度高,只是部分緩解了適配的壓力;(2)需要了解構(gòu)件內(nèi)部行為,弱化了構(gòu)件黑盒子原則;(3)忽略了構(gòu)件適配可以劃分難度級(jí)別:接口層、行為層、語(yǔ)義層,構(gòu)件接口是構(gòu)件組裝交互的唯一通道,接口層適配是構(gòu)件化軟件的首選。
針對(duì)以上的分析,本文利用形式化方法建立了構(gòu)件接口模型,提出了基于同構(gòu)群的構(gòu)件接口適配方法,并證明了交互構(gòu)件之間通過(guò)等價(jià)端口實(shí)現(xiàn)相互通信,并給出了完整的適配步驟,一方面將構(gòu)件適配限制在接口層,降低了構(gòu)件適配的復(fù)雜度;另一方面遵循構(gòu)件化組裝黑盒子原則,提高了構(gòu)件復(fù)用度。
2 構(gòu)件接口模型(Component interface model)
構(gòu)件接口特指構(gòu)件之間聯(lián)接的語(yǔ)法規(guī)定,獨(dú)立于構(gòu)件行為與功能,分離于構(gòu)件的實(shí)現(xiàn)。構(gòu)件接口是由一組端口構(gòu)成的集合,每個(gè)端口包含端口的名稱,參數(shù)名稱、參數(shù)類型、返回類型、及異常類型。
定義2.1 端口(Port)。端口是一個(gè)四元組,Port:=
Port_name表示端口名稱;
Parameter_map是一組參數(shù)類型和參數(shù)名組成的有序集合,記為:
Return_type表示Port返回值類型;
Exception_type表示端口可能發(fā)生的異常類型。
根據(jù)提供消息的方向,可以將Port分為輸入端口和輸出端口,分別記為:Input_port和Output_port;從提供的服務(wù)范圍可分為啞端口和顯端口啞端口僅為構(gòu)件本身提供服務(wù),顯端口是指與外界進(jìn)行信息交流的端口。
定義2.2 接口(Interface)。接口是一個(gè)四元組,Interface :=
interface是所有接口的標(biāo)示符;
Interface_name表示接口的名稱,在同一域中,它是具有唯一性;
Onput_port_set是輸出端口構(gòu)成的集合;
Input_port_set是輸入端口構(gòu)成的集合。
接口是構(gòu)件與外界交流的唯一通道。
3 同構(gòu)群及等價(jià)端口(Isomorphic group,equivalent
port)
構(gòu)件之間接口相互通信前提接口中的端口之間需要具有兼容性,同構(gòu)群是一個(gè)集合,用其判斷構(gòu)件端口之間的兼容性,其定義如下:
定義3.1 同構(gòu)群(Isomorphic_group)。設(shè)集合S={s1,s2,s3,…,sn},以S的元素全排列為元素構(gòu)成的集合稱為S的同構(gòu)群,記為:Isomorphic_group_S。
可得出,S∈Isomorphic_group_S,Isomorphic_group_S中的元素個(gè)數(shù)為|S|!。例如:S={1,2,3},則可以推出Isomorphic_group_S={{1,2,3},{2,3,1},{3,1,2,},{1,3,2},{2,1,3},{3,2,1,}}。
為了判斷構(gòu)件端口之間的兼容性,本文提出了端口參數(shù)集合、端口集合和端口同構(gòu)群概念,其定義如下:
定義3.2 端口參數(shù)集合(Port_parameter_set)。Port_parameter_set是由端口(Port)參數(shù)類型構(gòu)成的有序集合,并且Port中的參數(shù)類型的順序與Port_parameter_set中的元素順序一一對(duì)應(yīng)。
定義3.3 端口集合(Ports)。Ports是由端口的返回值類型、參數(shù)類型,以及異常類型構(gòu)成的有序集合,并且端口中的返回值類型、參數(shù)類型、異常類型的順序與Ports中的元素順序一一對(duì)應(yīng)。
由端口集合的定義可知,Ports與集合{Return_type,Port_parameter_set,Exception_type}是一一對(duì)應(yīng)的。
定義3.4 端口同構(gòu)群(Port_isomorphic_group)。假設(shè)Port 為一個(gè)端口,Port_parameter_set為對(duì)應(yīng)的端口參數(shù)集合,由Port_parameter_set對(duì)應(yīng)的群的每個(gè)元素前后分別加入Return_type,Exception_type構(gòu)成的一個(gè)特殊的群稱為端口同構(gòu)群。
例如:一個(gè)端口為int before(boolean arg0,Object[] arg1,boolean arg2)throws IOException.可得對(duì)應(yīng)的Port_parameter_set={boolean,Object[],boolean,}與Port_isomorphic_group={{int,boolean,Object[],boolean,IOException},{int,boolean,boolean,Object[],IOException},{int,Object[],boolean,boolean,IOException}}。
由端口集合及端口同構(gòu)群可知:
(1)端口同構(gòu)群是一個(gè)以端口參數(shù)集合為基礎(chǔ)的特殊同構(gòu)群;
(2)端口同構(gòu)群與端口參數(shù)集合對(duì)應(yīng)的同構(gòu)群的元素個(gè)數(shù)相同,為|Port_parameter_set|!/|boolean|!=3!/2!=3;
(3)端口集合是端口同構(gòu)群中的一個(gè)元素,即Ports∈Port_isomorphic_group。
定義3.5 等價(jià)端口(Equivalent_Port)。假設(shè)兩個(gè)端口(Port1,Port2),如果Port1與Port2對(duì)應(yīng)的端口集合屬于同一端口同構(gòu)群,稱Port1與Port2之間具有等價(jià)性,具有等價(jià)性的端口稱為等價(jià)端口。
根據(jù)定義3.5可知:等價(jià)端口的實(shí)質(zhì)就是端口同構(gòu)群元素之間的關(guān)系。
定理1 交互構(gòu)件之間通過(guò)等價(jià)端口實(shí)現(xiàn)相互通信。
證明:假設(shè)交互構(gòu)件對(duì)應(yīng)的兩個(gè)端口(Port1,Port2)是等價(jià)端口,根據(jù)定義3.5=>Port1,Port2屬于同一端口同構(gòu)群,由定義3.4和定義3.3=>Port1,Port2 返回值類型、異常類型一致,且Port1端口參數(shù)集合與Port2端口參數(shù)集合的參數(shù)類型與個(gè)數(shù)具有一致性,差別在于參數(shù)順序不同,因此,Port1,Port2僅需重構(gòu)端口順序便可實(shí)現(xiàn)相互通信。
定理1拓寬了構(gòu)件本體復(fù)用的兼容性,將具有兩項(xiàng)特征的構(gòu)件視為同質(zhì)構(gòu)件,即功能相同和端口等價(jià)。
4 構(gòu)件接口適配方法(Adaptation method of
component interface)
構(gòu)件之間交互,首先,構(gòu)件檢索條件是Interface中的Port返回值類型必須滿足需求;其次,Port中的異常必須與需求的異常是同質(zhì)的即同種類型的異常包括異常的子類型;最后,Port參數(shù)類型與順序必須滿足需求。
基于同構(gòu)群的構(gòu)件接口適配分為四個(gè)步驟(自動(dòng)化工具完成):
第一步:建立Input_port對(duì)應(yīng)的集合(Input_Ports),根據(jù)Input_Ports得到端口同構(gòu)群(Inputport_isomorphic_group);
第二步:建立Output_port對(duì)應(yīng)的集合(Output_Ports),根據(jù)構(gòu)件維度匹配檢索的算法限制,Output_Ports一定是Inputport_isomorphic_group元素,如果Input_Ports與Output_Ports對(duì)應(yīng)Inputport_isomorphic_group中的同一元素,直接返回不需適配,否則,進(jìn)入第三步;
第三步:以Input_port為端口,以O(shè)utput_port為被調(diào)用端口建立適配器,因?yàn)镮nput_port與Output_port是等價(jià)端口,故適配器得到很簡(jiǎn)單的;
第四步:測(cè)試并修改構(gòu)件接口(Interface)對(duì)應(yīng)的規(guī)格說(shuō)明。
基于驅(qū)動(dòng)器的構(gòu)件接口適配的實(shí)質(zhì)是接口中端口的參數(shù)順序調(diào)整的過(guò)程。
5 實(shí)例應(yīng)用研究(Application research)
為了闡明本文提出的基于同構(gòu)群的構(gòu)件接口適配方法,我們采用構(gòu)件化技術(shù)自行開發(fā)了Java Web應(yīng)用程序:資源管理系統(tǒng),該系統(tǒng)業(yè)務(wù)層由34個(gè)構(gòu)件組裝而成,構(gòu)件集合用CS表示:
CS={CardAction,CardBean,CardDao,CardForm,Retrieve,ApplicationResources,UserAction,UserBean,UserdDao,
UserForm,DBPool,PageBean,Pagination,db,…}
為了盡可能簡(jiǎn)化實(shí)例,僅以CS中的一個(gè)構(gòu)件即數(shù)據(jù)持久層中的db接口為例,db接口包括四個(gè)端口(Insert、delete、update、select)增、刪、改、查端口。如表1所示,構(gòu)件交互輸入與輸出update端口。輸入與輸出端口update之間不能進(jìn)行組裝使用,因此需要對(duì)端口進(jìn)行適配。
表1 端口及集合元素
Tab.1 Port and sets
端口 端口及集合元素
輸入端口 public static boolean update(int Id,ArrayList list,boolean return) throws IOException
輸出端口 public static boolean update(ArrayList list,int Id,boolean return) throws IOException
首先,檢查輸入端口和輸出端口的返回值類型、異常是否同質(zhì),由表1可以得出需求端口和提供端口的返回值類型、異常是同質(zhì):public static boolean、IOException。
其次,為輸入端口建立端口參數(shù)集合update_parameter_set={int,ArrayList,boolean}。端口同構(gòu)群update_isomorphic_group={{boolean,int,ArrayList,boolean,IOException},{boolean,int,Boolean,ArrayList,IOException},{boolean,ArrayList,int,boolean,IOException},{boolean,ArrayList,boolean,int,IOException},{boolean,Boolean,int,ArrayList,IOException},{boolean,boolean,ArrayList,int,IOException}}
再次,判斷輸入端口與輸出端口是否等價(jià)端口,輸入端口集合Input_update_ports={Boolean,int,ArrayList,boolean,IOException},輸出端口集合Output_update_ports={Boolean,ArrayList,int,boolean,IOException},由于Input_update_ports與Onput_update_ports同屬于同一端口同構(gòu)群update_isomorphic_group。因此,Input_update_port與Onput_update_port是等價(jià)端口,根據(jù)定理1=>供、需update端口之間可以通過(guò)適配端口進(jìn)行調(diào)用。
最后,建立適配器Adapter_update,實(shí)現(xiàn)輸入與輸出update端口之間通信,如圖1所示。update端口適配,該適配器通過(guò)工具自動(dòng)生成。
6 結(jié)論(Conclusion)
本文面向構(gòu)件化軟件開發(fā)模式,針對(duì)構(gòu)件接口之間的交互,基于同構(gòu)群理論,提出了一種基于同構(gòu)群的構(gòu)件接口適配方法。此方法根據(jù)同構(gòu)群理論給出等價(jià)端口的定義,同時(shí)證明了交互構(gòu)件之間通過(guò)等價(jià)端口實(shí)現(xiàn)相互通信等,其適配實(shí)質(zhì)是端口的參數(shù)不兼容性修改的過(guò)程,通過(guò)自動(dòng)化生成適配器解決等價(jià)端口的失配問題,為構(gòu)件化軟件語(yǔ)法之間的不匹配提供了一種可行的解決方法。
參考文獻(xiàn)(References)
[1] 楊芙清,呂建,梅宏.網(wǎng)構(gòu)軟件技術(shù)體系:一種以體系結(jié)構(gòu)為中心的途徑[J].中國(guó)科學(xué)E輯:信息科學(xué),2008,38(6):2991-3000.
[2] S.Becker,A.Brogi,I.Gorton,et al.Towards an Engineering Approach to Component Adaptation[C].Proc of Architecting Systems with Trustworthy Components,Springer-Verlag Berlin Heidelberg,2006:193-215.
[3] 彭國(guó)軍,梁玉,張煥國(guó),等.軟件二進(jìn)制代碼重用技術(shù)綜述[J].軟件學(xué)報(bào),2017,28(8):2026-2045.
[4] 于文靜,趙海燕,張偉,等.基于特征模型的軟件產(chǎn)品自動(dòng)導(dǎo)出方法綜述[J].軟件學(xué)報(bào),2016,27(1):26-44.
[5] 趙天琪,趙海燕,張偉,等.基于模型的自適應(yīng)方法綜述[J].軟件學(xué)報(bào),2018,29(1):23-41.
[6] Radu Mateescu.Adaptation of service protocols using process algebra and on-the-fly reduction technique[J].IEEE Trans.On Software Engineering,2012,38(4):755-777.
[7] Yellin DM,Strom RE.Protocol specifications and component adapters[J].ACM Trans on Programming Languages and Systems,1997,19(2):292-333.
[8] Bracciali A,Brogi A.A formal approach to component adaptation[J].Journal of System and Software,2005,74(1):45-54.
[9] Li XT,F(xiàn)an YS.A pattern-based approach to protocol mediation for Web services composition[J].Information and Software Technology,2010,52(3):304-323.
[10] Kongdenfa W,N ezhda H.Mismatch patterns and adaptation aspects:a foundation for rapid development of Web service adapter[J].IEEE Trans.on Services Computing,2009,2(2):94-107.
作者簡(jiǎn)介:
祁華成(1983-),男,碩士,系統(tǒng)架構(gòu)設(shè)計(jì)師.研究領(lǐng)域:軟件體系結(jié)構(gòu),構(gòu)件技術(shù).
陸 英(1978-),女,碩士,高級(jí)講師.研究領(lǐng)域:軟件工程.