官术网_书友最值得收藏!

1.4 面向?qū)ο蠓椒ǖ闹饕獌?yōu)點(diǎn)

本節(jié)從認(rèn)識(shí)論的角度和軟件工程方法的角度看一下面向?qū)ο蠓椒◣淼囊嫣帲衙嫦驅(qū)ο蠓椒ㄅc傳統(tǒng)方法進(jìn)行比較,看面向?qū)ο蠓椒ㄓ惺裁磧?yōu)點(diǎn)。

1. 從認(rèn)識(shí)論的角度面向?qū)ο蠓椒ǜ淖兞碎_發(fā)軟件的方式

面向?qū)ο蠓椒◤膶?duì)象出發(fā)認(rèn)識(shí)問題域,對(duì)象對(duì)應(yīng)著問題域中的事物,其屬性與操作分別刻畫了事物的性質(zhì)和行為,對(duì)象的類之間的繼承、關(guān)聯(lián)和依賴關(guān)系能夠刻畫問題域中事物之間實(shí)際存在的各種關(guān)系。因此,無論是系統(tǒng)的構(gòu)成成分,還是通過這些成分之間的關(guān)系而體現(xiàn)的系統(tǒng)結(jié)構(gòu),都可直接地映射到問題域。這使得運(yùn)用面向?qū)ο蠓椒ㄓ欣谡_理解問題域及系統(tǒng)責(zé)任。

2. 面向?qū)ο笳Z言使得從客觀世界到計(jì)算機(jī)的語言鴻溝變窄

圖1-4為一個(gè)示意圖,說明了面向?qū)ο笳Z言如何使得從客觀世界到計(jì)算機(jī)的語言鴻溝變窄。

機(jī)器語言是由二進(jìn)制的“0”和“1”構(gòu)成的,離機(jī)器最近,能夠直接執(zhí)行,卻沒有絲毫的形象意義,離人類的思維最遠(yuǎn)。匯編語言以易理解的符號(hào)表示指令、數(shù)據(jù)以及寄存器、地址等物理概念,稍稍適合人類的形象思維,但仍然相差很遠(yuǎn),因?yàn)槠涑橄髮哟翁停孕杩紤]大量的機(jī)器細(xì)節(jié)。非OO的高級(jí)語言隱蔽了機(jī)器細(xì)節(jié),使用有形象意義的數(shù)據(jù)命名和表達(dá)式,這可以把程序與所描述的具體事物聯(lián)系起來。特別是結(jié)構(gòu)化編程語言更便于體現(xiàn)客觀事物的結(jié)構(gòu)和邏輯含義,與人類的自然語言更接近,但仍有不少差距。面向?qū)ο缶幊陶Z言能比較直接地反映客觀世界的本來面目,并使軟件開發(fā)人員能夠運(yùn)用人類認(rèn)識(shí)事物所采用的一般思維方法來進(jìn)行軟件開發(fā),從而縮短了從客觀世界到計(jì)算機(jī)實(shí)現(xiàn)的語言鴻溝。

3. 面向?qū)ο蠓椒ㄊ狗治雠c設(shè)計(jì)之間的鴻溝變窄

本書所講的傳統(tǒng)軟件工程方法是指面向?qū)ο蠓椒ǔ霈F(xiàn)之前的各種軟件工程方法,此處主要討論結(jié)構(gòu)化的軟件工程方法。圖1-5是結(jié)構(gòu)化的軟件工程方法的示意圖。

圖1-4 語言的發(fā)展使鴻溝變窄

圖1-5 結(jié)構(gòu)化的軟件工程方法示意圖

