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