喻梅
【摘要】通過淺析面向?qū)ο蠓椒ㄅc結(jié)構(gòu)化方法的比較,分析探討了結(jié)構(gòu)化方法和面向?qū)ο蠓椒ù嬖诘膯栴},在比較兩者內(nèi)在一致性和主要區(qū)別基礎(chǔ)上,提出在軟件開發(fā)過程中應(yīng)結(jié)合面向?qū)ο蠓椒ㄅc結(jié)構(gòu)化方法。
【關(guān)鍵詞】面向?qū)ο蠓椒?;結(jié)構(gòu)化方法;軟件開發(fā)
面向?qū)ο蠓椒ń鉀Q了傳統(tǒng)結(jié)構(gòu)化方法中問題空間和解空間在結(jié)構(gòu)上不一致的問題,避免了從分析和設(shè)計到軟件模塊結(jié)構(gòu)間的多次轉(zhuǎn)換過程,使開發(fā)軟件變得簡捷、高效、合理。
一、面向?qū)ο蠓椒ㄅc結(jié)構(gòu)化方法的比較
可以看出,面向?qū)ο蟮姆椒ɑ舅枷胧牵?對問題空間進(jìn)行自然分割,以更接近人類思維的方式建立問題域模型,以便對客觀實體進(jìn)行結(jié)構(gòu)模擬和行為模擬,從而使設(shè)計出的軟件盡可能直接地描述現(xiàn)實世界,構(gòu)造出模塊化的,可重用的,維護(hù)性好的軟件,同時限定軟件的復(fù)雜性和降低開發(fā)維護(hù)費用。
二、結(jié)構(gòu)化方法與面向?qū)ο蠓椒ǖ膬?nèi)在聯(lián)系
二者在分解和抽象原則上一致,分解和抽象是軟件開發(fā)中控制問題復(fù)雜性的重要原則,面向?qū)ο蠓椒ㄅc結(jié)構(gòu)化方法在運用分解和抽象原則上的要求是完全一致的;局部化和重用性設(shè)計上的一致,在結(jié)構(gòu)化方法中,局部化主要體現(xiàn)在代碼與數(shù)據(jù)的分隔化,即程序各部分除必要的信息交流外,彼此相互隔離而互不影響,而面向?qū)ο蠓椒▌t采用數(shù)據(jù)、代碼的封裝,即將數(shù)據(jù)、代碼和操作方法封裝成一個類似“黑箱”的整體對象,提高了程序的可靠性和安全性,同時增強了系統(tǒng)的可維護(hù)性。
三、結(jié)構(gòu)化方法與面向?qū)ο蠓椒ǖ膮^(qū)別
(一)處理問題時的出發(fā)點不同
結(jié)構(gòu)化方法是強調(diào)過程抽象化和模塊化,以過程為中心構(gòu)造或處理客觀世界問題的,它是一種面向過程的開發(fā)方法;面向?qū)ο蠓椒◤娬{(diào)把問題域的要領(lǐng)直接影射到對象及對象之間的接口上,是用符合人們通常的思維方式來處理客觀世界的問題。
(二)處理問題的基本單位和層次邏輯關(guān)系不同
結(jié)構(gòu)化方法把客觀世界的問題抽象成計算機可以處理的過程,處理問題的基本單位是能清晰表達(dá)過程的模塊,用模塊的層次結(jié)構(gòu)概括模塊或模塊間的關(guān)系和功能;面向?qū)ο蠓椒ㄊ怯糜嬎銠C邏輯來模擬客觀世界中的物理存在,以對象的集合類作為處理問題的基本單位,盡可能使計算機世界向客觀世界靠攏,以使問題的處理更直截了當(dāng),面向?qū)ο蠓椒ㄊ怯妙惖膶哟谓Y(jié)構(gòu)來體現(xiàn)類之間的繼承和發(fā)展。
(三)數(shù)據(jù)處理方式與控制程序方式不同
結(jié)構(gòu)化方法是直接通過程序來處理數(shù)據(jù),處理完畢后即可顯示處理結(jié)果,在控制程序方式上是按照設(shè)計調(diào)用或返回程序不能自由導(dǎo)航,各模塊程序之間存在著控制與被控制的關(guān)系;面向?qū)ο蠓椒▽?shù)據(jù)與對應(yīng)的代碼封裝成一個整體,原則上其它對象不能直接修改其數(shù)據(jù),即對象的修改只能由自身的成員函數(shù)完成,控制程序方式上是通過“事件驅(qū)動”來激活和運行程序。
(四)分析設(shè)計與編碼轉(zhuǎn)換方式不同
結(jié)構(gòu)化方法強調(diào)分析、設(shè)計及編碼之間按規(guī)則進(jìn)行轉(zhuǎn)換,貫穿軟件生命周期的分析、設(shè)計及編碼之間實現(xiàn)的是一種有縫的連接;面向?qū)ο蠓椒◤姆治龅皆O(shè)計再到編碼則采用一致性的模型表示,貫穿軟件生命周期的分析、設(shè)計及編碼之間是一種平滑過程,即實現(xiàn)的是一種無縫連接。
四、結(jié)構(gòu)化方法和面向?qū)ο蠓椒ǜ饔袃?yōu)缺點
(一)從執(zhí)行效率來說
結(jié)構(gòu)化方法比面向?qū)ο蠓椒ǎa(chǎn)生的可執(zhí)行代碼更直接,更高。所以對于一些嵌入式的系統(tǒng),結(jié)構(gòu)化方法產(chǎn)生的系統(tǒng)更小,運行效率更高。
(二)從重用性方面來說
采用結(jié)構(gòu)化方法的系統(tǒng)難以修改和擴充。結(jié)構(gòu)化分析與設(shè)計清楚定義了系統(tǒng)的接口,當(dāng)系統(tǒng)對外界接口發(fā)生變動時,往往造成系統(tǒng)結(jié)構(gòu)較大變動,難以擴充新的功能接口。采用結(jié)構(gòu)化方法的系統(tǒng)可復(fù)用性較差。結(jié)構(gòu)化方法將數(shù)據(jù)和操作分離,導(dǎo)致一些可重用的軟件構(gòu)件在特定具體應(yīng)用環(huán)境才能應(yīng)用,降低了軟件的可重用性。面向?qū)ο蠓椒ň哂泻芎玫闹赜眯浴T谟龅筋愃频膯栴},通過應(yīng)用了抽象繼承等技術(shù),來重用代碼。
(三)從程序語言編譯器來說
面向?qū)ο蠓椒?,通過編譯器實現(xiàn)代碼的面向?qū)ο笮?。也就使說經(jīng)過編譯器后,代碼會被翻譯為相對應(yīng)的結(jié)構(gòu)化代碼。所以要熟練開發(fā),還要懂一定的結(jié)構(gòu)化方法做為基礎(chǔ)。
(四)從掌握難度來說,面向?qū)ο蠓椒ū冉Y(jié)構(gòu)化對象方法復(fù)雜,難于理解
面象對象方法的內(nèi)容廣,概念多,而且很多都是難于理解,做到精通更加不易。應(yīng)用面向?qū)ο蠓椒?,常常需要一種支持的分析,設(shè)計方法,如RUP 方法,敏捷方法等。這些知識抽象枯燥,難于掌握。面象對象方法要經(jīng)過長期的開發(fā)實踐才能很好的理解,掌握。相比之下,結(jié)構(gòu)化方法知識內(nèi)容少,容易上手。
(五)從應(yīng)用的范圍看,結(jié)構(gòu)化方法適用于數(shù)據(jù)少而操作多的問題
實踐證明對于象操作系統(tǒng)這樣的以功能為主的系統(tǒng),結(jié)構(gòu)化方法比較適應(yīng)它。面向?qū)ο蠓椒ㄕ孟喾矗瑢τ跀?shù)據(jù)庫,信息管理等以數(shù)據(jù)為主的而操作較少的系統(tǒng),用面向?qū)ο蠓椒枋鲆糜诮Y(jié)構(gòu)化方法。
五、結(jié)語
綜上所述,軟件開發(fā)的目標(biāo)是以最小的代價開發(fā)出滿足用戶需求的軟件。為此,根據(jù)系統(tǒng)的實際需求,分別針對具體情況選擇采用不同的設(shè)計方法,可以充分發(fā)揮面向?qū)ο笈c結(jié)構(gòu)化方法各自的優(yōu)勢。目前在大多數(shù)軟件系統(tǒng)的分析設(shè)計過程中,這兩者方法都兼而有之。