- 相關(guān)推薦
軟件的復用技術(shù)及開(kāi)發(fā)方法
軟件的復用技術(shù)及開(kāi)發(fā)方法
2.1軟件的復用技術(shù)
軟件復用是指在開(kāi)發(fā)新的軟件系統時(shí),對已有的軟件或軟件模塊重新使用,該軟件可以是己經(jīng)存在的軟件,也可以是專(zhuān)門(mén)的可復用組件〔8〕。軟件可復用性的高低影響到生產(chǎn)效率的高低、軟件質(zhì)量的好壞和系統可維護性的好壞。在軟件工程中面臨的問(wèn)題不是缺乏復用,而是缺乏廣泛的、系統的復用。軟件復用包括構造可復用軟件和用可復用軟件進(jìn)行構造。構造可復用軟件,一方面可以從現存的軟件系統中抽取,另一方面通過(guò)改寫(xiě)或重新設計來(lái)實(shí)施。
Jones將軟件復用的對象分為4種數據復用、體系結構復用、設計復用和程序復用。這樣,軟件復用可在實(shí)現層、設計層和體系結構層三個(gè)層次上實(shí)現。實(shí)現層軟件復用是指對己有的程序代碼進(jìn)行復用,它包括源代碼組件形式。設計層軟件復用是指對已有的軟件系統的設計信息進(jìn)行復用。而體系結構層軟件復用是最有效的軟件復用,它主要是軟件體系結構形式化的復用,即將軟件的框架組織,全局結構設計作為復用對象?蓮陀玫能浖w系結構則通常是顯式地復用軟件體系結構,并通過(guò)集成其他軟件體系結構,建立新的更高層次的體系結構。
面向對象的軟件復用機制主要有兩種:繼承和對象組合。
(1)繼承
繼承是指子類(lèi)可以從父類(lèi)中直接獲得某些特征和行為的能力,繼承可作為代碼復用和概念復用的手段。作為代碼復用的手段是指:子類(lèi)通過(guò)繼承父類(lèi)的行為,一些代碼就不必重寫(xiě);作為概念復用的手段是指:子類(lèi)共享父類(lèi)的方法定義。作為代碼復用和概念復用手段的繼承機制,在面向對象技術(shù)中,通過(guò)面向對象技術(shù)的一些主要機制來(lái)實(shí)現對“支持可維護性的可復用性”的支持。這些面向對象的主要機制是:數據的抽象化、封裝和多態(tài)性。通過(guò)運用這些機制,繼承可以在高層次上提供(相對于傳統的低層次復用)可復用性:數據的抽象化和繼承關(guān)系使得概念或定義可以復用;多態(tài)性使得實(shí)現和應用可以復用;而抽象化和封裝可以保持和促進(jìn)系統的可維護性。這樣一來(lái),復用的焦點(diǎn)不再集中在函數和算法等具體實(shí)現細節上,而是集中在最重要的含有宏觀(guān)商業(yè)邏輯的抽象層次上。換言之,復用的焦點(diǎn)發(fā)生了“倒轉”。發(fā)生復用焦點(diǎn)的倒轉并不是因為實(shí)現細節的復用并不重要,而是因為這些細節上的復用己經(jīng)做的很好了,并且這種復用在提高復用性的同時(shí)提高了軟件的可維護性。由于繼承關(guān)系直接繼承的是接口,同時(shí)也繼承實(shí)現,因而實(shí)際上父類(lèi)的內部實(shí)現對子類(lèi)而言是可見(jiàn)的,屬于白盒復用方式。
(2)對象的組合
對象組合是指新的復雜功能可以通過(guò)組裝或組合對象來(lái)獲得。這種復雜的功能由對象組合來(lái)獲得的設計思想與過(guò)程化程序設計思想是相似的,在過(guò)程化程序設計中,一個(gè)復雜的功能模塊可以分解為更細小的和更簡(jiǎn)單的功能模塊,整體功能是各個(gè)局部功能的聚集。在面向對象系統中,系統是由對象構成,因此復雜的功能或者說(shuō)能完成更復雜功能的對象,可以通過(guò)功能較簡(jiǎn)單的對象的組裝或組合來(lái)實(shí)現。對象組合方式是從整體與局部的角度來(lái)考慮軟件復用思想的。
對象組合要求對象具有良好的接口定義,使用對象的接口來(lái)使用對象的功能,并往往運用賦值多態(tài)來(lái)獲得具體對象,對象的內部功能是不可見(jiàn)的,對象只以“黑盒”的形式出現,屬于黑盒復用方式。
面向對象的軟件復用過(guò)程有以下步驟:
①抽象:對軟件制品進(jìn)行抽象,抽象層次越高,復用的機會(huì )就越大;
②選擇:一般通過(guò)分類(lèi)和編目方案組織和檢索可復用的軟件制品;
③特殊化:即將上步選定了的一個(gè)一般化的軟件制品進(jìn)行特殊化,以滿(mǎn)足特定領(lǐng)域的要求;
④集成:集成需要在軟件體系結構或框架的指導下,將選定的、特殊化了的模塊集合組成一個(gè)完整的軟件系統。要有效地將可復用制品集成為一個(gè)軟件系統,使用者必須清楚地理解該模塊的接口。
而從復用的使用角度上看,軟件復用的使用行為可能發(fā)生在三個(gè)維上。
①平臺維:以某平臺上的軟件為基礎,修改它與運行平臺相關(guān)的部分,使其能夠運行在新的平臺,即軟件移植;
②時(shí)間維:使用以前的軟件版本作為新版本的基礎,加入新功能,適應新需求,即軟件維護;
③應用維:將某軟件或其中構件用于其他系統中,新系統具有不同功能和用途,即真正的軟件復用。
這三種行為中都重復使用了現有的軟件,但是真正意義的軟件復用指的是應用維上的軟件復用,即“使用為復用而開(kāi)發(fā)的軟件”來(lái)更快更好地開(kāi)發(fā)新的應用系統。通過(guò)軟件復用,消除了許多重復勞動(dòng),降低了軟件開(kāi)發(fā)的時(shí)間。同時(shí),復用高質(zhì)量的己有開(kāi)發(fā)成果,避免了重新開(kāi)發(fā)可能引入的錯誤,從而提高了軟件的質(zhì)量。
2.2軟件的開(kāi)發(fā)方法
2.2.1結構化開(kāi)發(fā)方法
結構化方法是把現實(shí)世界描繪為數據在信息系統中的流動(dòng),以及在數據流動(dòng)的過(guò)程中數據向信息的轉化。其基本思想為:基于功能分解設計系統結構,通過(guò)把復雜的問(wèn)題逐層分解,進(jìn)行簡(jiǎn)化(即自頂向下,逐層細化),將整個(gè)程序結構劃分成若干個(gè)功能相對獨立的子模塊直至最簡(jiǎn),并且每個(gè)模塊最終都可使用順序、選擇、循環(huán)三種基本結構來(lái)實(shí)現,它是從系統內部功能上模擬客觀(guān)世界。
結構化方法強調系統開(kāi)發(fā)過(guò)程的整體性和全局性,強調在整體優(yōu)化的前提下來(lái)考慮具體的分析設計問(wèn)題。結構化方法嚴格地區分開(kāi)發(fā)階段,強調一步一步地嚴格地進(jìn)行系統分析與設計,每一步工作都及時(shí)地總結、發(fā)現問(wèn)題,從而避免了開(kāi)發(fā)過(guò)程的混亂狀態(tài)。
結構化方法是目前被廣泛采用的系統開(kāi)發(fā)方法之一,但是結構化方法也存在的許多問(wèn)題,其局限性有以下幾點(diǎn):
(1)難以解決軟件重用問(wèn)題。結構化方法從功能抽象出發(fā)進(jìn)行模塊劃分,所劃分出的模塊千差萬(wàn)別,模塊共用的程度不高。
(2)結構化方法在需求分析中對問(wèn)題域的認識和描述不是以問(wèn)題域中固有的事物作為基本單位,而是打破了各項事物之間的界限,在全局范圍內以數據流為中心進(jìn)行分析,所以分析結果不能直接反映問(wèn)題域。同時(shí),當系統較復雜時(shí),很難檢驗分析的正確性。因此,結構化分析方法容易隱藏一些對問(wèn)題域的理解偏差,與后繼開(kāi)發(fā)階段的銜接也比較困難。
(3)結構化方法對需求變化的適應能力比較弱,軟件系統結構對功能的變化十分敏感,功能的變化會(huì )引起相關(guān)聯(lián)的許多數據流的修改,同時(shí)設計出的軟件難以重用,延緩了開(kāi)發(fā)的過(guò)程。
(4)結構化方法中設計文檔很難與分析文檔對應,因為二者的表示體系不一致。結構化方法的結果-數據流圖(DFD)和結構化設計結果-模塊結構圖(MSD)是兩種不同的表示體系,從分析到設計的“轉換”使得設計文檔與問(wèn)題域的本來(lái)面貌相差甚遠。
2.2.2面向對象開(kāi)發(fā)方法
面向對象的開(kāi)發(fā)方法采用從特殊到一般的歸納方法,它是對現實(shí)世界中的實(shí)體進(jìn)行分類(lèi),然后區分對象及其屬性,整理對象及其組成部分,并劃分成不同的對象類(lèi),從而得到現實(shí)系統中對象及其關(guān)系,進(jìn)而分析并掌握系統運行的規律。OOA的重點(diǎn)是使用面向對象的觀(guān)點(diǎn)解決現實(shí)世界模型的建立問(wèn)題,是利用從問(wèn)題域中抽象出的類(lèi)和對象來(lái)研究系統實(shí)際需求的一種分析方法。
這種方法是以對象作為分析問(wèn)題、解決問(wèn)題的核心,對問(wèn)題空間進(jìn)行直接映射,使計算機實(shí)現的對象與真實(shí)世界具有一一對應關(guān)系,所以自然符合人類(lèi)認識規律,有效地解決了需求分析模型和軟件設計模型的不匹配現象,它同時(shí)也易于適應系統的變化處理。面向對象的系統設計基本過(guò)程一般包括:問(wèn)題域分析、發(fā)現和定義對象類(lèi)、識別對象的外部聯(lián)系、建立系統的靜態(tài)模型、以及建立系統的動(dòng)態(tài)行為模型。
(1)問(wèn)題域分析:分析應用領(lǐng)域的業(yè)務(wù)范圍、業(yè)務(wù)規則和業(yè)務(wù)處理過(guò)程,確定系統的責任、范圍和邊界,確定系統的需求;
(2)發(fā)現和定義對象類(lèi):識別對象和類(lèi),確定它們的內部特征:屬性和服務(wù)操作;
(3)識別對象的外部聯(lián)系:在發(fā)現和定義對象與類(lèi)的過(guò)程中,需要同時(shí)識別對象與對象、類(lèi)與類(lèi)之間的各種外部聯(lián)系,包括結構性的靜態(tài)聯(lián)系和行為性的動(dòng)態(tài)聯(lián)系;
(4)建立系統的靜態(tài)結構模型:分析系統的靜態(tài)結構,建立系統的靜態(tài)結構模型,并且把它們用圖形和文字說(shuō)明表達出來(lái);
(5)建立系統的動(dòng)態(tài)行為模型:分析系統的行為,建立系統的動(dòng)態(tài)行為模型,并且把它們用圖形和文字說(shuō)明表達出來(lái)。
面向對象模型比以往的模型有了很大的進(jìn)步,但仍有不足。首先面向對象方法中對象的確定有時(shí)會(huì )因客觀(guān)邊界模糊而難以確定,這樣很難保證軟件描述的正確性。其次面向對象方法在描述問(wèn)題域方面存在不足。在問(wèn)題域中,面向對象方法把具體或抽象的問(wèn)題現象直接表述為對象,同時(shí)把現象類(lèi)型直接表述為類(lèi)。大多數OOA方法支持多視角模型,即對同一問(wèn)題域現象,不同的主體可以將它表述為同一對象或類(lèi)型。但系統的描述在應用面向對象方法進(jìn)行建模時(shí)常遇到這樣的困惑,描述者力圖通過(guò)面向對象的表述對存在的問(wèn)題現象達成一致,然而結果得到的對象或類(lèi)并不適合于某個(gè)描述者對對象的獨自表述,即在面向對象模型中,很難把不同描述者對現象的描述正確的統一起來(lái)。
2.2.3基于設計模式的開(kāi)發(fā)方法
設計面向對象軟件比較困難,而設計可復用的面向對象軟件就更加困難。設計應該對手頭的問(wèn)題有針對性,同時(shí)對將來(lái)的問(wèn)題和需求也要有足夠的通用性。希望避免重復設計或盡可能少做重復設計。而模式是針對一個(gè)反復出現的問(wèn)題優(yōu)秀的解決方案,它的方法就是發(fā)現變化、封裝變化〔2‘,。模式本身已經(jīng)充分考慮了變化的情況,并且采用了一種特殊的對待變化的方法,它不是預先考慮會(huì )如何變化,而是考慮哪里可能會(huì )變化,然后隔離,所以當變化發(fā)生時(shí)不會(huì )帶來(lái)全局性的破壞。
有經(jīng)驗的面向對象設計者能做出良好的設計,他們知道:不是解決任何問(wèn)題都要從頭做起。他們更愿意復用以前用過(guò)的好的解決方案。這些經(jīng)驗是他們成為內行的部分原因。實(shí)際上,在許多面向對象的系統中,都存在諸多的類(lèi)和相互通信的對象的重復模式。這些模式幫助設計者將新的設計建立在以往工作的基礎上,復用以往成功的設計方案。一個(gè)熟悉這些模式的設計者不需要再去發(fā)現它們,就能夠立即將它們應用于設計問(wèn)題中。使得面向對象設計更靈活、優(yōu)雅,最終復用性更好。
模式可以在軟件開(kāi)發(fā)的各個(gè)階段被使用,既可以創(chuàng )建一個(gè)解決單一問(wèn)題的模式或者針對某一用例應用的模式,也可以同時(shí)使用多個(gè)模式來(lái)解決復雜的問(wèn)題。模式的設計類(lèi)型可以包括結構化的、行為化的和條件化的解決方案,因此,模式的應用范圍是非常廣闊和靈活的。一旦‘懂得了模式,許多設計決策自然而然就產(chǎn)生了。在人們充分認識到模式的重要性后,逐漸將面向對象軟件的設計經(jīng)驗作為設計模式記錄下來(lái)。每一個(gè)設計模式系統地命名、解釋和評價(jià)了面向對象系統中一個(gè)重要的、重復出現的設計,能夠被人們有效的利用。
模式和系統架構有很大的相似性,都是處理一些抽象概念間的關(guān)系,但是二者還是有很大的不同,模式是領(lǐng)域無(wú)關(guān)的,它是解決一些抽象問(wèn)題的,但是系統架構是針對所要解決的實(shí)際問(wèn)題的,是領(lǐng)域相關(guān)的。模式在應用時(shí)可以
通過(guò)下述步驟進(jìn)行設計:
(1)對問(wèn)題領(lǐng)域進(jìn)行分析、分解,結合模式的適用條件找到和待解決的問(wèn)題匹配的模式,對該模式進(jìn)行定制應用到具體系統中來(lái)。
(2)和模式結合在一起構建起整個(gè)系統架構。比如:MVC(Model-View-Controller),它是專(zhuān)門(mén)針對交互系統提出的,如果要構建一個(gè)交互系統,那么就可以直接應用MVC模式,然后在該模式所搭建的場(chǎng)景啟發(fā)下去發(fā)現Model、View以及Controller,在大的場(chǎng)景的指導下根據其它的需求(模式)構建一些小的場(chǎng)景對系統進(jìn)行有效的分化。
2.3 設計模式的優(yōu)點(diǎn)
大多數設計模式還能使軟件更容易修改和維護。因為它們都是久經(jīng)考驗的解決方案。它們的結構也都是經(jīng)過(guò)長(cháng)期發(fā)展形成的,比新構思的解決方案更善于應對變化。而且,這些模式所用代碼往往更易于理解——從而使代碼更易維護。
設計模式對優(yōu)秀面向對象設計的策略提出了一些建議,其中包括按接口編程、盡量用聚合、找出變化并封裝。這些策略在大多數設計模式中都遵循和使用著(zhù)。所以用不著(zhù)學(xué)習太多設計模式,只學(xué)幾個(gè)就能使你理解這些策略的重要性。這種理解將會(huì )成為將策略應用于實(shí)際設計問(wèn)題的一種能力,即使你并不直接使用設計模式。
設計模式還有一個(gè)好處是,可以在不使用巨型繼承層次結構的情況下,為復雜問(wèn)題創(chuàng )建出設計方案。同樣,即使并不直接使用設計模式,不使用巨型繼承層次結構也會(huì )使設計質(zhì)量提高。
【軟件的復用技術(shù)及開(kāi)發(fā)方法】相關(guān)文章:
給排水專(zhuān)業(yè)CAD軟件開(kāi)發(fā)方法探討03-18
關(guān)于計算機軟件復用探討03-17
WDM光網(wǎng)絡(luò )模擬軟件中復用器/解復用器的研究與實(shí)現11-22
正交頻分復用技術(shù)及其應用03-18
CODARTS建模方法在嵌入式軟件開(kāi)發(fā)中的應用03-18