解 芳,張凌宇,許 靜,王 巖,任建輝
(北京自動化控制設(shè)備研究所,北京 100074)
一種基于適配器模式的慣導(dǎo)軟件設(shè)計方法
解 芳,張凌宇,許 靜,王 巖,任建輝
(北京自動化控制設(shè)備研究所,北京 100074)
隨著軟件任務(wù)的不斷增多,傳統(tǒng)的軟件設(shè)計開發(fā)和維護(hù)模式已無法滿足日益增長的任務(wù)要求,亟待進(jìn)一步提高軟件的復(fù)用程度。針對慣導(dǎo)系統(tǒng)軟件接口設(shè)計,提出了一種基于適配器模式的慣導(dǎo)軟件設(shè)計方法。該方法采用動多態(tài)適配器和靜多態(tài)適配器技術(shù),提高了軟件開發(fā)效率,接口的定義靈活可靠,解決了軟件開發(fā)過程中面臨的可擴(kuò)展性差、可重用性差、難于維護(hù)等問題。
適配器設(shè)計模式;慣導(dǎo)軟件
軟件業(yè)的發(fā)展不僅要求軟件有更高的生產(chǎn)率和可靠性,而且對軟件的可重用性和可維護(hù)性也提出了更高的要求。設(shè)計模式主要用于解決軟件開發(fā)過程中重復(fù)發(fā)生的問題,每一個設(shè)計模式都可以被應(yīng)用于任何系統(tǒng),因為它集中于一個特定的面向?qū)ο笤O(shè)計問題或設(shè)計要點,描述了什么時候使用它,以及使用的效果和如何取舍等,是軟件設(shè)計過程中的設(shè)計經(jīng)驗。
設(shè)計模式主要分3個類型:結(jié)構(gòu)型(Structural),創(chuàng)建型(Creational)和行為型(Behavioral)。其中,結(jié)構(gòu)型模式主要用于如何組合已有的類和對象而獲得的結(jié)構(gòu),一般借鑒封裝、代理、多繼承等概念,將一個或多個類或?qū)ο筮M(jìn)行封裝以提供統(tǒng)一的外部視圖或新的功能。常見的有適配器模式(Adapter)、合式模式(Composite)、橋接模式(Bridge)、裝飾模式(Decorator)等。
相對于其他模式,適配器模式主要是為了解決2個已有接口之間不匹配的問題。該模式不考慮這些接口是怎樣實現(xiàn)的,也不考慮各自可能會如何演化,從而不需要對2個獨立設(shè)計的類中的任意一個進(jìn)行重新設(shè)計,就能夠使它們協(xié)同工作。
適配器模式將一個接口轉(zhuǎn)換成另外的接口,使原本因為接口不兼容而不能一起工作的接口實現(xiàn)在一起工作。適配器模式分為類適配器和對象適配器兩種方式,其中類適配器使用多重繼承對一個接口和另一個接口進(jìn)行匹配,如圖1所示;對象適配器依賴于對象組合,如圖2所示。
圖1 類適配器說明Fig.1 Class adapter illustration
圖2 對象適配器說明Fig.2 Object adapter illustration
圖1、圖2中,Target為定義Client使用的與特定領(lǐng)域相關(guān)的接口,是已發(fā)布的接口;Client使用已發(fā)布接口的部件與Target接口的對象協(xié)同;Adaptee為定義一個已經(jīng)存在的接口新增加的功能,這個接口需要適配,Adapter對Adaptee的接口與Target接口進(jìn)行適配。Client在Adapter實例上調(diào)用一些操作,接著適配器調(diào)用Adaptee的操作實現(xiàn)這個請求。
以典型的捷聯(lián)慣導(dǎo)系統(tǒng)為例,慣導(dǎo)系統(tǒng)軟件典型外部接口如圖3所示。慣導(dǎo)系統(tǒng)與陀螺、控制電路、衛(wèi)星接收機(jī)、測試設(shè)備的通信接口為RS-422接口、慣導(dǎo)系統(tǒng)與制導(dǎo)計算機(jī)的接口為1553B接口,慣導(dǎo)系統(tǒng)與溫度傳感器的接口為I/O接口。慣導(dǎo)系統(tǒng)軟件如何設(shè)計通用接口以滿足外部接口的多樣性,是慣導(dǎo)系統(tǒng)軟件設(shè)計亟待解決的問題。
圖3 慣導(dǎo)系統(tǒng)軟件外部接口示意圖Fig.3 Schematic diagram of inertial navigation software external interface
在面向?qū)ο蠹夹g(shù)中,對象通過接口與外部交流,對象接口與其功能實現(xiàn)是分離的,不同對象可以對請求做不同的實現(xiàn),相同的接口也可以有完全不同的實現(xiàn)。由于慣導(dǎo)系統(tǒng)軟件的接口類型較多,硬件設(shè)備提供的設(shè)備驅(qū)動軟件接口定義不一致,因此,使用適配器模式適配各種驅(qū)動接口,可以隔離硬件驅(qū)動的內(nèi)部變化,使慣導(dǎo)系統(tǒng)軟件具備可靠的移植能力,高效的復(fù)用性及可擴(kuò)展性。
2.1 適配器設(shè)計模式下的慣導(dǎo)軟件設(shè)計實現(xiàn)
當(dāng)前慣導(dǎo)系統(tǒng)導(dǎo)航計算機(jī)在硬件接口層中,多數(shù)項目將相關(guān)的硬件協(xié)議及軟件協(xié)議層等通過相關(guān)的FPGA進(jìn)行實現(xiàn),即已經(jīng)具備相應(yīng)的各類硬件接口的實現(xiàn)。慣導(dǎo)系統(tǒng)軟件只需要完成數(shù)據(jù)的交互及狀態(tài)判斷等設(shè)計。經(jīng)過分析,只需對軟件數(shù)據(jù)交互接口進(jìn)行相關(guān)分析及設(shè)計,其中包括I/O接口、內(nèi)存接口等數(shù)據(jù)交互。因此通過使用適配器模式設(shè)計通用接口適配相應(yīng)的各類硬件接口,從而完成接口的設(shè)計與實現(xiàn)。
下面以實例形式分別實現(xiàn)適配器模式中的類適配器和對象適配器。其中,通過繼承和虛函數(shù)(動多態(tài),dynamic polymorphism)來實現(xiàn)類適配器。通過模板的泛型標(biāo)記,可關(guān)聯(lián)不同的特定行為(靜多態(tài),static polymorphism)來實現(xiàn)對象適配器。通過比較說明和分析實現(xiàn)各自的特點,并提出組合實現(xiàn)方案。
2.1.1 類適配器的動多態(tài)實現(xiàn)
類適配器的設(shè)計思想是對幾個相關(guān)對象的類型,確定相關(guān)的共同功能集,然后在基類中,把這些共同的功能聲明為多個虛函數(shù)接口。該方法的特點是能夠處理異類集合,可執(zhí)行代碼大小相對較小。類適配器的動多態(tài)說明圖如圖4所示。
圖4 類適配器的動多態(tài)說明Fig.4 Dynamic polymorphic illustration of Class adapter
系統(tǒng)接口動多態(tài)設(shè)計示意圖如圖5所示。
圖5 系統(tǒng)接口動多態(tài)設(shè)計示意圖Fig.5 Sketch map of system interface dynamic polymorphic design
2.1.2 對象適配器的靜多態(tài)實現(xiàn)
模板用于實現(xiàn)多態(tài)時,相關(guān)函數(shù)必須具有相同的名稱。雖然不能透明地處理異類集合,但能夠在性能和類型安全方面帶來顯著的好處。該方法的特點是容易實現(xiàn)內(nèi)建類型的集合,可不需要公共基類來表達(dá)接口的共同性,生成的代碼效率比較高;可以只提供部分接口的具體實現(xiàn),不必提供全面的接口實現(xiàn)。
對象適配器的靜多態(tài)說明圖如圖6所示。
圖6 對象適配器的靜多態(tài)說明Fig.6 Dynamic polymorphic illustration of object adapter
系統(tǒng)接口靜多態(tài)設(shè)計示意圖如圖7所示。
2.1.3 組合這兩種實現(xiàn)方式
通過上面兩種多態(tài)實現(xiàn)接口的方法,可以看出動多態(tài)是綁定并且動態(tài)的,靜多態(tài)則是非綁定并且靜態(tài)的。將這兩種方法組合起來可以發(fā)揮各自特點。圖8所示為代碼實例。
圖7 系統(tǒng)接口靜多態(tài)設(shè)計示意圖Fig.7 Sketch map of system interface static polymorphic design
圖8 系統(tǒng)接口靜多態(tài)設(shè)計示意圖Fig.8 Sketch map of system interface static polymorphic design
兩種方法的組合依賴于奇異的遞歸模板模式(Curiously Recurring Template Pattern, CRTP),該模式代表類實現(xiàn)技術(shù)中一種通用模式,即派生類將本身作為模板參數(shù)傳遞給基類。這樣可以從公共基類派生出不同種類的接口類,從而可以處理屬于異類集合的不同接口對象,同時仍然可以使用模板編寫針對某種接口對象的代碼。
通過上述實例可見,適配器將一個類的接口轉(zhuǎn)換成用戶希望的另外一個接口,使得原本接口不兼容的幾個類能一起工作,從而提高了軟件的擴(kuò)展性和通用性。
2.2 效果分析
原來用過程語言實現(xiàn)的接口主要是使用低層次的驅(qū)動代碼,接口復(fù)雜不統(tǒng)一,無法有效復(fù)用,但這種設(shè)計能夠有效保證接口的效率。通過上述慣導(dǎo)軟件設(shè)計實例可以看出,按照設(shè)計模式中適配器模式進(jìn)行設(shè)計和實現(xiàn)接口,可以有效降低數(shù)據(jù)交互的復(fù)雜性,提高代碼編寫的效率,保證了接口設(shè)計簡單,層次清晰,接口靈活可靠,并且可以復(fù)用。
當(dāng)慣導(dǎo)系統(tǒng)的硬件執(zhí)行速度較快時,可以考慮使用動多態(tài)類適配器的方法,實現(xiàn)接口標(biāo)準(zhǔn)化,可擴(kuò)展性強(qiáng)。如果慣導(dǎo)系統(tǒng)的硬件內(nèi)存空間較大時,可以通過靜多態(tài)對象適配器的實現(xiàn)方法,提高軟件運行速度,接口的定義靈活可靠。當(dāng)分析慣導(dǎo)系統(tǒng)硬件及系統(tǒng)要求可以接受的環(huán)境下,結(jié)合這兩種接口特點組合進(jìn)行運用,可以充分發(fā)揮類適配器與對象適配器的優(yōu)點,保證軟件設(shè)計可靠性及軟件設(shè)計的可復(fù)用性。
適配器模式具有很好的復(fù)用性和可擴(kuò)展性。如果功能是已經(jīng)存在的,只是接口不兼容,那么通過適配器模式可以讓這些功能得到更好的復(fù)用。在實現(xiàn)適配器功能的時候,可以調(diào)用自己開發(fā)的功能,從而自然的擴(kuò)展系統(tǒng)的功能。
本文設(shè)計了一種基于適配器模式的慣導(dǎo)軟件設(shè)計方法,適配器模式雖然是一個很常用,也比較簡單的模式,但通過適配器模式能夠從接口的角度來考慮設(shè)計問題,集中體現(xiàn)了面向?qū)ο笤O(shè)計的原則之一:針對接口編程,而不是針對實現(xiàn)編程。同時適配器模式也是對“開-閉”原則(即對擴(kuò)展的開發(fā),對修改的關(guān)閉)的具體實現(xiàn)。利用動多態(tài)適配器和靜多態(tài)適配器技術(shù)提高了軟件運行速度,并提高了軟件的可擴(kuò)展性、可重用性以及維護(hù)性。
[1] Botha R, Elof J H P. Access control in document-centric workflow systems-an agent-based approach[J]. Computers amp; Security, 2001, 20(6):525-532.
[2] 劉海巖,鎖志海,呂青,等.設(shè)計模式及其在軟件設(shè)計中的應(yīng)用研究[J].西安交通大學(xué)學(xué)報,2005,39(10) :1043-1047.
[3] 姚蓓窈,向東游,張華棟.高速串口的軟件設(shè)計模式研究[J]. 計算機(jī)測量與控制,2014,22(7) :2318-2320 .
[4] 伍星,郝惠娣,趙淵.設(shè)計模式應(yīng)用研究[J].機(jī)械科學(xué)與技術(shù),2003,22 (2) :323-324.
[5] 林舒萍,羅鍵.設(shè)計模式的應(yīng)用研究[J].計算機(jī)工程與設(shè)計,2005,26 (11) :2980-2982.
[6] 路立峰,陳平,杜軍朝,等.設(shè)計模式應(yīng)用實例[J].計算機(jī)技術(shù)與發(fā)展,2005,15 (2) :134-136.
[7] 肖漢.基于可重用構(gòu)件的軟件開發(fā)模式研究[J].微電子學(xué)與計算機(jī),2007,24(1) :176-179.
[8] 肖卓宇,何锫.設(shè)計模式在系統(tǒng)集成中的應(yīng)用與研究[J].計算機(jī)工程與設(shè)計,2007,28(17):4086-4088.
[9] 唐曉君,劉心松,查小科,等.運用設(shè)計模式改進(jìn)軟件設(shè)計質(zhì)量的研究[J].電子科技大學(xué)學(xué)報,2003,32(2):169-173.
[10] 李文錦,王康?。创a中設(shè)計模式實例的抽取及驗證方法研究[J].計算機(jī)應(yīng)用研究,2012,29(11):4199-4205.
[11] 童立,馬遠(yuǎn)良.設(shè)計模式在基于組件的框架設(shè)計中的應(yīng)用[J].計算機(jī)工程與應(yīng)用,2002,38(17):123-124.
AnInertialNavigationSoftwareDesignMethodBasedontheStructuralDesignMode
XIE Fang, ZHANG Ling-yu, XU Jing, WANG Yan, REN Jian-hui
(Beijing Institute of Automatic Control Equipment, Beijing 100074, China)
With the incessant increase of software task, the traditional development and maintenance mode of software design has been unable to meet the increasing demands of the task. Therefore, the level of software reuse needs to be further improved urgently. For the inertial navigation software interface design, a software design method based on the Adapter design pattern is proposed. The method that adopts dynamic polymorphic adapter and static polymorphic adapter can improve the efficiency of software development. Because of the good flexibility and reliability of interface definition, the method can solve the problems of poor scalability, reusability and maintenance faced in the software development process.
Adapter design pattern; Inertial navigation software
10.19306/j.cnki.2095-8110.2017.06.006
TP311
A
2095-8110(2017)06-0037-05
2016-06-27;
2016-07-30
解芳(1983-),女,碩士,工程師,主要從事計算機(jī)應(yīng)用與軟件工程化方面的研究。
E-mailxf0202102@163.com