• 
    

    
    

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

      ?

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

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

      ,,,

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

      0 引 言

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

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

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

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

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

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

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

      1)模式名

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

      2)問題

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

      3)解決方案

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

      4)效果

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

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

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

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

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

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

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

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

      6)明確設(shè)計(jì)中的可變元素。

      一般的選擇步驟如下:

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

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

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

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

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

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

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

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

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

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

      2.1 單件模式(Singleton pattern)

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

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

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

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

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

      2)耦合度增加。

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

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

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

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

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

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

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

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

      在超越地面系統(tǒng)硬件接口組件設(shè)計(jì)中,就是采用工廠方法模式來動態(tài)創(chuàng)建需要的板卡對象。即根據(jù)測井項(xiàng)目需要的測量通道來動態(tài)創(chuàng)建含有此通道的采集板卡對象,而無需由程序員在代碼中明確創(chuàng)建某一類型的采集板卡對象。這種實(shí)現(xiàn)方式也體現(xiàn)出了設(shè)計(jì)模式的設(shè)計(jì)原則和理念,即針對接口編程,而不要針對實(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)品對象時,僅僅需要添加一個具體對象以及一個具體工廠對象,原有工廠對象不需要進(jìn)行任何修改,也不需要修改客戶端,很好的符合了“開放-封閉”原則。

      3 結(jié)束語

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

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

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

      [6] 張世博,周樹杰,閔艷.JAVA程序開發(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ù)亩喟蹇ㄜ浖绦驘龑懠夹g(shù)
      完形填空Ⅱ
      完形填空Ⅰ
      一種通用模擬量及開關(guān)量信號采集板卡的設(shè)計(jì)
      互動式設(shè)計(jì)模式研究
      子长县| 昌邑市| 西乌珠穆沁旗| 大厂| 宾川县| 杭州市| 山阴县| 青阳县| 克山县| 青河县| 姚安县| 夏津县| 紫云| 神池县| 弋阳县| 华阴市| 元谋县| 绍兴县| 遵义市| 宜城市| 泾源县| 大丰市| 黎川县| 明溪县| 双桥区| 乐业县| 基隆市| 丰城市| 福贡县| 睢宁县| 屏南县| 荆州市| 稻城县| 宣威市| 秀山| 原平市| 邵东县| 彭山县| 江口县| 仙桃市| 常宁市|