999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種基于State模式的慣導系統軟件設計方法

2017-05-12 02:02:26何長久
導航定位與授時 2017年3期
關鍵詞:方法系統設計

許 靜,鄒 瑛,解 芳,何長久,李 偉,2

(1.北京自動化控制設備研究所,北京 100074;2.慣性技術國防科技重點實驗室,北京 100074)

一種基于State模式的慣導系統軟件設計方法

許 靜1,鄒 瑛1,解 芳1,何長久1,李 偉1,2

(1.北京自動化控制設備研究所,北京 100074;2.慣性技術國防科技重點實驗室,北京 100074)

State模式是一種面向對象的設計方法。針對慣導系統軟件設計中的問題,提出了一種基于State模式的慣導系統軟件設計方法,并將其應用于慣導系統軟件分支流程的設計過程中。與傳統設計方法相比,該方法將邏輯判斷和處理封裝在狀態對象中,為不同系統狀態子類聲明了一個公共接口,用子類實現特定狀態下的行為操作,避免了多種狀態轉換時邏輯判斷的復雜度,降低了慣導系統軟件的耦合程度,增強了代碼的可靠性、健壯性和可移植性,從而提高了軟件質量。

State模式;慣導系統軟件;設計方法

0 引言

設計模式是利用面向對象語言的類和方法來實現某個編程目標的方法,用以解決在特定情況下出現的重復設計問題。

按照應用范圍分類,設計模式可以分為類模式和對象模式。類模式處理的是類和子類之間的關系,這些關系是通過繼承建立的,是靜態的。對象模式處理的是對象間的關系,這些關系在運行時刻是可以變化的,是動態的。

設計模式按照目的分類有三種類型:創建型(Creational)、行為型(Behavioral)和結構型(Structural)。其中,行為型模式描述的是對象或類的模式以及他們之間的通信模式,涉及算法和對象間職責的分配,它將設計者的注意力從控制流轉移到對象間的聯系方式上來。在運行時難以跟蹤的復雜的控制流都可以通過行為型模式來進行刻畫。

行為型類模式使用繼承機制在類之間分派行為。行為型對象模式使用的不是繼承而是對象的復合。通常單個對象無法單獨完成某些任務,行為型對象模式可以通過一組對等的對象間協作來完成其中任一對象都無法單獨完成的任務。常見的行為型對象模式有狀態模式(State)、策略模式(Strategy)、迭代模式(Iterator)、命令模式(Command)等。

本文以捷聯式慣性導航系統為例,研究State這種行為型對象模式在慣導系統復雜流程控制中的應用。捷聯式慣性導航系統的典型工作剖面如圖1所示。慣導系統軟件根據運行條件主要工作在以下10個狀態:初始化、自檢、待機、初始裝訂、靜基座粗對準、靜基座精對準、動基座粗對準、動基座精對準、導航和系統異常。

圖1 慣導系統軟件工作剖面圖Fig.1 The working section of inertial navigation software

慣導系統軟件根據外部指令或確定的流程順序進入某種狀態,在某狀態下實現某一種或某一序列操作。其工作狀態多樣,導致操作中含有龐大的多分支條件語句,或其多條分支間有時間順序、條件約束等的要求。此時,軟件設計除實現其功能外,應更偏重于效率的優化和維護的便利。否則,當在現有流程上增加或刪除一個操作時,對復雜條件判斷分支的增減很容易引起其他分支不可預期的后果,給維護和測試工作增加了工作量,同時系統的可移植性和可靠性不高。基于此,提出了基于State模式的軟件流程設計方法,將這種模式用于慣導系統軟件,可將不同狀態的行為分割開來,降低各個模塊間的耦合程度,便于需求發生變更時的更改和維護。同時,可提高軟件設計的效率、可移植性、可靠性和健壯性。

1 State模式說明

State模式定義一系列的操作,將邏輯判斷和處理都封裝在狀態對象中,為表示不同操作狀態的子類聲明一個公共接口,用其子類實現與特定狀態相關的行為。該模式將每一個條件分支放入一個獨立的類中,使用戶可以根據對象自身的情況將對象的狀態作為一個對象,這一對象可以不依賴于其他對象而獨立變化。模式結構如圖2所示。

