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

        ?

        設(shè)計(jì)模式在測(cè)井軟件中的應(yīng)用

        2018-04-19 05:27:16,,,
        石油管材與儀器 2018年2期
        關(guān)鍵詞:設(shè)計(jì)模式板卡實(shí)例

        ,,,

        (1. 大慶油田有限責(zé)任公司測(cè)試技術(shù)服務(wù)分公司 黑龍江 大慶 163412;2. 東北石油大學(xué)電氣信息工程學(xué)院 黑龍江 大慶 163318)

        0 引 言

        相對(duì)于大多數(shù)的商用軟件來(lái)說(shuō),測(cè)井軟件的需求變化是非??斓摹_@就要求測(cè)井軟件必須能夠及時(shí)修改,增添新的功能,適應(yīng)新的變化,即對(duì)其擴(kuò)展性及復(fù)用性提出了非常高的要求。

        測(cè)井軟件的一個(gè)主要功能就是數(shù)據(jù)采集和控制,當(dāng)?shù)孛嫦到y(tǒng)的硬件板卡改變或增減時(shí),軟件就需要相應(yīng)的修改。另外,隨著測(cè)井項(xiàng)目的不斷增加,軟件功能和要求也會(huì)越來(lái)越多。同時(shí),隨著操作系統(tǒng)的升級(jí)換代,對(duì)軟件的兼容性和可移植性也提出了較高的要求。

        以上需求的變化,大大增加了測(cè)井軟件的開(kāi)發(fā)難度。嚴(yán)重時(shí),為了增加某一功能,軟件可能就不得不重新設(shè)計(jì)。如何適應(yīng)需求的變化,最大程度的實(shí)現(xiàn)軟件復(fù)用,已成為軟件人員迫切需要解決的問(wèn)題。

        1 設(shè)計(jì)模式

        設(shè)計(jì)模式[1-4]的概念最早來(lái)源于建筑學(xué),由建筑師Alexander提出來(lái)的。它是一套被反復(fù)使用,經(jīng)過(guò)分類編目的,代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。使用設(shè)計(jì)模式是為了可重用設(shè)計(jì),它可以被用于新的語(yǔ)境中,并為使用者提供一些處理新情況的建議。設(shè)計(jì)模式使代碼編制真正工程化[5],是軟件工程的基石。

        1.1 設(shè)計(jì)模式的四個(gè)基本要素

        設(shè)計(jì)模式可以幫助人們復(fù)用現(xiàn)有的設(shè)計(jì)結(jié)構(gòu)和體系結(jié)構(gòu)[6],并且實(shí)現(xiàn)起來(lái)具有過(guò)程簡(jiǎn)單,方便的特點(diǎn)。

        1)模式名

        助記名,一個(gè)有助記憶的名稱,將模式中的問(wèn)題、解決方案以及達(dá)到的效果用一(兩)個(gè)詞描述出來(lái)。應(yīng)用設(shè)計(jì)模式,我們可以進(jìn)行較高的抽象層次設(shè)計(jì)。模式名除了有助于我們思考之外,還可以使我們更方便的與其他設(shè)計(jì)者進(jìn)行設(shè)計(jì)思想及設(shè)計(jì)結(jié)果的交流。

        2)問(wèn)題

        它可能指出了設(shè)計(jì)中存在現(xiàn)有問(wèn)題的原因,以及可能產(chǎn)生的后果,也有可能描述了需要增加的設(shè)計(jì)問(wèn)題,也有可能描述了一些類或?qū)ο蠼Y(jié)構(gòu),它們是導(dǎo)致設(shè)計(jì)不靈活的主要原因。有時(shí)候,問(wèn)題部分會(huì)包括使用模式必須滿足的一系列先決條件。

        3)解決方案

        描述的是設(shè)計(jì)的組成部分之間的相互關(guān)系及各自的職責(zé)和協(xié)作方式。模式就好比是一個(gè)設(shè)計(jì)模板,可應(yīng)用于多種不同場(chǎng)合,所以解決方案并不是一個(gè)特定而具體的設(shè)計(jì)或?qū)崿F(xiàn),它是對(duì)設(shè)計(jì)問(wèn)題的抽象描述,以及指出怎樣用一個(gè)具有一般意義的元素組合(類或?qū)ο蠼M合)來(lái)解決這個(gè)問(wèn)題。

        4)效果

        采用設(shè)計(jì)模式后的應(yīng)用效果及使用模式設(shè)計(jì)過(guò)程中應(yīng)權(quán)衡的問(wèn)題。它包括模式效果和軟件效果兩個(gè)方面[7-9]。在進(jìn)行設(shè)計(jì)決策時(shí),模式效果雖然不常被提到,但它在評(píng)價(jià)設(shè)計(jì)選擇和理解使用模式的代價(jià)及好處等方面卻具有重要意義。一般情況下,軟件效果表述的是語(yǔ)言和實(shí)現(xiàn)問(wèn)題,是在時(shí)間和空間的衡量。

        1.2 設(shè)計(jì)模式的種類

        設(shè)計(jì)模式通常分為兩類[10,11]:一是按照設(shè)計(jì)目的不同進(jìn)行分類,該類模式主要以具體完成的工作作為分類標(biāo)準(zhǔn);二是按照處理范圍不同進(jìn)行分類,該類模式主要以用于類還是用于對(duì)象實(shí)例作為分類標(biāo)準(zhǔn)。按照第一種分類方式,設(shè)計(jì)模式可分為創(chuàng)建模式、結(jié)構(gòu)模式和行為模式三大類。按照第二種分類方式,設(shè)計(jì)模式可分為類模式和對(duì)象模式兩大類。具體設(shè)計(jì)模式分類如表1所示。

        表1 設(shè)計(jì)模式分類表

        1.3 設(shè)計(jì)模式的正確選用

        各種模式均有其自身特點(diǎn)和適用范圍,所以在選取模式前應(yīng)充分了解模式的內(nèi)涵及側(cè)重點(diǎn),發(fā)掘出不同模式的適用規(guī)律[12,13]。

        選擇合適的軟件設(shè)計(jì)模式通常需要考慮以下幾個(gè)方面:

        1)熟練掌握各種設(shè)計(jì)模式的處理范圍;

        2)瀏覽模式的意圖部分;

        3)研究模式之間如何相互聯(lián)系;

        4)將目的相同模式進(jìn)行對(duì)比研究;

        5)明確重新進(jìn)行設(shè)計(jì)的意圖;

        6)明確設(shè)計(jì)中的可變?cè)亍?/p>

        一般的選擇步驟如下:

        1)對(duì)所要解決的問(wèn)題進(jìn)行抽象,并劃分適當(dāng)?shù)念愋停?/p>

        2)根據(jù)問(wèn)題類型選擇適合的設(shè)計(jì)模式;

        3)規(guī)劃問(wèn)題和匹配模式;

        4)對(duì)選取的模式進(jìn)行變體,即對(duì)模式的原始結(jié)構(gòu)進(jìn)行修改和擴(kuò)展,以解決具體問(wèn)題;

        5)設(shè)計(jì)并細(xì)化所需的軟件體系結(jié)構(gòu);

        6)對(duì)設(shè)計(jì)質(zhì)量進(jìn)行度量。

        2 設(shè)計(jì)模式在測(cè)井軟件上的應(yīng)用

        測(cè)井軟件的用戶需求是變化的,因而軟件的修改是不可避免的。需求的變化主要表現(xiàn)在測(cè)井地面系統(tǒng)硬件的改動(dòng)及測(cè)井項(xiàng)目的增加,這些變化因素在軟件的設(shè)計(jì)中必須重點(diǎn)考慮。針對(duì)上述實(shí)際情況,在軟件設(shè)計(jì)過(guò)程中采用了設(shè)計(jì)模式[14,15],則主要是因?yàn)槠渚哂羞m應(yīng)需求的變化的特點(diǎn)。此外,由于設(shè)計(jì)模式的引入,使得測(cè)井軟件系統(tǒng)不僅具有更好的可復(fù)用性,其擴(kuò)展性和維護(hù)性也變得更加容易。

        測(cè)井軟件的一項(xiàng)主要功能是實(shí)現(xiàn)實(shí)時(shí)的數(shù)據(jù)采集。這就要求軟件與具體的采集板卡發(fā)生交互,即下傳控制指令,上傳采集數(shù)據(jù)。另外,實(shí)時(shí)采集軟件一般采用多線程設(shè)計(jì),使得多個(gè)線程可能同時(shí)操作同一采集板卡或一個(gè)線程控制多個(gè)采集板卡。對(duì)于測(cè)井軟件來(lái)說(shuō),地面硬件系統(tǒng)具有唯一性,但對(duì)于硬件系統(tǒng)自身來(lái)講,它所包含的采集板卡的數(shù)量和功能是可變的。

        下面以超越地面系統(tǒng)硬件接口組件設(shè)計(jì)為例,介紹一下如何將設(shè)計(jì)模式應(yīng)用于測(cè)井軟件的設(shè)計(jì)中,以提高軟件質(zhì)量。

        2.1 單件模式(Singleton pattern)

        定義: 保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn)。適用于在一個(gè)系統(tǒng)要求一個(gè)類只有一個(gè)實(shí)例時(shí)才應(yīng)當(dāng)使用單例模式。

        這個(gè)唯一實(shí)例應(yīng)該是通過(guò)子類化可擴(kuò)展的,并且客戶應(yīng)該無(wú)需更改代碼就能使用一個(gè)擴(kuò)展的實(shí)例時(shí)。

        優(yōu)點(diǎn):對(duì)唯一實(shí)例的受控訪問(wèn);自行實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例。單件模式取代了全局對(duì)象,降低了代碼耦合度,便于程序修改和維護(hù)。

        針對(duì)超越地面系統(tǒng)硬件的唯一性,以前的測(cè)井軟件設(shè)計(jì)常常將硬件接口對(duì)象定義為一個(gè)全局變量,而全局變量是程序員心中永遠(yuǎn)的痛。主要問(wèn)題包括:

        1)變量名沖突,增加管理成本。

        2)耦合度增加。

        3)單個(gè)實(shí)例問(wèn)題。全局變量不能阻止程序員定義一個(gè)類的多個(gè)對(duì)象實(shí)例。在一個(gè)多人參與、并行開(kāi)發(fā)的大型項(xiàng)目中,這也會(huì)增加很多管理上的負(fù)擔(dān)。

        4)初始化順序。全局變量不可能保證相互之間遵循特定的初始化順序,這完全由編譯器決定。

        5)多線程訪問(wèn)。當(dāng)多個(gè)并發(fā)的線程都需要訪問(wèn)某些全局變量時(shí),我們必須使用各種同步機(jī)制,小心地保護(hù)這些全局變量,以免陷入并發(fā)沖突的泥潭。

        設(shè)計(jì)模式中的單件模式就很好地解決了此類問(wèn)題,它即保證了對(duì)象的唯一性,也避免了全局變量帶來(lái)的問(wèn)題。單件模式就是以一個(gè)類只有一個(gè)對(duì)象實(shí)例為設(shè)計(jì)目的,并提供一個(gè)訪問(wèn)該對(duì)象實(shí)例的全局訪問(wèn)點(diǎn)。程序員不能通過(guò)類的構(gòu)造函數(shù)獲得對(duì)象實(shí)例(因?yàn)闃?gòu)造函數(shù)聲明為private或protected類型),但可以從該類提供的靜態(tài)成員函數(shù)得到該類唯一的對(duì)象實(shí)例指針或引用。從某種意義上說(shuō),我們可以把這個(gè)對(duì)象實(shí)例看做一個(gè)隱藏在單件類內(nèi)部的“隱式全局變量”。因此在超越測(cè)井軟件的硬件接口設(shè)計(jì)中采用了單件模式,程序部分代碼如下:

        class CExceedHard : public CHardInterface

        {

        private:

        CExceedHard(void);

        public:

        ~CExceedHard(void);

        static CHardInterface* GetInstance(void);

        static void DelInstance(void);

        }

        2.2 工廠方法模式(Factory Method pattern)

        定義:定義一個(gè)創(chuàng)建對(duì)象的抽象類(接口),但是卻讓子類來(lái)決定具體實(shí)例化哪一個(gè)類。當(dāng)一個(gè)類無(wú)法預(yù)料要?jiǎng)?chuàng)建哪種類的對(duì)象或是一個(gè)類需要由子類來(lái)指定創(chuàng)建的對(duì)象時(shí),我們就需要用到該模式了。工廠方法模式可以根據(jù)不同的條件產(chǎn)生不同的實(shí)例,但這些不同的實(shí)例通常是屬于相同的類型,并具有共同的父類。

        優(yōu)點(diǎn):當(dāng)系統(tǒng)擴(kuò)展需要添加新的產(chǎn)品對(duì)象時(shí),僅僅需要添加一個(gè)具體對(duì)象以及一個(gè)具體工廠對(duì)象,原有工廠對(duì)象不需要進(jìn)行任何修改,也不需要修改客戶端,很好的符合了“開(kāi)放-封閉”原則。

        超越地面系統(tǒng)硬件接口組件中聚合多個(gè)采集板卡對(duì)象,這些采集板卡對(duì)象是否都需要?jiǎng)?chuàng)建,還是選擇性的創(chuàng)建幾個(gè),是由組件根據(jù)測(cè)井項(xiàng)目的需要來(lái)動(dòng)態(tài)創(chuàng)建的。硬件接口組件的調(diào)用者不知道,也無(wú)需知道具體要?jiǎng)?chuàng)建哪些采集板卡對(duì)象。這種方式可以更好地適應(yīng)未來(lái)采集板卡數(shù)量的改變及功能的變化。

        設(shè)計(jì)模式中的工廠方法模式可以很好地解決此類問(wèn)題。工廠方法模式以定義一個(gè)用于創(chuàng)建對(duì)象的接口為設(shè)計(jì)目的,讓子類決定實(shí)例化哪一個(gè)類,將實(shí)例化延遲到其子類。對(duì)應(yīng)的問(wèn)題范疇就是一個(gè)類需要實(shí)例化另一個(gè)類的派生類,但不知道具體是哪個(gè)派生類。工廠方法模式允許派生類來(lái)做出決定。該模式在定義框架的過(guò)程中很常用。這是因?yàn)榭蚣艽嬖谟谝粋€(gè)抽象的層次上。通常,它們不知道,而且也不應(yīng)該關(guān)心特定對(duì)象的實(shí)例化。它們需要將特定對(duì)象的決策推遲框架的用戶。

        在超越地面系統(tǒng)硬件接口組件設(shè)計(jì)中,就是采用工廠方法模式來(lái)動(dòng)態(tài)創(chuàng)建需要的板卡對(duì)象。即根據(jù)測(cè)井項(xiàng)目需要的測(cè)量通道來(lái)動(dòng)態(tài)創(chuàng)建含有此通道的采集板卡對(duì)象,而無(wú)需由程序員在代碼中明確創(chuàng)建某一類型的采集板卡對(duì)象。這種實(shí)現(xiàn)方式也體現(xiàn)出了設(shè)計(jì)模式的設(shè)計(jì)原則和理念,即針對(duì)接口編程,而不要針對(duì)實(shí)現(xiàn)編程,根本的意圖是適應(yīng)需求變化。程序的部分代碼如下:

        short CExceedHard::AddChannel(CString strName, UINT uChannelSize, UINT uBufferLen, DataType iDataType)

        {

        CBDChannel* pChannel = new CBDChannel(strName, uChannelSize, uBufferLen);

        if(pChannel != NULL)

        {

        BDChannelInfo* pChInfo = NULL;

        for(int i=0; i

        {

        pChInfo = (BDChannelInfo*)m_inherentChannelInfoList.GetAt(i);

        if(pChInfo != NULL)

        {

        if(strName == pChInfo->strChannelName)

        {

        CString strBoardName = pChInfo->strBoardName;

        if(strBoardName == _T("SC58301A"))

        pBoard = new CBD58301A();

        else if(strBoardName == _T("SC58112"))

        pBoard = new CBD58112();

        else if(strBoardName == _T("SC58114"))

        pBoard = new CBD58114();

        if(pBoard != NULL)

        {

        m_usedBoardList.Add(pBoard);

        return HD_SUCCESS;}}}}}}

        采用該種設(shè)計(jì)的優(yōu)點(diǎn):當(dāng)系統(tǒng)擴(kuò)展需要添加新的產(chǎn)品對(duì)象時(shí),僅僅需要添加一個(gè)具體對(duì)象以及一個(gè)具體工廠對(duì)象,原有工廠對(duì)象不需要進(jìn)行任何修改,也不需要修改客戶端,很好的符合了“開(kāi)放-封閉”原則。

        3 結(jié)束語(yǔ)

        設(shè)計(jì)模式既簡(jiǎn)單又復(fù)雜。使用設(shè)計(jì)模式要求我們添加更多的類,進(jìn)行更多的設(shè)計(jì)工作,這是設(shè)計(jì)模式復(fù)雜的一面。它提醒我們,設(shè)計(jì)模式只應(yīng)對(duì)變化或可能變化的部分使用,對(duì)于不變的部分濫用就會(huì)造成“過(guò)度設(shè)計(jì)”。由于超越地面系統(tǒng)的測(cè)井軟件具有用戶需求變化,軟件修改不可避免等特點(diǎn)。因此,在軟件設(shè)計(jì)過(guò)程中采用設(shè)計(jì)模式,此外,由于設(shè)計(jì)模式的引入,使得測(cè)井軟件系統(tǒng)不僅具有更好的可復(fù)用性,其擴(kuò)展性和維護(hù)性也變得更加容易。實(shí)現(xiàn)了面對(duì)變化的需求時(shí),我們只需要修改很少的代碼,就可以滿足新的需求,這是設(shè)計(jì)模式簡(jiǎn)單的一面,它可以大幅度簡(jiǎn)化我們后續(xù)的開(kāi)發(fā)和維護(hù)工作。

        設(shè)計(jì)模式最根本的意圖就是適應(yīng)需求變化,這一點(diǎn)正是測(cè)井軟件急需解決而不好解決的問(wèn)題。另外,設(shè)計(jì)模式可以有效地提高軟件的設(shè)計(jì)和代碼復(fù)用性,便于成果的繼承,事半功倍。因此,學(xué)習(xí)運(yùn)用設(shè)計(jì)模式是開(kāi)發(fā)高質(zhì)量測(cè)井軟件的必由之路,前景廣闊。

        [1] GAMMA E.設(shè)計(jì)模式—可復(fù)用面向?qū)ο筌浖幕A(chǔ)[M].李英軍,譯.北京:機(jī)械工業(yè)出版社,2000:55-75.

        [2] JACOBSON I.The unified modeling language development process [M].Boston: Addison Wesley, 1998:141-152.

        [3] MIKKONEN T.Formalizing design patterns[A].Proceedings of International Conference on Software Engineering [C].New York: IEEE Computer Society Press, 1998:115-124.

        [4] GAMMA E. Design patterns: elements of reusable object-oriented systems[M] . Boston: Addison Wesley,1995:75-90.

        [5] 萬(wàn)劍怡,薛錦云.使用規(guī)范匹配實(shí)現(xiàn)設(shè)計(jì)模式的自動(dòng)獲取[J].小型微型計(jì)算機(jī)系統(tǒng),2002,23(3):326-329.

        [6] 張世博,周樹(shù)杰,閔艷.JAVA程序開(kāi)發(fā)中的設(shè)計(jì)模式[J].微型電腦應(yīng)用, 2002, 18(9): 45-47.

        [7] 鐘茂生,王明文.軟件設(shè)計(jì)模式及其使用[J].計(jì)算機(jī)應(yīng)用,2002,22(8):32-35.

        [8] 廖志剛,李增智.設(shè)計(jì)模式在系統(tǒng)中的應(yīng)用[J].計(jì)算機(jī)工程與應(yīng)用,2002, (12): 7-10.

        [9] GAMMA E. Design patterns elements of reusable object-oriented software[M].北京:機(jī)械工業(yè)出版社,2002:124-130.

        [10] 童立,馬遠(yuǎn)良.設(shè)計(jì)模式在基于組件的框架設(shè)計(jì)中的應(yīng)用[J].計(jì)算機(jī)工程與應(yīng)用,2002, (17): 123-128.

        [11] ALUR D.Core J2EE patterns[M]. 北京:機(jī)械工業(yè)出版社,2002:89-120.

        [12] ALAN SHALLOWAY & JAMES R. TROTT.設(shè)計(jì)模式精解[M].清華大學(xué)出版社,2004,12:1-238.

        [13] 王詠武 王詠剛.道法自然-面向?qū)ο髮?shí)踐指南[M].電子工業(yè)出版社,2004:10,1-432.

        [14] 劉海巖.設(shè)計(jì)模式及其在軟件設(shè)計(jì)中的應(yīng)用研究[J].西安交通大學(xué)學(xué)報(bào),2005,39(10):1043-1047.

        [15] ECKEL B.Java 編程思想(第二版)[M].侯捷,譯.北京:機(jī)械工業(yè)出版社,2002:5-120.

        猜你喜歡
        設(shè)計(jì)模式板卡實(shí)例
        仿生設(shè)計(jì)模式的創(chuàng)新應(yīng)用探索
        玩具世界(2023年6期)2024-01-29 12:14:36
        “1+1”作業(yè)設(shè)計(jì)模式的實(shí)踐探索
        基于PCI9054的多總線通信板卡的研制
        基于FPGA的多通道模擬量采集/輸出PCI板卡的研制
        交通機(jī)電工程設(shè)計(jì)模式創(chuàng)新探討
        一種基于光纖數(shù)據(jù)傳輸?shù)亩喟蹇ㄜ浖绦驘龑?xiě)技術(shù)
        完形填空Ⅱ
        完形填空Ⅰ
        一種通用模擬量及開(kāi)關(guān)量信號(hào)采集板卡的設(shè)計(jì)
        互動(dòng)式設(shè)計(jì)模式研究
        神马影院午夜dy888| 中文字幕人妻系列一区尤物视频| 最新国产成人自拍视频| 一区二区亚洲精品在线| 国产成人喷潮在线观看| 国产成人精品日本亚洲18| 四虎无码精品a∨在线观看| 日本一区二区三区高清视 | 97激情在线视频五月天视频| 国产av一区二区三区性入口 | 粉嫩的极品女神尤物在线| 国产精品人人做人人爽| 日韩欧美在线综合网| 亚洲成aⅴ人片在线观看天堂无码| 亚洲av手机在线观看| 观看在线人视频| 国产亚洲av手机在线观看| 免费国产调教视频在线观看| 大屁股流白浆一区二区三区 | 白白色发布的在线视频| 国产av无码专区亚洲av中文| 国产精品理人伦国色天香一区二区| 极品少妇一区二区三区四区| 女优av一区二区三区| 少妇人妻偷人精品免费视频| 99精品久久久中文字幕| 乳乱中文字幕熟女熟妇| 日韩av无码中文无码电影| 免费无码肉片在线观看| 喷潮出白浆视频在线观看| 色熟妇人妻久久中文字幕| 精品国产乱码久久久久久影片 | 婷婷成人亚洲综合国产| 日韩不卡的av二三四区| 国产98在线 | 日韩| 欧美精品一区二区精品久久| 熟女少妇精品一区二区三区| 成人在线免费电影| 国产精品无需播放器| 成人短篇在线视频夫妻刺激自拍| 亚洲综合色区一区二区三区|