在結(jié)構(gòu)化方法中,對(duì)問題域的認(rèn)識(shí)與描述并不以問題域中的固有事物作為基本單位,并保持它們的原貌,而是打破了各項(xiàng)事物間的界限,在全局的范圍內(nèi)以功能、數(shù)據(jù)或數(shù)據(jù)流為中心來進(jìn)行分析。所以運(yùn)用該方法得到的分析結(jié)果不能直接地映射到問題域,而是經(jīng)過了不同程度的轉(zhuǎn)化和重新組合。這樣就容易隱藏一些對(duì)問題域理解的偏差。此外,由于分析與設(shè)計(jì)的表示體系不一致,導(dǎo)致了設(shè)計(jì)文檔與分析文檔很難對(duì)應(yīng),在圖1-5中表現(xiàn)為分析與設(shè)計(jì)的鴻溝。實(shí)際上并不存在可靠的從分析到設(shè)計(jì)的轉(zhuǎn)換規(guī)則,這樣的轉(zhuǎn)換有一定的人為因素,從而往往因理解上的錯(cuò)誤而埋下隱患。正是由于這些隱患,使得編程人員經(jīng)常需要對(duì)分析文檔和設(shè)計(jì)文檔進(jìn)行重新認(rèn)識(shí),以產(chǎn)生自己的理解再進(jìn)行工作,而不維護(hù)文檔,這樣使得分析文檔、設(shè)計(jì)文檔和程序代碼之間不能較好地銜接。由于程序與問題域和前面的各個(gè)階段產(chǎn)生的文檔不能較好地對(duì)應(yīng),對(duì)于維護(hù)階段發(fā)現(xiàn)的問題的每一步回溯都存在著很多理解上的障礙。

圖1-6是面向?qū)ο蟮能浖こ谭椒ǖ氖疽鈭D。

圖1-6 面向?qū)ο蟮能浖こ谭椒ㄊ疽鈭D

面向?qū)ο箝_發(fā)過程的各個(gè)階段都使用了一致的概念與表示法,而且這些概念與問題域的事物是一致的,這對(duì)整個(gè)軟件生命周期的各種開發(fā)和管理活動(dòng)都具有重要的意義。首先是分析與設(shè)計(jì)之間不存在鴻溝,從而可減少人員的理解錯(cuò)誤并避免文檔銜接得不好的問題。從設(shè)計(jì)到編程,模型與程序的主要成分是嚴(yán)格對(duì)應(yīng)的,這不僅有利于設(shè)計(jì)與編程的銜接,而且還可以利用工具自動(dòng)生成程序的框架和(部分)代碼。對(duì)于測試而言,面向?qū)ο蟮臏y試工具不但可以依據(jù)類、繼承和封裝等概念與原則提高程序測試的效率與質(zhì)量,而且可以測試程序與面向?qū)ο蠓治龊驮O(shè)計(jì)模型不一致的錯(cuò)誤。這種一致性也為軟件維護(hù)提供了從問題域到模型再到程序的良好對(duì)應(yīng)。

4. 面向?qū)ο蠓椒ㄓ兄谲浖木S護(hù)與復(fù)用

需求是不斷變化的(盡管可階段性地“凍結(jié)”),這是因?yàn)闃I(yè)務(wù)需求、競爭形式、技術(shù)發(fā)展和社會(huì)的規(guī)章制度等因素都不斷地在發(fā)生變化。這就要求系統(tǒng)對(duì)變化要有彈性。

在結(jié)構(gòu)化方法中,所有的軟件都按功能(可用過程或函數(shù)實(shí)現(xiàn))來劃分其主要構(gòu)造塊,最終的系統(tǒng)設(shè)計(jì)往往如圖1-7所示。

圖1-7 結(jié)構(gòu)方法中的數(shù)據(jù)結(jié)構(gòu)、算法及其間的關(guān)系

從圖1-7中能夠看出,數(shù)據(jù)結(jié)構(gòu)與算法是分別組織的,對(duì)一處修改,可能會(huì)引起連鎖反應(yīng)。這種建模的缺點(diǎn)是模型脆弱,難以適應(yīng)不可避免的錯(cuò)誤修改以及需求變動(dòng),以至于系統(tǒng)維護(hù)困難。算法和數(shù)據(jù)的分離,是造成這種狀況的根本原因。算法和數(shù)據(jù)間的可能的緊密耦合,也使得復(fù)用難以實(shí)現(xiàn)。

