摘要:結(jié)構(gòu)化方法與面向?qū)ο蠓椒ㄔ谲浖_發(fā)過程中的比較,從系統(tǒng)分析、系統(tǒng)設(shè)計(jì)和編程技術(shù)等方面的分析,指出沒有絕對(duì)一種軟件開發(fā)方法稱得上是“最好”的,開發(fā)人員應(yīng)該根據(jù)所要開發(fā)的軟件的特點(diǎn),選擇最適宜的開發(fā)方法。
關(guān)鍵詞:軟件工程;結(jié)構(gòu)化方法;面向?qū)ο蠓椒?;軟件開發(fā);程序設(shè)計(jì)
中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)18-2pppp-0c
Comparison of Structurized Methodology and Object-oriented Methodology in Software Development
LUAN Yong-hong
(Information of Engineering Department,Suzhou Institute of Industrial Technology,Suzhou 215104,China)
Abstract:The structure method and the object-oriented method develop comparison in process in the software,from the aspect analysis such as systems analysis, system design and programming technology, pointed out not absolutely one software method of exploitation called on " best", the personnel who develops ought to choose the most proper exploitation method according to what be wanted the development software characteristic.
Key words:Software Engineering;Structured Methods;Object-Oriented Methods;Software Development;Program Design
1 引言
隨著信息技術(shù)的發(fā)展,軟件作為一種信息技術(shù)的主要載體日益滲透到社會(huì)政治、軍事、經(jīng)濟(jì)、文化乃至生活的各個(gè)方面和各個(gè)層次。軟件無所不在,其需求愈來愈多,復(fù)雜度愈來愈高,可用性要求愈來愈強(qiáng)。如何高效地開發(fā)和生產(chǎn)可靠、可信的軟件,是軟件領(lǐng)域一直必須面對(duì)的問題。軟件技術(shù)跟不上硬件技術(shù)發(fā)展而造成的諸多問題被稱作“軟件危機(jī)”(Software Crisis)。為了解決軟件危機(jī),1968年北大西洋公約組織(NATO)的計(jì)算機(jī)科學(xué)家在德國召開的國際學(xué)術(shù)會(huì)議上第一次提出了“軟件工程”的概念,希望通過系統(tǒng)化、規(guī)范化、數(shù)量化等工程原則和方法來實(shí)現(xiàn)復(fù)雜軟件系統(tǒng)的開發(fā)和維護(hù)。[1]當(dāng)前主要采用的軟件工程方法有結(jié)構(gòu)化方法學(xué)和面向?qū)ο蠓椒▽W(xué)。
2 結(jié)構(gòu)化方法學(xué)與面向?qū)ο蠓椒▽W(xué)的含義
結(jié)構(gòu)化方法學(xué)(Structurized Methodology)是一種圍繞功能來組織軟件系統(tǒng)的軟件開發(fā)方法。它采用自頂向下的設(shè)計(jì)方法,將問題模型反映為過程結(jié)構(gòu)模型,實(shí)際上就是通過建立功能模型,將復(fù)雜的過程簡單地按功能分層從而達(dá)到解決問題的目的。
面向?qū)ο蠓椒▽W(xué)(Object-Oriented Methodology)是一種圍繞真實(shí)世界中的事物來組織軟件系統(tǒng)的全新方法。它的出發(fā)點(diǎn)和基本原則,是盡可能模擬人類習(xí)慣的思維方式,也就是描述問題的問題域與實(shí)現(xiàn)解法的求解域在結(jié)構(gòu)上盡可能一致。
3 結(jié)構(gòu)化軟件開發(fā)方法與面向?qū)ο蟮能浖_發(fā)方法的比較
軟件開發(fā)方法(Software Development Method)是指軟件開發(fā)過程所遵循的辦法和步驟。軟件開發(fā)活動(dòng)的目的就是得到一個(gè)運(yùn)行的軟件系統(tǒng)及其支持的軟件文檔,并且能滿足有關(guān)的軟件質(zhì)量要求。目前最常采用的軟件開發(fā)方法有結(jié)構(gòu)化方法和面向?qū)ο蠓椒ā?/p>
軟件開發(fā)是按需求規(guī)格說明的要求,由抽象到具體,逐步生成軟件的過程。因而要求系統(tǒng)設(shè)計(jì)方法、編程方法及選用的程序設(shè)計(jì)語言應(yīng)該盡可能匹配。如采用結(jié)構(gòu)化的分析方法(StructuredAnalysis,簡稱SA)就應(yīng)該采用結(jié)構(gòu)化的系統(tǒng)設(shè)計(jì)(Structured Design,簡稱SD)和結(jié)構(gòu)化的編程技術(shù)(Structured Programming,簡稱SP),選用支持結(jié)構(gòu)化編程的Pascal語言、C語言等。若采用面向?qū)ο蟮姆治龇椒ǎ∣bject-Oriented Analysis ,簡稱OOA)、面向?qū)ο蟮脑O(shè)計(jì)方法(Object-Oriented Design, 簡稱OOD),就應(yīng)該選用面向?qū)ο蟮木幊碳夹g(shù)(Object-Oriented Programming,簡稱OOP)和支持面向?qū)ο蟮木幊陶Z言,如Smalltalk,C++、Java等。
3.1 結(jié)構(gòu)化軟件開發(fā)方法
結(jié)構(gòu)化軟件方法是結(jié)構(gòu)化方法和信息建模方法,這兩種方法分別從功能和信息(數(shù)據(jù))的角度對(duì)系統(tǒng)進(jìn)行分析和設(shè)計(jì)。結(jié)構(gòu)化軟件開發(fā)方法的基本思想是:首先確定輸入、輸出數(shù)據(jù)結(jié)構(gòu),使用自頂向下的設(shè)計(jì)方法,列出需要解決的最主要的子問題,然后通過解決每一個(gè)子問題來解決初始的問題。結(jié)構(gòu)化軟件開發(fā)方法的本質(zhì)是功能的分解,將系統(tǒng)按功能分解為若干模塊,每個(gè)模塊是實(shí)現(xiàn)系統(tǒng)某一功能的程序單元,每一個(gè)模塊都具有輸入、輸出和過程等基本特性。輸入和輸出分別是模塊需要的和產(chǎn)生的數(shù)據(jù),過程則是對(duì)模塊具體處理細(xì)節(jié)的描述和表示。數(shù)據(jù)則在功能模塊間流動(dòng)。[5] 功能是一種主動(dòng)的行為,數(shù)據(jù)是受功能影響的信息載體。因而它的編程模型被理解為作用于數(shù)據(jù)的代碼。
從編程技術(shù)和程序設(shè)計(jì)的角度來說,結(jié)構(gòu)化分析方法在進(jìn)行程序設(shè)計(jì)時(shí),描述任何實(shí)體的操作序列只需采用“順序、選擇、重復(fù)”三種基本控制結(jié)構(gòu),整個(gè)程序劃分為若干個(gè)模塊。每個(gè)模塊要具有一種以上的特定功能,并且每個(gè)模塊只能有一個(gè)入口和一個(gè)出口。這種程序設(shè)計(jì)采用自頂向下,逐步細(xì)分的方法展開,在一定的數(shù)據(jù)結(jié)構(gòu)之下來設(shè)計(jì)對(duì)應(yīng)的算法,然后分別實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)和算法設(shè)計(jì),因此,N.Wirth總結(jié)出:程序=算法+數(shù)據(jù)結(jié)構(gòu)的形式。 [3][4]結(jié)構(gòu)化程序設(shè)計(jì)中,問題被看作一系列需要完成的任務(wù),函數(shù)(function)是用于完成這些任務(wù)的。所以說,最終解決問題的焦點(diǎn)集中于函數(shù),而數(shù)據(jù)則在功能模塊間流動(dòng)。
如圖1所示。
圖1 結(jié)構(gòu)化方法的應(yīng)用
3.2 面向?qū)ο蟮慕<夹g(shù)
OMT(Object-Oriented Modeling Technique)是由James Rumbaugh等人提出的。OMT是一種面向?qū)ο蟮能浖_發(fā)方法,以對(duì)象建模為基礎(chǔ),從對(duì)象的角度對(duì)系統(tǒng)進(jìn)行分析和設(shè)計(jì)。 面向?qū)ο蟮能浖_發(fā)方法基本思想是:采用了自底向上的歸納、自頂向下的分解的方法,第一步是從問題的陳述入手,構(gòu)造系統(tǒng)模型。系統(tǒng)模型建立后的工作就是按服務(wù)(Service)來分解。第二步是將對(duì)問題的描述建立成三種模型,這三種模型分別是:對(duì)象模型、動(dòng)態(tài)模型和功能模型。對(duì)象模型是通過描述系統(tǒng)中的對(duì)象、對(duì)象間的關(guān)系和每個(gè)對(duì)象類的屬性和操作來表示系統(tǒng)的靜態(tài)數(shù)據(jù)結(jié)構(gòu)。動(dòng)態(tài)模型描述了系統(tǒng)中與時(shí)間和變化有關(guān)的內(nèi)容,它說明何時(shí)發(fā)生。功能模型描述系統(tǒng)的數(shù)據(jù)轉(zhuǎn)換。三種模型都是必須的[2][5]。但是,對(duì)象模型都是最重要、最基本、最核心的。每個(gè)對(duì)象類由數(shù)據(jù)結(jié)構(gòu)(屬性)和操作(行為)組成,有關(guān)的數(shù)據(jù)結(jié)構(gòu)(包括輸入、輸出數(shù)據(jù)結(jié)構(gòu))都成了軟件開發(fā)的依據(jù)。
從編程技術(shù)和程序設(shè)計(jì)的角度來說,采用面向?qū)ο蟮姆治龇椒?,是將問題分解為一系列實(shí)體——這些實(shí)體被稱為對(duì)象(object),然后圍繞這些實(shí)體建立數(shù)據(jù)(對(duì)象)和針對(duì)該對(duì)象而定義的接口(interface)來組織描述程序。正是由于這種方法是從對(duì)象的角度對(duì)系統(tǒng)進(jìn)行分析和設(shè)計(jì)。對(duì)象就是對(duì)現(xiàn)實(shí)世界實(shí)體的正確抽象,而具有相同或相似性質(zhì)的對(duì)象的抽象就是類。對(duì)象包含了數(shù)據(jù)和操作,實(shí)現(xiàn)了數(shù)據(jù)和操作的結(jié)合,使數(shù)據(jù)和操作封裝于對(duì)象的統(tǒng)一體中。每個(gè)類由屬性和操作組成。對(duì)象彼此之間僅能通過發(fā)送消息互相聯(lián)系。類中操作的實(shí)現(xiàn)過程叫做方法,一個(gè)方法有方法名、參數(shù)、方法體[2],如圖2所示。
圖2 對(duì)象、類和信息傳遞
面向?qū)ο蠓椒ǖ木幊碳夹g(shù)重點(diǎn)是說明類,而不是定義函數(shù)。利用類(class)來描述對(duì)象的特性,每個(gè)類都有描述對(duì)象屬性的數(shù)據(jù)和操作數(shù)據(jù)的一組方法。[5]面向?qū)ο蟪绦蛟O(shè)計(jì)主要是類的設(shè)計(jì),程序代碼主要是類的描述,而構(gòu)成系統(tǒng)核心的對(duì)象在程序運(yùn)行時(shí)才創(chuàng)建。對(duì)象之間的相互作用稱為一個(gè)對(duì)象向另一個(gè)對(duì)象發(fā)送消息。
3.3 兩種軟件開發(fā)方法的比較
面向?qū)ο蟮能浖_發(fā)方法與結(jié)構(gòu)化軟件開發(fā)方法的最基本的區(qū)別:表現(xiàn)在它們對(duì)功能和數(shù)據(jù)的不同處理上。
結(jié)構(gòu)化軟件開發(fā)方法是圍繞實(shí)現(xiàn)處理功能的“過程”來構(gòu)造系統(tǒng)的。它幾乎都是將功能和數(shù)據(jù)分開考慮的。它遵循面向過程的問題求解方法,是用計(jì)算機(jī)能夠理解的邏輯來描述和表達(dá)待解決的問題及其具體的解決流程。數(shù)據(jù)結(jié)構(gòu)和算法是它的核心所在。用戶需求的變化大部分是針對(duì)功能的,在開發(fā)需求模糊或需求動(dòng)態(tài)變化的系統(tǒng)時(shí),所開發(fā)出的軟件系統(tǒng)往往不能真正滿足用戶的需要,可能會(huì)引起軟件成本增長失控、軟件質(zhì)量得不到保證等一系列嚴(yán)重問題。因此,用結(jié)構(gòu)化方法開發(fā)的軟件,其穩(wěn)定性、可修改性和可重用性都比較差。
面向?qū)ο筌浖_發(fā)方法則是在解空間引入了“對(duì)象”的概念,逼真地描述解空間的客觀實(shí)體,從而使客觀描述符合人類的思維習(xí)慣。通過識(shí)別問題域的對(duì)象,分析它們之間的關(guān)系,建立對(duì)象模型、動(dòng)態(tài)模型和功能模型,利用面向?qū)ο笥^點(diǎn)建立求解域模型的過程。它的核心概念主要是對(duì)象、類、繼承和消息。面向?qū)ο缶幊碳夹g(shù)的特點(diǎn)是數(shù)據(jù)控制代碼的訪問,其中類的繼承和多態(tài)性是處理復(fù)雜軟件的有效技術(shù)。運(yùn)用這種方法開發(fā)出來的系統(tǒng)穩(wěn)定性、可重用性及可維護(hù)性好。
4 結(jié)束語
面向?qū)ο蠓椒ㄔ谲浖_發(fā)方面符合人們習(xí)慣的思維方式,系統(tǒng)的穩(wěn)定性比較好,軟件的可維護(hù)性與可重用性比較好。但面向?qū)ο蠓椒ǖ幕靖拍疃己艹橄螅晒┸浖_發(fā)人員使用的類種類繁多,結(jié)構(gòu)復(fù)雜。如果沒有結(jié)構(gòu)化程序設(shè)計(jì)的編程思想,對(duì)于直接學(xué)習(xí)面向?qū)ο蟪绦蛟O(shè)計(jì)的初學(xué)者,在代碼編程部分涉及結(jié)構(gòu)化編程思想時(shí),反而困難會(huì)很大。事實(shí)上,這兩種方法在并不是相互排斥的,相反,它們是相互促進(jìn)相互補(bǔ)充的。不論采用何種技術(shù)方法開發(fā)軟件,都必須完成一系列性質(zhì)各異的任務(wù),這些必須完成的任務(wù)要素是:確定“做什么”,確定“怎樣做”,如何“實(shí)現(xiàn)和完善”。 因此,沒有絕對(duì)的一種軟件開發(fā)方法稱得上是“最好”的,軟件開發(fā)人員應(yīng)該根據(jù)所要開發(fā)的軟件的特點(diǎn),選擇最適宜的開發(fā)方法。
參考文獻(xiàn):
[1]張海藩.軟件工程導(dǎo)論[M].3版.清華大學(xué)出版社,1998.
[2]施霞萍,王瑾德.2版.Java程序設(shè)計(jì)教程[M].機(jī)械工業(yè)出版社,2006.
[3]錢能.C++程序設(shè)計(jì)教程[M].2版.清華大學(xué)出版社,2005.
[4]Jeri R Hanly,Elliot B Koffman.問題求解與程序設(shè)計(jì) C語言版.朱劍平,譯.4版.北京:清華大學(xué)出版社,2007.
[5]文斌,劉長青.田原軟件工程與軟件文檔寫作[M].清華大學(xué)出版社,北京交通大學(xué)出版社,2005.
收稿日期:2008-04-02
作者簡介:欒詠紅(1971-),女,山東青島人,講師,研究方向:計(jì)算機(jī)軟件。