亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        一種基于State模式的慣導(dǎo)系統(tǒng)軟件設(shè)計方法

        2017-05-12 02:02:26何長久
        導(dǎo)航定位與授時 2017年3期
        關(guān)鍵詞:子類設(shè)計模式慣導(dǎo)

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

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

        一種基于State模式的慣導(dǎo)系統(tǒng)軟件設(shè)計方法

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

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

        State模式是一種面向?qū)ο蟮脑O(shè)計方法。針對慣導(dǎo)系統(tǒng)軟件設(shè)計中的問題,提出了一種基于State模式的慣導(dǎo)系統(tǒng)軟件設(shè)計方法,并將其應(yīng)用于慣導(dǎo)系統(tǒng)軟件分支流程的設(shè)計過程中。與傳統(tǒng)設(shè)計方法相比,該方法將邏輯判斷和處理封裝在狀態(tài)對象中,為不同系統(tǒng)狀態(tài)子類聲明了一個公共接口,用子類實現(xiàn)特定狀態(tài)下的行為操作,避免了多種狀態(tài)轉(zhuǎn)換時邏輯判斷的復(fù)雜度,降低了慣導(dǎo)系統(tǒng)軟件的耦合程度,增強了代碼的可靠性、健壯性和可移植性,從而提高了軟件質(zhì)量。

        State模式;慣導(dǎo)系統(tǒng)軟件;設(shè)計方法

        0 引言

        設(shè)計模式是利用面向?qū)ο笳Z言的類和方法來實現(xiàn)某個編程目標(biāo)的方法,用以解決在特定情況下出現(xiàn)的重復(fù)設(shè)計問題。

        按照應(yīng)用范圍分類,設(shè)計模式可以分為類模式和對象模式。類模式處理的是類和子類之間的關(guān)系,這些關(guān)系是通過繼承建立的,是靜態(tài)的。對象模式處理的是對象間的關(guān)系,這些關(guān)系在運行時刻是可以變化的,是動態(tài)的。

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

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

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

        圖1 慣導(dǎo)系統(tǒng)軟件工作剖面圖Fig.1 The working section of inertial navigation software

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

        1 State模式說明

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

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

        圖2中,Context將與狀態(tài)相關(guān)的請求委托給當(dāng)前的ConcreteState對象處理。它可將自身作為一個參數(shù)傳遞給處理該請求的狀態(tài)對象??蛻艨捎脿顟B(tài)對象來配置一個Context,一旦一個Context配置完畢,它的客戶不再需要直接與狀態(tài)對象打交道。同時,Context或ConcreteSate子類都可以決定哪個狀態(tài)是另外一個的后續(xù)者,以及是在何種條件下進行狀態(tài)轉(zhuǎn)換。

        State模式具有以下優(yōu)點:

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

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

        2 基于State模式的慣導(dǎo)系統(tǒng)軟件設(shè)計

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

        下面分別介紹采用傳統(tǒng)方法和采用State模式實現(xiàn)慣導(dǎo)軟件狀態(tài)轉(zhuǎn)換的流程設(shè)計。

        2.1 傳統(tǒng)分支設(shè)計實現(xiàn)

        傳統(tǒng)的分支設(shè)計,主要采用if或switch分支設(shè)計。當(dāng)狀態(tài)繁多時,就需要大量的分支來支撐。而過多的分支會引起邏輯的混亂。

        簡要選取自檢、初始裝定、粗對準(zhǔn)、精對準(zhǔn)、導(dǎo)航幾個主要工作狀態(tài),以此為例,說明采用傳統(tǒng)的分支設(shè)計的具體實現(xiàn),流程示意如圖3所示。

        圖3 傳統(tǒng)的分支設(shè)計Fig.3 The traditional branch design

        2.2 State設(shè)計模式下的慣導(dǎo)軟件設(shè)計實現(xiàn)

        慣導(dǎo)系統(tǒng)的每種工作狀態(tài)均可抽象成“進入該狀態(tài)”、“運行該狀態(tài)”、“結(jié)束該狀態(tài)”、“改變該狀態(tài)”四種行為。利用State模式設(shè)計狀態(tài)轉(zhuǎn)換如圖4所示。

        圖4 State模式應(yīng)用示例Fig.4 Applicarion example of State pattern

        仍以此項目為例,定義抽象類State來表示慣導(dǎo)系統(tǒng)的工作狀態(tài),定義虛函數(shù)ComeIn( )表示進入該狀態(tài)的行為,Run( )表示保持該狀態(tài)的行為,GoOut( )表示結(jié)束該狀態(tài)的行為,ChangeState( )規(guī)定狀態(tài)轉(zhuǎn)換的準(zhǔn)則。為了更靈活地實現(xiàn)狀態(tài)間切換,運用State子類自身指定它們的后續(xù)狀態(tài)以及何時進行轉(zhuǎn)換。通常狀態(tài)轉(zhuǎn)換的動作為前一個狀態(tài)的結(jié)束,后一個狀態(tài)的進入。

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

        圖5給出了以系統(tǒng)自檢為例的代碼。應(yīng)用Working實例對象的_state->Run()函數(shù),來實現(xiàn)系統(tǒng)狀態(tài)運行及狀態(tài)切換。當(dāng)自檢時間滿足時,運行_state->ChangeState()函數(shù),調(diào)用_stateSelfTest->GoOut()和_stateCoarseAlign->ComeIn()函數(shù)來實現(xiàn)狀態(tài)切換功能。

        圖5 系統(tǒng)自檢狀態(tài)設(shè)計示意圖Fig.5 The design schematic diagram of system self-test state

        2.3 兩種實現(xiàn)方法的比較

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

        圖6 以條件分支設(shè)計的狀態(tài)轉(zhuǎn)換示意圖Fig.6 The schematic diagram of state transition according to the condition branch

        而采用State設(shè)計模式的設(shè)計方法,任務(wù)流被看成是由一組狀態(tài)和轉(zhuǎn)換構(gòu)成的,在某個狀態(tài)被執(zhí)行后,它的輸出將被相應(yīng)地轉(zhuǎn)換以跳轉(zhuǎn)到另一特定狀態(tài)繼續(xù)執(zhí)行。這種可根據(jù)周圍條件的變化,動態(tài)調(diào)整任務(wù)流執(zhí)行的過程,使得在狀態(tài)修改時,無需改變函數(shù)執(zhí)行的主體模塊而只考慮子類具體行為即可。

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

        圖7 設(shè)計模式的狀態(tài)轉(zhuǎn)換示意圖Fig.7 The schematic diagram of state transition according to the design pattern

        3 結(jié)論

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

        [1] Gamma E,Helm R,Johnson R,等.設(shè)計模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)[M].李英軍,馬曉星,蔡敏,等譯.北京:機械工業(yè)出版社,2007.

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

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

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

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

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

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

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

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

        [10] 周樹語.設(shè)計模式在面向?qū)ο罂蚣苤械膽?yīng)用[J].計算機光盤軟件與應(yīng)用,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

        國家自然科學(xué)基金(41527803)

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

        TP311.5

        A

        2095-8110(2017)03-0022-05

        猜你喜歡
        子類設(shè)計模式慣導(dǎo)
        仿生設(shè)計模式的創(chuàng)新應(yīng)用探索
        玩具世界(2023年6期)2024-01-29 12:14:36
        “1+1”作業(yè)設(shè)計模式的實踐探索
        卷入Hohlov算子的某解析雙單葉函數(shù)子類的系數(shù)估計
        自適應(yīng)模糊多環(huán)控制在慣導(dǎo)平臺穩(wěn)定回路中的應(yīng)用
        交通機電工程設(shè)計模式創(chuàng)新探討
        無人機室內(nèi)視覺/慣導(dǎo)組合導(dǎo)航方法
        關(guān)于對稱共軛點的倒星象函數(shù)某些子類的系數(shù)估計
        基于Bagging模型的慣導(dǎo)系統(tǒng)誤差抑制方法
        基于多線程的慣導(dǎo)邏輯仿真器設(shè)計
        計算機工程(2015年4期)2015-07-05 08:28:57
        互動式設(shè)計模式研究
        日本视频一区二区这里只有精品 | 999精品免费视频观看| 中文字幕久区久久中文字幕| 丁香婷婷在线成人播放视频| 欧美成人猛交69| 欧美午夜一区二区福利视频| 无码高潮少妇毛多水多水免费| 亚洲国产av一区二区不卡| 欧洲熟妇色xxxx欧美老妇性| 97久久天天综合色天天综合色hd| 亚洲熟妇大图综合色区| 日产一区二区三区的精品| 成人丝袜激情一区二区| 最近中文字幕mv在线资源| 一区二区在线亚洲av蜜桃| 日本久久大片中文字幕| 极品尤物一区二区三区| 精品久久人人妻人人做精品| 国产精品18久久久久久首页| 国产一区二区中文字幕在线观看 | 欧美国产精品久久久乱码| 午夜精品一区二区三区无码不卡| 国产精品午夜福利亚洲综合网 | 一二三四在线视频社区3| 亚洲一区二区高清在线| 亚洲女同恋av中文一区二区 | 一区二区三区精品少妇| 少妇无码太爽了不卡视频在线看 | 另类老妇奶性生bbwbbw| 久久精品无码一区二区2020| 国产91成人自拍视频| 亚洲av无码乱码精品国产| 日本丰满人妻xxxxxhd| 亚洲AⅤ樱花无码| 日韩精品一区二区免费| 免费人妻精品一区二区三区| 日韩精品区欧美在线一区| 国产三级在线观看不卡| 久久国产成人精品av| 拍摄av现场失控高潮数次| 国产高清一区在线观看|