圖2 State模式說明Fig.2 Description of State pattern

圖2中,Context將與狀態相關的請求委托給當前的ConcreteState對象處理。它可將自身作為一個參數傳遞給處理該請求的狀態對象。客戶可用狀態對象來配置一個Context,一旦一個Context配置完畢,它的客戶不再需要直接與狀態對象打交道。同時,Context或ConcreteSate子類都可以決定哪個狀態是另外一個的后續者,以及是在何種條件下進行狀態轉換。

State模式具有以下優點:

1)State模式將與特定狀態相關的行為局部化,并且將不同狀態的行為分割開來。通過定義新的子類可以很容易地增加新的狀態和轉換。決定狀態轉移的邏輯不在單塊的if或switch語句中,而是分布在State子類之間。將每一個狀態轉換和動作封裝到一個類中,這將使代碼結構化并使其意圖更清晰;

2)State模式使得狀態轉換顯式化。當一個對象僅以內部數據值來定義當前狀態時,其狀態僅表現為一些變量的賦值,這種表示方式不夠明確。State模式可以為不同的狀態引入獨立的對象,從而使得轉換變得更明確。另外,State對象可保證Context不會發生內部狀態不一致的情況。

2 基于State模式的慣導系統軟件設計

假設某項目存在如圖1所示的10個工作狀態。慣導系統所處的工作狀態根據外部指令或某種設定條件而有所不同。設計實現時,定義的對象必須能夠在運行時刻根據狀態改變它的行為,或者說,必須存在一個含有龐大的多分支條件語句的操作,且這些分支依賴于該對象的狀態。

下面分別介紹采用傳統方法和采用State模式實現慣導軟件狀態轉換的流程設計。

2.1 傳統分支設計實現

傳統的分支設計,主要采用if或switch分支設計。當狀態繁多時,就需要大量的分支來支撐。而過多的分支會引起邏輯的混亂。

簡要選取自檢、初始裝定、粗對準、精對準、導航幾個主要工作狀態,以此為例,說明采用傳統的分支設計的具體實現,流程示意如圖3所示。

圖3 傳統的分支設計Fig.3 The traditional branch design

2.2 State設計模式下的慣導軟件設計實現

慣導系統的每種工作狀態均可抽象成“進入該狀態”、“運行該狀態”、“結束該狀態”、“改變該狀態”四種行為。利用State模式設計狀態轉換如圖4所示。

圖4 State模式應用示例Fig.4 Applicarion example of State pattern

仍以此項目為例,定義抽象類State來表示慣導系統的工作狀態,定義虛函數ComeIn( )表示進入該狀態的行為,Run( )表示保持該狀態的行為,GoOut( )表示結束該狀態的行為,ChangeState( )規定狀態轉換的準則。為了更靈活地實現狀態間切換,運用State子類自身指定它們的后續狀態以及何時進行轉換。通常狀態轉換的動作為前一個狀態的結束,后一個狀態的進入。

Working將所有與狀態相關的請求委托給它的State實例。State的子類實現與狀態有關的各種行為,例如StandByState為State的子類,實現系統待機狀態下的行為;SelfTestState為State的子類,實現系統自檢狀態下的行為。在每個子類中明確定義其進入、運行、結束。在完成當前狀態相關工作后,調用ChangState函數來改變Working的狀態。Working本身并不需要了解系統狀態轉換的規則,只需由State子類來定義其每一個狀態轉換和動作。

圖5給出了以系統自檢為例的代碼。應用Working實例對象的_state->Run()函數,來實現系統狀態運行及狀態切換。當自檢時間滿足時,運行_state->ChangeState()函數,調用_stateSelfTest->GoOut()和_stateCoarseAlign->ComeIn()函數來實現狀態切換功能。

圖5 系統自檢狀態設計示意圖Fig.5 The design schematic diagram of system self-test state

2.3 兩種實現方法的比較

