• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      設計模式在地面測發(fā)控軟件中的應用

      2014-07-08 01:17:58馬衛(wèi)華馬穎勁解月江
      航天控制 2014年2期
      關鍵詞:步序設計模式觀察者

      楊 喆 馬衛(wèi)華 馬穎勁 解月江

      北京航天自動控制研究所,北京 100854

      設計模式在地面測發(fā)控軟件中的應用

      楊 喆 馬衛(wèi)華 馬穎勁 解月江

      北京航天自動控制研究所,北京 100854

      如今導彈/火箭地面測發(fā)控軟件規(guī)模不斷擴大,復雜度不斷增加,為了有效提高軟件研制效率,必須提升地面測發(fā)控軟件的復用性、可維護性和擴展性。使用設計模式進行軟件框架設計,能夠達到此目的。本文使用命令模式、單件模式、觀察者模式以及主動對象模式完成了地面測發(fā)控軟件部分功能框架的搭建,提高了軟件的非功能性需求。

      地面測發(fā)控軟件;軟件復用;設計模式

      導彈/火箭的地面測發(fā)控軟件是一個大型網(wǎng)絡軟件系統(tǒng),一般由主控軟件、顯示軟件以及數(shù)據(jù)處理軟件等多個應用軟件組成,主要功能是實現(xiàn)測試發(fā)射控制流程的半自動和全自動測試,以及流程中所有數(shù)據(jù)的圖形化顯示,完成發(fā)射前的測試準備[1]。

      近年來,各型號地面測發(fā)控軟件規(guī)模不斷擴大,軟件產(chǎn)品復雜度不斷增加。為提升航天型號軟件研制效率,開發(fā)人員在完成軟件系統(tǒng)的功能需求之外,還必須提高軟件產(chǎn)品的可復用性、可維護性和擴展性等非功能性要求。設計模式是面向對象軟件設計經(jīng)驗的總結,可以更加簡單方便地復用成功的設計和體系結構。將設計模式的思想引入地面測發(fā)控軟件的設計過程,可以有效提高地面測發(fā)控軟件的可復用性、可維護性和擴展性。

      本文討論了地面測發(fā)控軟件的特點和需求,分析了地面測發(fā)控軟件的通用架構和主要組成模塊,并詳細論述了命令模式、單件模式、觀察者模式和主動對象模式在軟件設計中的應用,總結了使用設計模式的優(yōu)勢,最終完成了地面測發(fā)控軟件測試流程控制與數(shù)據(jù)存盤功能的框架設計,說明了設計模式在地面測發(fā)控軟件中的應用效果。

      1 設計模式簡介

      設計模式這個概念最早是由建筑大師Christopher Alexander提出的,他指出:“每一個模式描述了一個在我們周圍不斷重復發(fā)生的問題,以及該問題的解決方案的核心。這樣你就能一次又一次地使用該方案而不必做重復勞動[2]”。Alexander關于模式的說法僅針對城市和建筑,但他的思想也可以應用在面向對象的設計模式里。設計模式提供了針對某個特定的面向對象軟件問題的解決方案,并提出了如何設計出高質(zhì)量軟件的好策略,可以簡單方便的復用成功的設計和體系結構,設計出更加靈活的、可復用和易維護的軟件系統(tǒng)。

      設計模式根據(jù)目的準則可以劃分為創(chuàng)建型、結構型和行為型3種。其中創(chuàng)建型模式主要負責對象的創(chuàng)建,它描述了怎樣構造和封裝這些動態(tài)的決定,包含工廠模式、單件模式等;結構型模式主要負責處理類或對象的組合,包含橋接模式、代理模式等;行為型模式則主要負責描述類或對象如何進行交互以及如何分配職責,包含命令模式、觀察者模式、主動對象模式等。

      不同的設計模式之間存在相互協(xié)作、相互依賴的關系。在實際的軟件系統(tǒng)設計過程中,需要合理安排多個設計模式進行相互組合,形成一個完整的軟件框架。使用設計模式進行軟件設計,可以降低軟件的耦合度,使軟件易于擴展,達到優(yōu)化軟件內(nèi)部結構的目的。

      2 地面測發(fā)控軟件需求分析

      圖1為地面測發(fā)控軟件通用結構圖,由圖可知地面測發(fā)控軟件主要包括主控軟件、顯示軟件以及數(shù)據(jù)處理軟件等。

      主控軟件作為地面測發(fā)控系統(tǒng)的核心軟件,主要完成測試流程控制、數(shù)據(jù)通訊存儲等功能。為保證導彈/火箭在發(fā)射前功能正常、性能良好,保證安全、準時發(fā)射,需要對導彈/火箭進行全面、綜合的測試,評估導彈/火箭性能[3]。地面測發(fā)控軟件中主控軟件的測試流程控制功能即實現(xiàn)了導彈/火箭在發(fā)射前按預先設計好的時序進行各項功能和性能的測試,比如:總線誤碼率檢查、系統(tǒng)配電自檢、彈上時序檢查等。測試流程按照功能及屬性歸類,可劃分為不同的流程類,稱之為主流程,每個主流程包含不同的流程項,稱為子流程,每個子流程包含不可分割的流程步驟,簡稱為步序。操作手可根據(jù)要求選擇相應的主流程或子流程進行系統(tǒng)測試。為驗證系統(tǒng)各項測試的有效性,需要存儲測試數(shù)據(jù),以便事后進行數(shù)據(jù)分析。目前大部分型號主控軟件均可以監(jiān)聽彈上通訊數(shù)據(jù),并對數(shù)據(jù)進行處理和分析,如存盤、轉發(fā)、提取消息、提取數(shù)據(jù)(伺服、電壓及時序)等不同的功能。數(shù)據(jù)存儲的運行不能影響程序的正常功能及性能,因此數(shù)據(jù)存盤采用低優(yōu)先級的任務實現(xiàn)。

      顯示軟件主要負責顯示測試數(shù)據(jù),接收操作手按鍵輸入,是操作手和主控軟件之間的中介,實現(xiàn)了人機交互的功能;數(shù)據(jù)處理軟件主要完成測試數(shù)據(jù)的處理、判讀等功能。本文主要根據(jù)地面測發(fā)控軟件的測試流程控制和數(shù)據(jù)存儲的功能需求,討論設計模式在地面測發(fā)控軟件中的應用。

      3 設計模式在地面測發(fā)控軟件中的應用

      圖1 地面測發(fā)控軟件通用結構圖

      設計模式的有效復用是當前軟件領域研究的重要內(nèi)容,通過利用設計模式的思想來指導軟件結構設計,不僅可以縮短軟件設計和實現(xiàn)的周期,還可以提高軟件的可維護性、可復用性。本文根據(jù)地面測發(fā)控軟件的需求,使用命令模式、單件模式、觀察者模式和主動對象模式解決地面測發(fā)控系統(tǒng)軟件所面臨的通用問題。

      3.1 命令模式在地面測發(fā)控軟件的應用

      測試流程控制模塊負責對導彈/火箭發(fā)射前的各項功能進行全面測試,操作手選擇某一流程項,系統(tǒng)將自動執(zhí)行其所有步序。步序參數(shù)確定了步序的具體功能,如何將步序參數(shù)賦給步序,其中最直觀的方法是,所有不同的步序共享同一類型的結構體,步序的調(diào)用則在步序類中有步序執(zhí)行函數(shù),根據(jù)步序參數(shù)結構體中的步序標記調(diào)用不同的步序函數(shù),并以步序結構體單元作為參數(shù)。但這種方法使某個步序可以訪問不需要的步序結構體字段,不符合面向對象的封裝原則;步序函數(shù)所在類繼承自同一抽象類,擁有步序執(zhí)行函數(shù),每增加或刪除一個步序均要修改抽象類定義的步序執(zhí)行函數(shù),因此可擴展性差。為解決以上問題,本文采用命令模式進行程序設計。

      命令模式屬于對象行為型模式,命令模式將一個請求封裝為一個對象,并提供一致性發(fā)送請求的接口。當一個事件發(fā)生時,它不直接把事件傳遞到事件調(diào)用者,而是在命令和調(diào)用者之間增加一個中間者,將這種直接關系切斷,同時兩者之間都隔離。事件調(diào)用者只是和接口打交道,不和具體實現(xiàn)交互。

      圖2 命令模式在地面測發(fā)控軟件的應用類圖

      以主控軟件常用的延時功能為例,創(chuàng)建一個抽象的CFlowMethodCallBase類,該類包含1個公共接口call(),所有步序類均繼承自該抽象類。另外,創(chuàng)建CFlowMethodCallBase類的子類CMethodCallDelayTime,即步序類。該類包含1個call()方法,實現(xiàn)對CCtrlTime類的DelayTime()方法的引用,Delay-Time定義了具體的延時功能。

      步序的實現(xiàn)有了命令模式為基礎,還要實現(xiàn)步序的管理和運行。首先是注冊步序,在步序描述文件(XML)中保存步序的UUID號、名稱、參數(shù)個數(shù)、參數(shù)名稱和缺省值等信息,CMethodCallDelayTime類構造函數(shù)執(zhí)行時將步序的UUID號通過哈希映射表與自身的指針關聯(lián)起來。最后是步序的執(zhí)行。通過步序創(chuàng)建器對象讀取XML文件,從中提取CMethod-CallDelayTime類的UUID,再通過哈希表找到該類的指針,并將指針存儲在數(shù)組中。由步序執(zhí)行器對象,獲取數(shù)組中的指針,即可調(diào)用相應的call()函數(shù),實現(xiàn)對DelayTime步序的調(diào)用。

      步序執(zhí)行器對象運行在自己獨立的任務(線程)中,當主控軟件收到測試開始指令后,立即啟動該任務,步序執(zhí)行器將逐項執(zhí)行XML文件中的步序,直到所有步序執(zhí)行完畢,或者收到暫停、停止指令。

      如圖2所示,在測試流程控制模塊中使用命令模式,并結合組合模式,能夠簡單快捷的進行測試流程管理,增加或刪除某一步序,只需在CFlowMethod-CallBase父類下添加/刪除具體的步序子類,并將該步序在XML文件中注冊或刪除即可。使用命令模式,將調(diào)用者和被調(diào)用者分離,實現(xiàn)了功能之間的解耦,符合低耦合、高內(nèi)聚的思想,大大提高了軟件的可維護性和擴展性。

      3.2 單件模式在地面測發(fā)控軟件的應用

      地面測發(fā)控軟件的測試流程控制功能負責火箭/導彈射前各項功能和性能測試,測試項目達幾十到幾百個不等,按功能劃分為步序甚至更多。需要創(chuàng)建一個測試流程管理類(CFlowManage類)的實例,引用CFlowManage類的RegisterItem()方法完成步序的注冊。由于測試項目過多,每個步序類初始化都需要一個CFlowManage類的實例,增加了程序執(zhí)行的復雜度。本文采用單件模式解決此項問題。

      單件模式屬于創(chuàng)建型設計模式,它保證一個類僅有一個實例,并提供一個訪問它的全局訪問點,客戶可以從一個眾所周知的訪問點訪問它。

      ACE(Adaptive Communication Environ-ment)技術提供了單件模式的模板類,封裝了單件模式的具體實現(xiàn)。使用ACE單件模式的模板創(chuàng)建CFlow-Manage類的一個指針 CFlowManageSingleton,代碼如下:

      Typedef ACE_Singleton〈 CFlowManage,ACE_SYNCH_MUTEX〉CFlowManageSingleton;

      CFlowManageSingleton指針只需通過Instance操作指向CFlowManage類的RegisterItem方法,即可完成步序的注冊。代碼如下:

      CFlowManageSingleton::instance()-〉RegisterItem("XXXX",static_cast〈CFlowMethodCallBase*〉(this));

      類似的,界面顯示功能也可以使用單件模式為界面顯示類創(chuàng)建唯一的實例,可以在任何一個訪問點訪問類實例,調(diào)用界面顯示類的方法,完成界面顯示功能,提高了代碼的靈活性。

      3.3 觀察者模式在地面測發(fā)控軟件的應用

      目前各型號地面測發(fā)控軟件均可以監(jiān)聽彈上通訊數(shù)據(jù),并對數(shù)據(jù)進行處理和分析。當數(shù)據(jù)對象發(fā)生改變時,希望依賴于該數(shù)據(jù)對象的所有使用者都能立即被通知。本文采用觀察者設計模式描述這種依賴關系。

      觀察者設計模式定義了對象間一種一對多的依賴關系,當一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并被自動更新[2]。通過使用觀察者模式,系統(tǒng)可以獨立的改變目標對象和觀察者對象,提高目標對象和觀察者的復用性。

      圖3 觀察者模式在地面測發(fā)控軟件的應用

      圖3為觀察者模式在地面測發(fā)控軟件應用的結構圖。對于被觀察者,首先定義一個抽象的Subject類作為目標類,該類提供注冊和刪除觀察者的接口。Subject類還定義了svc任務,該任務循環(huán)執(zhí)行調(diào)用UpdateAllObserver方法,UpdateAllObserver方法包含觀察者類Observer的一個引用,可將數(shù)據(jù)的變化通知給所有向其注冊的觀察者類。CRead1553BFrmUDP類作為Subject類的子類,是具體的目標類,該類的ReadBuffer()主要負責從總線接收數(shù)據(jù),記錄數(shù)據(jù)狀態(tài)。對于觀察者,首先定義一個抽象的Observer接口,所有監(jiān)聽數(shù)據(jù)變化的觀察者均繼承自該抽象類,比如 SaveObserver類、AnalyseObserver類等,觀察者將自己注冊到目標類對象中,目標類將觀察者類存放在一個list容器里。Observer類的子類實例化各自的Update方法可實現(xiàn)實時更新,以正確反應任務的執(zhí)行情況。

      觀察者模式降低了目標與觀察者之間的耦合度。一個目標僅知道它有一系列觀察者,而無需知道有多少個觀察者及其歸屬類,它唯一的責任是通過UpdateAllObserver函數(shù)通知向它注冊的各觀察者。通知被自動廣播給所有已向該目標對象登記的有關對象。

      3.4 主動對象模式在地面測發(fā)控軟件的應用

      數(shù)據(jù)存儲的運行不能影響程序的正常功能及性能,在有的多任務操作系統(tǒng)中,低優(yōu)先級的任務會被高優(yōu)先級的任務中斷,因此為了保證其他重要任務的運行,可以使用優(yōu)先級較低的任務實現(xiàn)數(shù)據(jù)存儲功能。本文采用主動對象設計模式,實現(xiàn)了以異步方式對數(shù)據(jù)存盤,為任務間的協(xié)作提供了解決方案。

      主動對象模式可以提供對象在自己的任務上下文中,采用看似常規(guī)的方法調(diào)用處于不同任務上下文對象的成員函數(shù),但該函數(shù)不是在發(fā)起者,而是在被調(diào)用對象的任務上下文中執(zhí)行。每個主動對象擁有私有的控制線程,用于執(zhí)行客戶在這個對象上調(diào)用的任何方法。當對象的方法調(diào)用需要很長時間才能完成時,主動對象模式就會派上用場,它可以把主控線程解放出來去做其它事情[4-6]。當主控軟件的數(shù)據(jù)接收和處理等關鍵任務有數(shù)據(jù)需要存儲在硬盤上時,采用主動對象模式提高關鍵任務的響應速度。關鍵任務調(diào)用數(shù)據(jù)存儲功能后迅速返回并重新執(zhí)行關鍵操作,由低優(yōu)先級的數(shù)據(jù)存儲任務完成具體的存盤工作。簡而言之,就是由關鍵任務發(fā)起存盤動作,而具體存盤的動作由低優(yōu)先級的存盤任務完成。

      圖4 主動對象模式的應用類圖

      數(shù)據(jù)存儲框架類圖如圖4所示。首先,定義一個方法請求類TFC_File_Savebin_Method類,該類繼承自ACE_Method_Request,它以對象的形式封裝了方法調(diào)用call()的對象,call()實現(xiàn)了數(shù)據(jù)存盤功能。方法請求對象是在主動對象的客戶向代理發(fā)出請求時創(chuàng)建的。然后,定義主動對象類Log_Task類。該類繼承自ACE_Task_Base,“持有”控制線程。主動對象類Log_Task需要重載svc()虛函數(shù),在其中指明主動對象需要執(zhí)行什么命令流程。一旦activate()函數(shù)被調(diào)用,ACE_Task_Base類會在svc()方法中啟動一個新的控制線程,在svc()中實現(xiàn)的流程將在主動對象擁有的線程中被執(zhí)行。另外,將Log_Task類的svc()寫成一個無限循環(huán)執(zhí)行模式,這個循環(huán)會不斷的處理命令消息。最后,定義一個代理者類Proxy_SaveFile,這個類是給客戶使用的,它聚合了TFC_File_Savebin_Method類和Log_Task類的實現(xiàn)。Proxy_SaveFile類定義了一個方法請求類TFC_File_Savebin_Method對象,并將其插入激活隊列enqueue()中。隊列中的請求對象會在Log_Task類的svc()方法中被執(zhí)行。客戶只需調(diào)用代理者類Proxy_SaveFile的一個引用,即可完成數(shù)據(jù)存盤功能的異步執(zhí)行。

      主動對象模式解除了方法調(diào)用和方法執(zhí)行之間的耦合,即前一個線程的調(diào)用(方法對象入隊列)和后一個線程的處理(方法對象出對列和call調(diào)用)解耦。對于數(shù)據(jù)存盤或日志存儲等優(yōu)先級較低的任務,采用主動對象模式,可以實現(xiàn)異步存盤功能,使得系統(tǒng)的并發(fā)處理性能大幅提升。

      4 結束語

      結合地面測發(fā)控系統(tǒng)軟件的通用模型及其功能需求,詳細描述了命令模式、單件模式、觀察者模式和主動對象模式在地面測發(fā)控軟件設計開發(fā)中的應用,解決了傳統(tǒng)軟件設計中存在的問題。并且,將這4種設計模式組合在一起,初步實現(xiàn)了一個具有流程控制和數(shù)據(jù)存盤功能的系統(tǒng)框架,降低了地面測發(fā)控軟件的耦合性,提高了軟件的復用性、擴展性和可維護性。

      [1]孫海峰,陳迪,等.基于數(shù)據(jù)庫和面向對象的運載火箭地面測發(fā)控軟件復用[J].航天控制,2010,28(2):79-82.(SUN Haifen,CHEN Di,et al.Software Reuse of Test Launch and Control System for Launch Vehicle Based on Database and Object Oriented[J].Aerospace Control,2010,28(2):79-82.)

      [2]Gamma E,Helm R,Johnson R.可復用面向對象軟件的基礎[M].李英軍,譯.北京:機械工業(yè)出版社,2000.(Gamma E,Helm R,Johnson R.Design Patterns:Elements of Reusable Object-Oriented Software[M].LI Yingjun, Translate.Beijing:China Machine Press,2000.)

      [3]夏克寒,牟建華,等.導彈測試流程優(yōu)化系統(tǒng)設計與實現(xiàn)[J].導彈與航天運載技術,2012,318(2):43-46.(XIA Kehan,MOU Jianhua,et al.Design and Implementation of Missile Test Process Optimizing System[J].Missles And Space Vehicles,2012,318(2):43-46.)

      [4]Stephen D Huston,et al.ACE程序員指南——網(wǎng)絡與系統(tǒng)編程的實用設計模式[M].馬維達(譯).中國電力出版社,2004.(Stephen D Huston,et al.The ACE Programmer’s Guide:Practical Design Patterns for Network and Systems Programming[M].MA Weida.Translate.China Electric Power Press,2004.)

      [5]Douglas C Schmidt,Stephen D Huston.C++Network Programming,Volume 1:Mastering Complexity with ACE and Patterns[M].Addison-wesley,2002.

      [6]Douglas C Schmidt,Stephen D Huston.C++Network Programming,Volume 2:Mastering Complexity with ACE and Patterns[M].Addison-wesley,2003.

      [7]Fayad M,Schmidt D,Johnson R.Building Application Frameworks:Object--Oriented Foundations of Framework Design[M].New York:John Wiley&Sons,1999.

      Design Pattern Used in Software Reuse of Test Launch and Control System

      YANG Zhe MA Weihua MA Yingjin XIE Yuejiang
      Beijing Aerospace Automatic Control Institute,Beijing 100854,China

      With the enlargement of program scale,the ground test launch and control system is becoming more and more complex.In order to improve the efficiency of software development,the reusability,maintainability and extensibility of ground test and control system are needed to be enhanced.The design pattern can be used in software architecture design to achieve this goal.The command pattern,singleton pattern,observer pattern and the active object pattern are applied to the establishment of part of ground test launch and control system in this paper,and the non-functional requirements of software are improved.

      Test launch and control system software;Software reuse;Design patterns

      TP311.52

      A

      1006-3242(2014)02-0091-06

      2013-10-16

      楊 喆(1989-),女,河南平頂山人,碩士研究生,主要研究方向為軟件工程;馬衛(wèi)華(1970-),男,山東泰安人,研究員,主要從事飛行控制系統(tǒng)軟件研究工作;馬穎勁(1977-),男,江西上饒人,高級工程師,主要從事嵌入式軟件的開發(fā)設計工作;解月江(1978-),男,河北冀州人,高級工程師,主要研究方向為軟件工程。

      猜你喜歡
      步序設計模式觀察者
      觀察者
      揚子江(2024年3期)2024-05-10 06:59:24
      仿生設計模式的創(chuàng)新應用探索
      玩具世界(2023年6期)2024-01-29 12:14:36
      “1+1”作業(yè)設計模式的實踐探索
      機組抽水調(diào)相啟動不成功事件的分析
      抽水調(diào)相時主壓水閥位置信號抖動分析及處理
      冷靜而又理性的觀察者——德國華人作家劉瑛訪談
      變頻器在紡絲擺頻控制中的應用
      紡織報告(2019年12期)2019-03-16 09:12:06
      交通機電工程設計模式創(chuàng)新探討
      超大斷面隧道雙側壁導坑法開挖步序優(yōu)化
      互動式設計模式研究
      宾阳县| 余庆县| 藁城市| 东明县| 盱眙县| 陆良县| 渑池县| 巴马| 朝阳市| 临泽县| 上蔡县| 广灵县| 灵寿县| 兴文县| 富阳市| 丘北县| 正镶白旗| 韶山市| 介休市| 西林县| 长治县| 益阳市| 柯坪县| 利津县| 武定县| 汾阳市| 临泉县| 巫山县| 板桥市| 霍邱县| 武宣县| 华亭县| 连江县| 县级市| 布尔津县| 普兰店市| 长汀县| 繁昌县| 遂川县| 宿迁市| 应城市|