關鍵字:面向對象 分布對象
兩位研究面向對象軟件工程的美國學者 (Stave Halladay和Michael Wiebel) 曾這樣說:“一般的面向對象編程(OOP)思路不過是一批烏合之眾,把靈機一動、隨機應變的技巧用于他們絞盡腦汁抽象出來的‘對象’而已。即使是最優秀的 OOP 程序員,他們所能對付的極限也莫過于中等規模的開發項目。倘若程序員經驗不足,系統規模又很大,那么采用 OOP 只能把你引入漫無邊際的泥沼之中!
一方面是幾乎沒有一位軟件工程學者認為 OOP 是完美無缺的,另一方面是 OOP 勢如破竹,近乎每一種最新推出的程序開發工具或語言都采用了 OOP 思路;一方面是越來越多的“烏合之眾”在毫無章法、隨心所欲地處理著“對象”,另一方面是經過近 30 年的積累已經擁有了最大多數用戶的結構化軟件方法的日漸萎縮……面對這一現實,研究軟件工程方法學的專家們紛紛指出:“當前擺在軟件開發方法學面前的一個重要課題是:從理論上理解 OOP 具有強大生命力的天然合理性,并完善面向對象軟件工程方法學體系!
一年來我們通過國內外一些實用系統的開發實踐,對面向對象的軟件工程方法進行了較為深入的學習和探討,特別是在北京市公路局計算機系統的一期工程實踐中,借鑒國外軟件設計經驗,較系統地采用了面向對象軟件工程方法,受益匪淺。
一、 是“設計主導”還是“程序主導”
在一個系統開發過程中是只采用 OOP 還是采用了OOSE(面向對象軟件工程)方法,關鍵看整個開發過程是“設計主導”還是“程序主導”。
近年來,大量先進程序開發工具進入我國,這對提高軟件開發效率無疑具有很大的作用。然而,它們又往往使程序主導型軟件開發人員在“以程序代系統”、“以算法代設計”的誤區里越陷越深。
一般的軟件開發人員(包括那些只見程序不見系統的程序員)主觀上都認為:軟件開發不應“系統設計主導”而應“程序算法主導”。但是用下面幾個問題考察一下,結果往往相反。
問題1 在進行軟件設計和選擇軟件開發工具之前,是否進行開發方法學的選擇?
所謂方法學是指組織軟件生產過程的一系列方法、技術和規范。方法學是軟件開發者長年失敗和成功經驗的理論性總結,從軟件重用的思路來說,方法學重用的價值遠非某些程序組件重用可比。
以北京市公路局系統為例。首先,在系統調查階段我們了解到:這個系統要分期 (遞增式) 開發。由于處于機構改革時期,系統生存期內的用戶需求和系統結構變因很多。這表明目標系統應該具有較強的可維護性,即每期開發成果應在后續工程中具有較高的可重用率。其次,一期工程的工作量相當大(最后成果包括 124 個模塊、72 類報表、119個數據庫表、439 個窗口、912 個數據窗口),而開發者對公路局業務不了解,多為經驗不足的大學生,理解需求的能力較低。這表明采用的開發方法學必須能最大限度地減少重復勞動,實現開發過程中的成果共享和重用;必須能支持消除需求理解誤差的調整工序,使下游成品階段的設計變更比較容易進行。
在開發此系統之前,我們承接了一個國外軟件的下游開發任務。由于它采用了面向對象的軟件設計,使我們深刻認識到國內外軟件開發方法學和技術上的差距,頗受啟發。
參照我們承接的國外軟件開發工作量計算方法,即僅下游120個模塊 (含報表) 的編碼和測試為41人月,那么公路局系統從上游設計開始近200個模塊和報表、100多個數據庫表的開發工作量至少也應在120人月以上。由于采用了面向對象的軟件工程方法,盡管開發人員大多經驗不足,但是第一期工程總工時最終仍控制在 80 人月以內,降低成本1/3左右。同時在系統可維護性、重用度及其他功能和性能指標上,均超過了我們以往采用結構化方法開發的系統。
對停留在程序主導級開發的軟件開發人員來說,他們選擇 OOP 的原因也往往是被動的。其實,在程序主導開發者的辭典中是找不到“方法學”這一詞的,或者把“方法學”與“程序算法”混為一談。至于把 OOP 看成是 OOSE 的全部就更不足為怪了。
問題2 對象抽象的出發點是現實世界的問題描述,還是可執行的實例對象?
在現實世界早期抽象階段,面向對象方法與其他方法區別并不大,都要從現實世界的問題描述出發,即從用戶接口、問題領域的知識和經驗出發,構筑現實世界的問題模型,也就是確定目標系統是“做什么的”。面向對象的問題分析模型從3個側面進行描述,即對象模型 (對象的靜態結構)、動態模型(對象相互作用的順序)和功能模型(數據變換及功能依存關系)。軟件工程的抽象原則、層次原則和分割原則同樣適用于面向對象方法,即對象抽象與功能抽象原則是一樣的,也是從高級到低級、從邏輯到物理,逐級細分。每一級抽象都重復對象建模 (對象識別)→動態建模(事件識別)→功能建模(操作識別)的過程,直到每一個對象實例在物理(程序編碼)上全部實現。
文章來源于領測軟件測試網 http://www.kjueaiud.com/