從2.1節和2.2節的實現可以看出,采用傳統的軟件設計方法,以條件判斷分支設計狀態轉換,將不同狀態的行為混合在一起,耦合性強,形成的代碼不夠清晰,可讀性較差。增加或刪除一個狀態,勢必要更改前后狀態的出入口條件以及流程走向。又因為同在一個模塊中實現,這種狀態的改變可能會對其他分支帶來影響。無論更改多少,也要求設計足夠的測試用例來保證此次更改的正確,付出代價較高。因此,給維護帶來困難的同時,軟件的可靠度不高。采用傳統分支設計的流程示意圖如圖6所示。

圖6 以條件分支設計的狀態轉換示意圖Fig.6 The schematic diagram of state transition according to the condition branch

而采用State設計模式的設計方法,任務流被看成是由一組狀態和轉換構成的,在某個狀態被執行后,它的輸出將被相應地轉換以跳轉到另一特定狀態繼續執行。這種可根據周圍條件的變化,動態調整任務流執行的過程,使得在狀態修改時,無需改變函數執行的主體模塊而只考慮子類具體行為即可。

另外,由于State模式提供了更好的與特定狀態相關的組織方法,決定狀態轉移的邏輯不在單塊的if或switch語句中,而是分布在state子類中。它將每一個狀態轉換和動作封裝到一個類中,這使得代碼結構化并使其更清晰,也更易維護。增加或刪除一個系統狀態,只需重新定義或刪除一個state子類,并更改它的轉換條件即可,因此大幅提高了軟件的可移植性。雖然State模式設計在代碼量上大于條件判斷分支,但以當前系統CPU的資源現狀來看,這些開銷都是微不足道的。State設計模式的流程示意如圖7所示。由此可見,用State模式設計實現狀態轉換,尤其是多種狀態的轉換是占有優勢的。

圖7 設計模式的狀態轉換示意圖Fig.7 The schematic diagram of state transition according to the design pattern

3 結論

本文給出了一種基于State模式的慣導系統軟件設計方法。該方法在添加新的系統狀態時只需要增加新的狀態子類定義即可,而不用修改程序流程框架。與傳統分支設計方法相比,該方法降低了軟件各分支的耦合度,提高了軟件的可重用性。利用其結構清晰、可擴展性強、易測試并且實現可靠的特點,建立起了一種松散而有效的新程序,大大增強了代碼的可移植性,并減小了維護的代價,提高了軟件開發效率和軟件質量。

[1] Gamma E,Helm R,Johnson R,等.設計模式:可復用面向對象軟件的基礎[M].李英軍,馬曉星,蔡敏,等譯.北京:機械工業出版社,2007.

[2] 林舒萍,羅鍵.設計模式的應用研究[J].計算機工程與設計,2005,26(11):2980-2982.

[3] 姚蓓窈,向東游,張華棟.高速串口的軟件設計模式研究[J].計算機測量與控制,2014,22(7):2318-2320.

[4] 紹維忠,麻志毅.UML用戶指南[M].北京:機械工業出版社,2001.

[5] Larman C.UML和模式應用[M].李洋,鄭龔,等譯.北京:機械工業出版社,2006.

[6] 李瀟.設計模式及其在軟件設計中的應用研究[J].無線互聯科技,2014(1):230-231.

[7] 郭榮.淺談軟件設計模式中的設計原則[J].信息安全與技術,2014(11);93-94.

[8] Shalloway A, Trott J.Design patterns explained[M].Pearson Education India,2002.

[9] 劉東生.設計模式及其在軟件設計中的應用研究[J].數字技術與應用,2015(7):153.

[10] 周樹語.設計模式在面向對象框架中的應用[J].計算機光盤軟件與應用,2013(6):189-190.

[11] Johnson R E.Frameworks=(Components + Patterns): How frameworks compare to other object-oriented reuse techniques[J].Communications of the ACM, 1997,40(10): 39-42.

[12] Schmidt D C.Using design patterns to develop reusable object-oriented communication software[J].Communications of the ACM, 2015, 38(10):65-74.

A Method of Inertial Navigation System Software Design Based on the State Pattern

