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