在面向?qū)ο蠓椒ㄖ校褦?shù)據(jù)和對(duì)數(shù)據(jù)的處理作為一個(gè)整體,即對(duì)象。該方法以對(duì)象及交互模式為中心,如圖1-8所示。

圖1-8 面向?qū)ο蠓椒ㄖ械臄?shù)據(jù)結(jié)構(gòu)、算法及其間的關(guān)系

通過與結(jié)構(gòu)化方法的比較,能夠看出,面向?qū)ο蠓椒ㄟ€具有如下的主要優(yōu)點(diǎn):

1)把易變的數(shù)據(jù)結(jié)構(gòu)和部分算法封裝在對(duì)象內(nèi)并加以隱藏,僅供對(duì)象自己使用,這保證了對(duì)它們的修改并不會(huì)影響其他的對(duì)象。這樣對(duì)需求的變化有較強(qiáng)的適應(yīng)性,有利于維護(hù)。對(duì)象的接口(供其他對(duì)象訪問的那些操作)的變化會(huì)影響其他的對(duì)象,若在設(shè)計(jì)模型時(shí)遵循了一定的原則,這種影響可局限在一定的范圍之內(nèi)。此外,由于將操作與實(shí)現(xiàn)的細(xì)節(jié)進(jìn)行了分離,這樣若接口中的操作僅在實(shí)現(xiàn)上發(fā)生了變化,也不會(huì)影響其他對(duì)象。對(duì)象本身來自客觀事物,是較少發(fā)生變化的。

2)封裝性和繼承性有利于復(fù)用對(duì)象。把對(duì)象的屬性和操作捆綁在一起,提高了對(duì)象(作為模塊)的內(nèi)聚性,減少了與其他對(duì)象的耦合,這為復(fù)用對(duì)象提供了可能性和方便性。在繼承結(jié)構(gòu)中,特殊類對(duì)一般類的繼承,本身就是對(duì)一般類的屬性和操作的復(fù)用。

5. 面向?qū)ο蠓椒ㄓ兄谔岣哕浖馁|(zhì)量和生產(chǎn)率

按照現(xiàn)今的質(zhì)量觀點(diǎn),不僅僅要在編程后通過測試排除錯(cuò)誤,而是要著眼于軟件開發(fā)過程的每個(gè)環(huán)節(jié)開展質(zhì)量保證活動(dòng),包括分析和設(shè)計(jì)階段。系統(tǒng)的高質(zhì)量不是僅指系統(tǒng)沒有錯(cuò)誤,而是系統(tǒng)要達(dá)到好用、易用、可移植和易維護(hù)等,讓用戶由衷地感到滿意。采用OO方法進(jìn)行軟件開發(fā),相對(duì)而言更容易做到這些。

有很多數(shù)據(jù)表明,使用OO技術(shù)從分析到編程階段能大幅度地提高開發(fā)效率,在維護(hù)階段提高得就更多。這主要體現(xiàn)在如下幾方面:

?OO方法使系統(tǒng)更易于建模與理解。

?需求變化引起的全局性修改較少。

?分析文檔、設(shè)計(jì)文檔、源代碼對(duì)應(yīng)良好。

?有利于復(fù)用。

主站蜘蛛池模板: 五台县| 依兰县| 巴青县| 抚顺县| 昌宁县| 新丰县| 南丹县| 安徽省| 丰镇市| 大化| 三原县| 西充县| 建湖县| 兴义市| 犍为县| 农安县| 黔南| 富平县| 通化县| 井研县| 图片| 信宜市| 专栏| 平昌县| 饶河县| 莱西市| 革吉县| 浙江省| 涿州市| 马边| 通化市| 彭泽县| 什邡市| 祁连县| 特克斯县| 方山县| 甘德县| 栾城县| 邯郸市| 大厂| 观塘区|