祁華成 陸英
摘 要:構(gòu)件化軟件一直面臨著構(gòu)件組裝過程的失配問題。對此,本文利用形式化方法建立了構(gòu)件接口模型,提出了端口同構(gòu)群和等價端口的概念,并證明了交互構(gòu)件之間通過等價端口實現(xiàn)相互通信。最后,通過實例應(yīng)用闡述了構(gòu)件端口適配方法步驟,建立適配器解決等價端口的失配問題,為構(gòu)件化軟件接口之間的不匹配提供了一種可行的解決方法。
關(guān)鍵詞:件接口模型;同構(gòu)群;等價端口;適配器
中圖分類號:TP3-0 文獻標識碼: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]概念的提出,通過組裝已有構(gòu)件產(chǎn)生新的軟件,焦點在于復(fù)用,復(fù)用有三方面的要求:構(gòu)件實體具有通用性、構(gòu)件功能具有完備性、構(gòu)件接口具有兼容性[2]。由于這三方面相互對立,因此,組裝第三方構(gòu)件失配現(xiàn)象是不可避免的,本文工作重點是自動化生產(chǎn)構(gòu)件端口適配器解決構(gòu)件接口失配問題。
為了增強構(gòu)件的復(fù)用度,國內(nèi)一些學(xué)者從二進制代碼重用[3]、特定領(lǐng)域軟件復(fù)用[4]、模型驅(qū)動簡化自適應(yīng)系統(tǒng)[5]出發(fā)做了相關(guān)研究,目前,已有大量工作研究構(gòu)件適配方法并延伸到Web服務(wù)等領(lǐng)域,從適配方法上分為限制性方法和生成性方法[6],限制性方法是指從構(gòu)件協(xié)議中刪除引起失配路徑的方法,缺點是構(gòu)件喪失了部分功能,可能導(dǎo)致不可預(yù)測的失陪問題;生成性方法是指不更改構(gòu)件行為與功能,通過重排序消息及數(shù)據(jù)生成適配器協(xié)調(diào)的方法,優(yōu)點保留構(gòu)件功能完備性,缺點是需要修改構(gòu)件接口語法,目前的研究主要使用生成性方法。針對接口失配,文獻[7]探討了如何在接口映射前提下,依賴于分析有限狀態(tài)機的所有執(zhí)行軌跡生成適配器;文獻[8]基于PI演算描述構(gòu)件接口行為,然后給出適配器生成方法,該方法只能解決二元適配問題,并且計算復(fù)雜性較高;文獻[9]基于接口映射規(guī)則生成Web服務(wù)適配器,該方法產(chǎn)生的適配器沒有控制邏輯,一方面不能解決復(fù)雜Web服務(wù)適配場景,另一方面算復(fù)雜度高;文獻[10]利用面向方面的編程技術(shù)把適配方面織入到需適配的Web服務(wù)中,對失配模式進行了分類,闡述每種失配解決的適配思想,該方法需要了了解構(gòu)件的內(nèi)部結(jié)構(gòu)。這些研究存在著很大的改進空間:(1)計算復(fù)雜度高,只是部分緩解了適配的壓力;(2)需要了解構(gòu)件內(nèi)部行為,弱化了構(gòu)件黑盒子原則;(3)忽略了構(gòu)件適配可以劃分難度級別:接口層、行為層、語義層,構(gòu)件接口是構(gòu)件組裝交互的唯一通道,接口層適配是構(gòu)件化軟件的首選。
針對以上的分析,本文利用形式化方法建立了構(gòu)件接口模型,提出了基于同構(gòu)群的構(gòu)件接口適配方法,并證明了交互構(gòu)件之間通過等價端口實現(xiàn)相互通信,并給出了完整的適配步驟,一方面將構(gòu)件適配限制在接口層,降低了構(gòu)件適配的復(fù)雜度;另一方面遵循構(gòu)件化組裝黑盒子原則,提高了構(gòu)件復(fù)用度。
2 構(gòu)件接口模型(Component interface model)
構(gòu)件接口特指構(gòu)件之間聯(lián)接的語法規(guī)定,獨立于構(gòu)件行為與功能,分離于構(gòu)件的實現(xiàn)。構(gòu)件接口是由一組端口構(gòu)成的集合,每個端口包含端口的名稱,參數(shù)名稱、參數(shù)類型、返回類型、及異常類型。
定義2.1 端口(Port)。端口是一個四元組,Port:=
Port_name表示端口名稱;
Parameter_map是一組參數(shù)類型和參數(shù)名組成的有序集合,記為:
Return_type表示Port返回值類型;
Exception_type表示端口可能發(fā)生的異常類型。
根據(jù)提供消息的方向,可以將Port分為輸入端口和輸出端口,分別記為:Input_port和Output_port;從提供的服務(wù)范圍可分為啞端口和顯端口啞端口僅為構(gòu)件本身提供服務(wù),顯端口是指與外界進行信息交流的端口。
定義2.2 接口(Interface)。接口是一個四元組,Interface :=
interface是所有接口的標示符;
Interface_name表示接口的名稱,在同一域中,它是具有唯一性;
Onput_port_set是輸出端口構(gòu)成的集合;
Input_port_set是輸入端口構(gòu)成的集合。
接口是構(gòu)件與外界交流的唯一通道。
3 同構(gòu)群及等價端口(Isomorphic group,equivalent
port)
構(gòu)件之間接口相互通信前提接口中的端口之間需要具有兼容性,同構(gòu)群是一個集合,用其判斷構(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中的元素個數(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中的元素順序一一對應(yīng)。
定義3.3 端口集合(Ports)。Ports是由端口的返回值類型、參數(shù)類型,以及異常類型構(gòu)成的有序集合,并且端口中的返回值類型、參數(shù)類型、異常類型的順序與Ports中的元素順序一一對應(yīng)。
由端口集合的定義可知,Ports與集合{Return_type,Port_parameter_set,Exception_type}是一一對應(yīng)的。
定義3.4 端口同構(gòu)群(Port_isomorphic_group)。假設(shè)Port 為一個端口,Port_parameter_set為對應(yīng)的端口參數(shù)集合,由Port_parameter_set對應(yīng)的群的每個元素前后分別加入Return_type,Exception_type構(gòu)成的一個特殊的群稱為端口同構(gòu)群。
例如:一個端口為int before(boolean arg0,Object[] arg1,boolean arg2)throws IOException.可得對應(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)群是一個以端口參數(shù)集合為基礎(chǔ)的特殊同構(gòu)群;
(2)端口同構(gòu)群與端口參數(shù)集合對應(yīng)的同構(gòu)群的元素個數(shù)相同,為|Port_parameter_set|!/|boolean|!=3!/2!=3;
(3)端口集合是端口同構(gòu)群中的一個元素,即Ports∈Port_isomorphic_group。
定義3.5 等價端口(Equivalent_Port)。假設(shè)兩個端口(Port1,Port2),如果Port1與Port2對應(yīng)的端口集合屬于同一端口同構(gòu)群,稱Port1與Port2之間具有等價性,具有等價性的端口稱為等價端口。
根據(jù)定義3.5可知:等價端口的實質(zhì)就是端口同構(gòu)群元素之間的關(guān)系。
定理1 交互構(gòu)件之間通過等價端口實現(xiàn)相互通信。
證明:假設(shè)交互構(gòu)件對應(yīng)的兩個端口(Port1,Port2)是等價端口,根據(jù)定義3.5=>Port1,Port2屬于同一端口同構(gòu)群,由定義3.4和定義3.3=>Port1,Port2 返回值類型、異常類型一致,且Port1端口參數(shù)集合與Port2端口參數(shù)集合的參數(shù)類型與個數(shù)具有一致性,差別在于參數(shù)順序不同,因此,Port1,Port2僅需重構(gòu)端口順序便可實現(xiàn)相互通信。
定理1拓寬了構(gòu)件本體復(fù)用的兼容性,將具有兩項特征的構(gòu)件視為同質(zhì)構(gòu)件,即功能相同和端口等價。
4 構(gòu)件接口適配方法(Adaptation method of
component interface)
構(gòu)件之間交互,首先,構(gòu)件檢索條件是Interface中的Port返回值類型必須滿足需求;其次,Port中的異常必須與需求的異常是同質(zhì)的即同種類型的異常包括異常的子類型;最后,Port參數(shù)類型與順序必須滿足需求。
基于同構(gòu)群的構(gòu)件接口適配分為四個步驟(自動化工具完成):
第一步:建立Input_port對應(yīng)的集合(Input_Ports),根據(jù)Input_Ports得到端口同構(gòu)群(Inputport_isomorphic_group);
第二步:建立Output_port對應(yīng)的集合(Output_Ports),根據(jù)構(gòu)件維度匹配檢索的算法限制,Output_Ports一定是Inputport_isomorphic_group元素,如果Input_Ports與Output_Ports對應(yīng)Inputport_isomorphic_group中的同一元素,直接返回不需適配,否則,進入第三步;
第三步:以Input_port為端口,以O(shè)utput_port為被調(diào)用端口建立適配器,因為Input_port與Output_port是等價端口,故適配器得到很簡單的;
第四步:測試并修改構(gòu)件接口(Interface)對應(yīng)的規(guī)格說明。
基于驅(qū)動器的構(gòu)件接口適配的實質(zhì)是接口中端口的參數(shù)順序調(diào)整的過程。
5 實例應(yīng)用研究(Application research)
為了闡明本文提出的基于同構(gòu)群的構(gòu)件接口適配方法,我們采用構(gòu)件化技術(shù)自行開發(fā)了Java Web應(yīng)用程序:資源管理系統(tǒng),該系統(tǒng)業(yè)務(wù)層由34個構(gòu)件組裝而成,構(gòu)件集合用CS表示:
CS={CardAction,CardBean,CardDao,CardForm,Retrieve,ApplicationResources,UserAction,UserBean,UserdDao,
UserForm,DBPool,PageBean,Pagination,db,…}
為了盡可能簡化實例,僅以CS中的一個構(gòu)件即數(shù)據(jù)持久層中的db接口為例,db接口包括四個端口(Insert、delete、update、select)增、刪、改、查端口。如表1所示,構(gòu)件交互輸入與輸出update端口。輸入與輸出端口update之間不能進行組裝使用,因此需要對端口進行適配。
表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}}
再次,判斷輸入端口與輸出端口是否等價端口,輸入端口集合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是等價端口,根據(jù)定理1=>供、需update端口之間可以通過適配端口進行調(diào)用。
最后,建立適配器Adapter_update,實現(xiàn)輸入與輸出update端口之間通信,如圖1所示。update端口適配,該適配器通過工具自動生成。
6 結(jié)論(Conclusion)
本文面向構(gòu)件化軟件開發(fā)模式,針對構(gòu)件接口之間的交互,基于同構(gòu)群理論,提出了一種基于同構(gòu)群的構(gòu)件接口適配方法。此方法根據(jù)同構(gòu)群理論給出等價端口的定義,同時證明了交互構(gòu)件之間通過等價端口實現(xiàn)相互通信等,其適配實質(zhì)是端口的參數(shù)不兼容性修改的過程,通過自動化生成適配器解決等價端口的失配問題,為構(gòu)件化軟件語法之間的不匹配提供了一種可行的解決方法。
參考文獻(References)
[1] 楊芙清,呂建,梅宏.網(wǎng)構(gòu)軟件技術(shù)體系:一種以體系結(jié)構(gòu)為中心的途徑[J].中國科學(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] 彭國軍,梁玉,張煥國,等.軟件二進制代碼重用技術(shù)綜述[J].軟件學(xué)報,2017,28(8):2026-2045.
[4] 于文靜,趙海燕,張偉,等.基于特征模型的軟件產(chǎn)品自動導(dǎo)出方法綜述[J].軟件學(xué)報,2016,27(1):26-44.
[5] 趙天琪,趙海燕,張偉,等.基于模型的自適應(yīng)方法綜述[J].軟件學(xué)報,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.
作者簡介:
祁華成(1983-),男,碩士,系統(tǒng)架構(gòu)設(shè)計師.研究領(lǐng)域:軟件體系結(jié)構(gòu),構(gòu)件技術(shù).
陸 英(1978-),女,碩士,高級講師.研究領(lǐng)域:軟件工程.