摘 要:軟件技術(shù)總是處于不斷發(fā)展變化中,軟件產(chǎn)業(yè)和軟件工程師們不停的尋求軟件設(shè)計和開發(fā)的新途徑。本文闡述了面向?qū)ο蟪绦蛟O(shè)計方法的基本特點,并與傳統(tǒng)的程序設(shè)計方法作對比,著重分析了其優(yōu)越性。
關(guān)鍵詞:面向?qū)ο蟪绦蛟O(shè)計;易學(xué)好用;穩(wěn)定性好;可重用性;維護性好
中圖分類號:TP311.52
在程序設(shè)計方法發(fā)展過程中,每一次重大突破都使得程序員可以應(yīng)對更大的復(fù)雜性。在這條道路上邁出的每一步中,新的方法都運用和發(fā)展了以前的方法中最好的理念。今天,許多項目的規(guī)模又進一步發(fā)展。為了解決這個問題,面向?qū)ο蟪绦蛟O(shè)計方法應(yīng)運而生。在軟件工程中,面向?qū)ο蟪绦蛟O(shè)計方法作為軟件開發(fā)的一種實用而有效的途徑,具有很多獨特的優(yōu)點,已逐步得到軟件開發(fā)人員的廣泛應(yīng)用。
1 面向?qū)ο蟮脑O(shè)計(Object-Orineted Design)特點
軟件開發(fā)分為五個階段:分析、設(shè)計、實現(xiàn)、測試和運用。每一個階段都很重要,但分析的設(shè)計階段是最為關(guān)鍵的,往往需要軟件開發(fā)者花費大量的時間和精力。分析描述的是系統(tǒng)需要做什么,設(shè)計描述的是系統(tǒng)如何去做。在系統(tǒng)中,將現(xiàn)實對象與程序?qū)ο蟮年P(guān)系、相互作用模型化,找出有用的屬性去簡化和解決問題。OOA(Object Oriented Analyzing面向?qū)ο蠓治觯┠P团cOOD模型兩者之間的關(guān)系如下圖所示:
這些可利用的對象類或部件可能是以前開發(fā)工作的結(jié)果,也可能是從網(wǎng)絡(luò)上免費下載或從有關(guān)軟件廠商購買到的產(chǎn)品,還可能是同一開發(fā)小組的其他開發(fā)人員設(shè)計實現(xiàn)供大家共享的模塊?,F(xiàn)成的對象類或部件使用得越多,這個優(yōu)勢就越明顯。如果暫時沒有可以利用的現(xiàn)成的對象類或部件,在詳細(xì)設(shè)計中還可以分析所要開發(fā)的軟件系統(tǒng)中哪些類或哪些功能是可以重用的,把這些可重用的部件交給專人優(yōu)先開發(fā)。這樣,不僅節(jié)約了開發(fā)人員重復(fù)開發(fā)的時間,提高了效率和質(zhì)量,并提高了軟件開發(fā)過程的標(biāo)準(zhǔn)化程度。在比較大型的開發(fā)項目中,可以設(shè)置專人負(fù)責(zé)管理所有的可重用資源。將這些資源組織成類庫或其他的可重用結(jié)構(gòu)。這些資源對整個開發(fā)任務(wù)將是非常關(guān)鍵的。
2 面向?qū)ο蟮脑O(shè)計(Object-Orineted Design)優(yōu)點
面向?qū)ο笤O(shè)計的結(jié)果既可以用面向?qū)ο笳Z言、也可以用非面向?qū)ο笳Z言實現(xiàn)。從原理上說,使用任何一種通用語言都可以實現(xiàn)面向?qū)ο蟮母拍睢.?dāng)然,使用面向?qū)ο笳Z言,實現(xiàn)面向?qū)ο蟮母拍?,遠(yuǎn)比使用非面向?qū)ο笳Z言方便,但是,方便性也并不是決定選擇何種語言的關(guān)鍵因素。選擇編程語言的關(guān)鍵因素,是語言的一致的表達(dá)能力、可重用性及可維護性。從面向?qū)ο笥^點來看,能夠更完整、更準(zhǔn)確地表達(dá)問題
與傳統(tǒng)的方法相比,面向?qū)ο蟮膯栴}求解具有更好優(yōu)勢。具體表現(xiàn)在如下幾個方面。
(1)易學(xué)好用。傳統(tǒng)的程序設(shè)計技術(shù)是面向過程的設(shè)計方法,這種方法以算法為核心,把數(shù)據(jù)和過程作為相互獨立的部分,數(shù)據(jù)代表問題空間中的客體,程序代碼則用于處理這些數(shù)據(jù)。把數(shù)據(jù)和代碼代為分離的實體,反映了計算機的觀點,因為在計算機的內(nèi)部數(shù)據(jù)和程序是分開存放的。但是,這樣做的時候總存在使用錯誤的數(shù)據(jù)調(diào)用正確的程序模塊,或使用正確的數(shù)據(jù)調(diào)用錯誤的程序模塊的危險。使數(shù)據(jù)和操作保持一致,是程序員一個沉重負(fù)擔(dān),在多人分工合作開發(fā)一個大型軟件系統(tǒng)的過程中,如果負(fù)責(zé)設(shè)計數(shù)據(jù)結(jié)構(gòu)的人中途改變了某個數(shù)據(jù)的結(jié)構(gòu)而又沒有及時通知所有人員,則會發(fā)生許多不該發(fā)生的錯誤。面向?qū)ο蟮能浖夹g(shù)為開發(fā)者提供了隨著對某個應(yīng)用系統(tǒng)的認(rèn)識逐步深入和具體化的過程,隨著認(rèn)識深入和具體化再逐步派生出更具體的派生類。這樣的開發(fā)過程符合人們認(rèn)識客觀世界,解決復(fù)雜問題時逐步深化漸進過程。
(2)穩(wěn)定性好。傳統(tǒng)的軟件開發(fā)方法以算法為核心,開發(fā)過程基于功能分析和功能分解。用傳統(tǒng)方法所建立起來的軟件系統(tǒng)的結(jié)構(gòu)緊密依賴于系統(tǒng)所要完成的功能,用傳統(tǒng)的面向過程方法來實現(xiàn)模塊化技術(shù)時,一個很大的障礙是無法實現(xiàn)同一模塊的多次同時運行,例如,假設(shè)一個完成銀行日常業(yè)務(wù)的系統(tǒng),其中一個小模塊專門用來實現(xiàn)隊列的功能,包括一些與隊列有關(guān)的基本操作,如插入一個事物、刪除一個事物、檢測隊列是否已滿等。由于隊列是一種常用的數(shù)據(jù)結(jié)構(gòu),在系統(tǒng)中可能會有多處同時使用,如未劃轉(zhuǎn)業(yè)務(wù)隊列,未確認(rèn)業(yè)務(wù)隊列等。這些隊列雖然有相同的操作,遵循相同的規(guī)則,但卻是相互獨立的。這樣的要求用面向?qū)ο筮^程方法實現(xiàn)的模塊是無法滿足的。相反,用面向?qū)ο蠹夹g(shù)中的類來實現(xiàn)模塊,用類的實例化,對象塊用隊列類來實現(xiàn),類中包含了隊列的各種操作。以這個隊列為模板可以產(chǎn)生多個隊列對象。每個對象都有相同的方法。但卻可以獨立地同時運行,應(yīng)用于系統(tǒng)的不同場合,從而方便地解決了這個面向過程開發(fā)中頗為棘手的問題。
(3)可重用性。為了能帶來可觀的商業(yè)利益,必須在更廣泛范圍中運用重用機制,而不是僅僅在程序設(shè)計這個層次上進行重用。因此,在OOA、OOD直到OOP中都顯示表示問題域語義,其意義是十分深遠(yuǎn)的。隨著時間的推移,軟件開發(fā)組織既可能重用它在某個問題域內(nèi)的OOA結(jié)果,也可能重用相應(yīng)的OOD和OOP結(jié)果。
(4)維護性好。盡管人們反復(fù)強調(diào)保持文檔與源程序一致的必要性,但是,在實際工作中很難做到交付兩類不同的文檔,并使它們保持彼此完全一致,特別是考慮到進度、預(yù)算、能力和人員等限制因素時,做到兩類文檔完全一致幾乎是不可能的。因此,維護人員最終面對的往往只有源程序本身。以ATM系統(tǒng)為例,說明在程序內(nèi)部表達(dá)問題域語義對維護工作的意義。假設(shè)在維護該系統(tǒng)時沒有合適的文檔資料可供參閱,于是維護人員人工瀏覽程序或使用軟件工具掃描程序,記下或打印出程序顯示陳述問題域語義,維護人員看到“ATM”、“賬戶”、“現(xiàn)金兌換卡”等,這對維護人員理解所要維護的軟件有很大幫助。
因此,在選擇編程語言時,應(yīng)該考慮的首要因素,是在供選擇的語言中哪個語言能最好地表達(dá)問題域語義。一般來說,應(yīng)該盡量選用面向?qū)ο笳Z言來實現(xiàn)面向?qū)ο蠓治?、設(shè)計的結(jié)果。
3 結(jié)束語
面對對象程序設(shè)計方法的出現(xiàn)和廣泛應(yīng)用是計算機軟件技術(shù)發(fā)展中的一次重大變革和飛躍。相對于之前的程序設(shè)計方法,面向?qū)ο蠹夹g(shù)能夠更好地適應(yīng)當(dāng)今軟件開發(fā)在規(guī)模、復(fù)雜性、可靠性、質(zhì)量、效率上的種種需求,因而被越來越多地推廣和使用,其方法本身也在諸多實踐的檢驗和磨煉中日趨成熟、標(biāo)準(zhǔn)化和體系化。相信利用其優(yōu)勢,面向?qū)ο蟪绦蛟O(shè)計方法會逐漸成為公認(rèn)的主流程序設(shè)計方法。
參考文獻(xiàn):
[1]孫彥廣.流程工業(yè)制造執(zhí)行系統(tǒng)[M].北京:化學(xué)工業(yè)出版社,2006.
[2]楊克昌.計算機導(dǎo)論[M].北京:中國水利水電出版社,2008.
[3]Watts S,Humphrey.個體軟件開發(fā)過程[M].北京:人民郵電出版社,2001.
[4]Shari Lawrence Pfleeger.軟件工程——理論與實踐[M].北京:高等教育出版社,2001.
作者簡介:柳勁華(1977.09-),湖南湘潭人,湘大本科畢業(yè),電子計算機工程師,研究方向:計算機網(wǎng)絡(luò)、計算機信息化管理、實時計算機應(yīng)用、數(shù)據(jù)庫、網(wǎng)絡(luò)性能分析與協(xié)議設(shè)計、網(wǎng)絡(luò)管理與安全、程序設(shè)計基礎(chǔ)、工程實施。
作者單位:湘潭電機力源模具有限公司,湖南湘潭 411100