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
捕魚
主站蜘蛛池模板: 午夜高清国产拍精品| 丁香六月综合网| 久久精品中文字幕少妇| 无码日韩精品91超碰| 77777亚洲午夜久久多人| 1769国产精品视频免费观看| 成年网址网站在线观看| 久久黄色一级片| 日韩精品一区二区三区大桥未久 | 有专无码视频| 人妻丰满熟妇av五码区| 啦啦啦网站在线观看a毛片| 手机精品福利在线观看| 亚洲无码高清视频在线观看| 国产性猛交XXXX免费看| 国产 日韩 欧美 第二页| 99激情网| 亚洲一区精品视频在线| 色香蕉网站| 亚洲欧美另类视频| 日韩最新中文字幕| 欧美区一区| 亚洲香蕉久久| 超级碰免费视频91| 97成人在线观看| 99久久精品久久久久久婷婷| 亚洲成av人无码综合在线观看| 亚洲天堂精品视频| 亚洲日韩精品无码专区| 午夜限制老子影院888| 波多野结衣一区二区三视频| 国产美女无遮挡免费视频网站 | 国产国语一级毛片在线视频| 亚洲资源站av无码网址| 国产精品综合久久久 | 久久香蕉国产线| 午夜a视频| 欧美一级大片在线观看| 亚洲免费三区| 国产麻豆精品在线观看| 极品av一区二区| 福利小视频在线播放| 园内精品自拍视频在线播放| 国产又大又粗又猛又爽的视频| 88国产经典欧美一区二区三区| 国产三级国产精品国产普男人 | 呦视频在线一区二区三区| 久久性妇女精品免费| 亚洲精品片911| 美女视频黄又黄又免费高清| 久久久成年黄色视频| 理论片一区| 毛片在线播放a| 亚洲高清在线播放| 国产精品一区二区不卡的视频| 国产鲁鲁视频在线观看| 五月天久久婷婷| 99免费视频观看| 一边摸一边做爽的视频17国产| 播五月综合| 成人免费一区二区三区| 日本成人不卡视频| 亚洲AV无码一区二区三区牲色| 精品国产成人国产在线| 中文字幕无线码一区| 国产在线精彩视频论坛| 色成人亚洲| 欧美伊人色综合久久天天| 久久精品国产免费观看频道| 不卡无码网| 亚洲成人在线网| 成人在线天堂| 日韩欧美一区在线观看| 国产chinese男男gay视频网| 尤物成AV人片在线观看| 22sihu国产精品视频影视资讯| 国产精品爽爽va在线无码观看| 亚洲自偷自拍另类小说| 黄色国产在线| 欧美性精品不卡在线观看| 国产拍揄自揄精品视频网站| 成人福利在线观看|