天天看點

《面向對象分析與設計》一1.4面向對象方法的主要優點

本節從認識論的角度和軟體工程方法的角度看一下面向對象方法帶來的益處,并把面向對象方法與傳統方法進行比較,看面向對象方法有什麼優點。

從認識論的角度面向對象方法改變了開發軟體的方式

面向對象方法從對象出發認識問題域,對象對應着問題域中的事物,其屬性與操作分别刻畫了事物的性質和行為,對象的類之間的繼承、關聯和依賴關系能夠刻畫問題域中事物之間實際存在的各種關系。是以,無論是系統的構成成分,還是通過這些成分之間的關系而展現的系統結構,都可直接地映射到問題域。這使得運用面向對象方法有利于正确了解問題域及系統責任。

面向對象語言使得從客觀世界到計算機的語言鴻溝變窄

圖1.4為一個示意圖,說明了面向對象語言如何使得從客觀世界到計算機的語言鴻溝變窄。

機器語言是由二進制的“0”和“1”構成的,離機器最近,能夠直接執行,卻沒有絲毫的形象意義,離人類的思維最遠。彙編語言以易了解的符号表示指令、資料以及寄存器、位址等實體概念,稍稍适合人類的形象思維,但仍然相差很遠,因為其抽象層次太低,仍需考慮大量的機器細節。非oo的進階語言隐蔽了機器細節,使用有形象意義的資料命名和表達式,這可以把程式與所描述的具體事物聯系起來。特别是結構化程式設計語言更便于展現客觀事物的結構和邏輯含義,與人類的自然語言更接近,但仍有不少差距。面向對象程式設計語言能比較直接地反映客觀世界的本來面目,并使軟體開發人員能夠運用人類認識事物所采用的一般思維方法來進行軟體開發,進而縮短了從客觀世界到計算機實作的語言鴻溝。

3面向對象方法使分析與設計之間的鴻溝變窄

本書所講的傳統軟體工程方法是指面向對象方法出現之前的各種軟體工程方法,此處主要讨論結構化的軟體工程方法。圖15是結構化的軟體工程方法的示意圖。

《面向對象分析與設計》一1.4面向對象方法的主要優點

在結構化方法中,對問題域的認識與描述并不以問題域中的固有事物作為基本機關,并保持它們的原貌,而是打破了各項事物間的界限,在全局的範圍内以功能、資料或資料流為中心來進行分析。是以運用該方法得到的分析結果不能直接地映射到問題域,而是經過了不同程度的轉化和重新組合。這樣就容易隐藏一些對問題域了解的偏差。此外,由于分析與設計的表示體系不一緻,導緻了設計文檔與分析文檔很難對應,在圖15中表現為分析與設計的鴻溝。實際上并不存在可靠的從分析到設計的轉換規則,這樣的轉換有一定的人為因素,進而往往因了解上的錯誤而埋下隐患。正是由于這些隐患,使得程式設計人員經常需要對分析文檔和設計文檔進行重新認識,以産生自己的了解再進行工作,而不維護文檔,這樣使得分析文檔、設計文檔和程式代碼之間不能較好地銜接。由于程式與問題域和前面的各個階段産生的文檔不能較好地對應,對于維護階段發現的問題的每一步回溯都存在着很多了解上的障礙。

《面向對象分析與設計》一1.4面向對象方法的主要優點

面向對象開發過程的各個階段都使用了一緻的概念與表示法,而且這些概念與問題域的事物是一緻的,這對整個軟體生命周期的各種開發和管理活動都具有重要的意義。首先是分析與設計之間不存在鴻溝,進而可減少人員的了解錯誤并避免文檔銜接得不好的問題。從設計到程式設計,模型與程式的主要成分是嚴格對應的,這不僅有利于設計與程式設計的銜接,而且還可以利用工具自動生成程式的架構和(部分)代碼。對于測試而言,面向對象的測試工具不但可以依據類、繼承和封裝等概念與原則提高程式測試的效率與品質,而且可以測試程式與面向對象分析和設計模型不一緻的錯誤。這種一緻性也為軟體維護提供了從問題域到模型再到程式的良好對應。

4面向對象方法有助于軟體的維護與複用

需求是不斷變化的(盡管可階段性地“當機”),這是因為業務需求、競争形式、技術發展和社會的規章制度等因素都不斷地在發生變化。這就要求系統對變化要有彈性。

在結構化方法中,所有的軟體都按功能(可用過程或函數實作)來劃分其主要構造塊,最終的系統設計往往如圖17所示。

《面向對象分析與設計》一1.4面向對象方法的主要優點

從圖17中能夠看出,資料結構與算法是分别組織的,對一處修改,可能會引起連鎖反應。這種模組化的缺點是模型脆弱,難以适應不可避免的錯誤修改以及需求變動,以至于系統維護困難。算法和資料的分離,是造成這種狀況的根本原因。算法和資料間的可能的緊密耦合,也使得複用難以實作。

在面向對象方法中,把資料和對資料的處理作為一個整體,即對象。該方法以對象及互動模式為中心,如圖18所示。

《面向對象分析與設計》一1.4面向對象方法的主要優點

通過與結構化方法的比較,能夠看出,面向對象方法還具有如下的主要優點:

1)把易變的資料結構和部分算法封裝在對象内并加以隐藏,僅供對象自己使用,這保證了對它們的修改并不會影響其他的對象。這樣對需求的變化有較強的适應性,有利于維護。對象的接口(供其他對象通路的那些操作)的變化會影響其他的對象,若在設計模型時遵循了一定的原則,這種影響可局限在一定的範圍之内。此外,由于将操作與實作的細節進行了分離,這樣若接口中的操作僅在實作上發生了變化,也不會影響其他對象。對象本身來自于客觀事物,是較少發生變化的。

2)封裝性和繼承性有利于複用對象。把對象的屬性和操作捆綁在一起,提高了對象(作為子產品)的内聚性,減少了與其他對象的耦合,這為複用對象提供了可能性和友善性。在繼承結構中,特殊類對一般類的繼承,本身就是對一般類的屬性和操作的複用。

5面向對象方法有助于提高軟體的品質和生産率

按照現今的品質觀點,不僅僅要在程式設計後通過測試排除錯誤,而是要着眼于軟體開發過程的每個環節開展品質保證活動,包括分析和設計階段。系統的高品質不是僅指系統沒有錯誤,而是系統要達到好用、易用、可移植和易維護等,讓使用者由衷地感到滿意。采用oo方法進行軟體開發,相對而言更容易做到這些。

有很多資料表明,使用oo技術從分析到程式設計階段能大幅度地提高開發效率,在維護階段提高得就更多。這主要展現在如下幾方面:

 oo方法使系統更易于模組化與了解。

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

 分析文檔、設計文檔、源代碼對應良好。

 有利于複用。

繼續閱讀