XU Jing1, ZOU Ying1, XIE Fang1, HE Chang-jiu1, LI Wei1,2

(1.Beijing Institute of Automatic Control Equipment, Beijing 100074, China;2.Key Laboratory of Science and Technology for National Defence on Inertial Technology, Beijing 100074, China)

A State Pattern method is an object oriented design method.It is proposed according the existing problems in the software design of inertial navigation system.Different with traditional designed method, state pattern method encapsulates the logical judgement and handle process in one object, and one common interface is defined for various system statement.The detailed process method is implemented in subclass.With this method, the complexity of system state translation is reduced as well as the coupling of system software.As the results, the robustness of system software is improved and the quality of software is enhanced.

State pattern; Software of Inertial Navigation System; Method of design

10.19306/j.cnki.2095-8110.2017.03.004

2016-05-22;

2016-06-28

國家自然科學基金(41527803)

許靜(1982-),女,工程師,主要從事導航與定位領域軟件設計與軟件工程技術研究。E-mail:250460323@qq.com

TP311.5

A

2095-8110(2017)03-0022-05

猜你喜歡
方法系統設計
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
瞞天過海——仿生設計萌到家
藝術啟蒙(2018年7期)2018-08-23 09:14:18
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
設計秀
海峽姐妹(2017年7期)2017-07-31 19:08:17
有種設計叫而專
Coco薇(2017年5期)2017-06-05 08:53:16
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
捕魚
主站蜘蛛池模板: 亚洲全网成人资源在线观看| 狠狠色丁婷婷综合久久| 国产精品浪潮Av| 热re99久久精品国99热| 91丝袜乱伦| 日韩无码精品人妻| 亚洲经典在线中文字幕| 亚洲国产成人麻豆精品| 亚洲国产AV无码综合原创| 国产成人1024精品| 激情综合婷婷丁香五月尤物| 国产美女91视频| 97在线视频免费观看| 一区二区日韩国产精久久| 噜噜噜久久| 午夜精品久久久久久久99热下载| 青青操国产视频| 欧美第二区| 国产女人水多毛片18| 中文字幕久久波多野结衣| 国产一区二区丝袜高跟鞋| 2021最新国产精品网站| 青青青亚洲精品国产| 色亚洲成人| 久久精品国产电影| 免费jjzz在在线播放国产| 无码国内精品人妻少妇蜜桃视频 | 国产精品三区四区| 日韩少妇激情一区二区| 制服丝袜在线视频香蕉| 88av在线看| 91亚洲国产视频| 亚洲精品视频免费观看| 欧美日韩免费观看| 国产91蝌蚪窝| 成人综合在线观看| 91久久国产成人免费观看| 日韩a在线观看免费观看| 免费不卡视频| 国产精品2| 亚洲中久无码永久在线观看软件| 亚洲国产清纯| 91蜜芽尤物福利在线观看| 日韩国产精品无码一区二区三区| 亚洲人成网站观看在线观看| 精品视频在线观看你懂的一区| 国产福利免费观看| 18禁黄无遮挡网站| 亚洲国产精品一区二区高清无码久久| 国产综合在线观看视频| 亚洲人在线| 丰满人妻中出白浆| 怡红院美国分院一区二区| 九九线精品视频在线观看| 日本人妻丰满熟妇区| 亚洲无码高清一区| 国产精品午夜福利麻豆| 国产性精品| 97青青青国产在线播放| 欧美日韩精品在线播放| 欧美a级在线| 99久久免费精品特色大片| 99精品高清在线播放| 国产幂在线无码精品| 一级成人a做片免费| 久久综合伊人77777| 欧美一级夜夜爽www| 久久久久无码精品| 97av视频在线观看| 亚洲天堂.com| 欧美成人精品一区二区| 国产福利在线免费| 久久久久国产一区二区| 国产精品视频白浆免费视频| 91久久大香线蕉| 国产成人精品一区二区不卡| 精品无码人妻一区二区| 91在线免费公开视频| 一本色道久久88亚洲综合| 综合色区亚洲熟妇在线| 九九久久精品国产av片囯产区| 美女被操91视频|