
**
前言
軟體開發是一項極其複雜的智力活動,它是一門朝氣蓬勃并且仍在迅速發展的學科。軟體開發還不夠完善,是以迄今人們仍然在試圖找出開發軟體的好方法。
盡管如此,多年來軟體開發方法仍然獲得了大幅提升。許多設計方法學不斷發展以促進軟體設計的各個方面。其中之一是結構化設計方法,該方法提供了一種非常直覺的方式,用以很好地比對圖靈和馮·諾依曼的硬體計算模型。
盡管結構化設計明顯優于它之前的特定方法,但它存在着一個緻命的弱點:當使用者需求随着時間的推移改變時,軟體往往很難随之修改,大型的應用尤其如此。與此同時,應用的規模和複雜性迅速膨脹。另外,新的語言、技術、作業系統、資料存儲範式、使用者界面範式、硬體等以驚人的速度出現在計算領域中。然而,商業條件一直在要求軟體産品更快、成本更低地投入市場。
是以,一些新的設計方法出現了,這些方法從實踐中吸取了來之不易的經驗和教訓。同時,計算領域提出了一些革命性的新觀點。其中之一就是面向對象的範式,其主要目标為:在軟體産品的生命周期中,随着需求出現不可避免的變更,保證大型應用的可維護性。
本書介紹一種特定軟體設計方法的實踐,該方法稱為基于模型的開發方法,其主要基礎是shlaer-mellor方法。通常情況下應用oo範式,特定情況下應用mbd方法能夠使大型應用獲得更強的健壯性和可維護性。
本書主要内容
盡管本書使用uml(unified modeling language,統一模組化語言)作為表示法,但其應用是很淺顯的。有很多非常優秀的書籍描述了如何使用uml進行軟體設計,是以本書沒有過多地描述uml的文法。同樣,本書遵循了mbd的設計方法,但是該設計方法主要為下列真正目的提供背景支援:
本書的主要目标在于描述,為什麼在一般情況下使用oo方法和在特殊情況下使用mbd方法是在宣傳一種做事情的特殊方法。
不存在一種唯一正确的方法可以設計和開發所有軟體。設計更多地依賴于特定的開發環境,包括從業務目标到工具再到團隊文化等所有内容。最終,企業将決定在它的環境中哪一組工具是最高效的。為了做到這一點,決策者應當了解為什麼mbd的方法工具集得以應用在許多常見的環境中。更重要的是,相關人員需要充分了解基本原理,進而能夠根據特定的環境加以調整進而應用。
實作面向對象的設計需要一種獨特的思維,該思維在硬體計算模型中很不直覺。本書真正關心的是設計軟體時如何思考,特定的表示法和方法學不是本書的側重點。是以,本書以大量的篇幅探索好的軟體設計的思考過程,甚至故意提供了一些不好的初步設計,用以證明該方法的自我糾正能力。
為了獲得這樣的了解,有必要描述軟體開發的傳統方法(面向對象方法之前)在某些方面如何失敗,以及面向對象範式如何改正這些缺點。盡管結構化方法為1970年之前軟體開發的混亂帶來了切實的秩序,但它不是萬能的。到20世紀80年代,軟體明确顯示,嚴重的可維護性問題仍然存在,這些問題正是面向對象範式要解決的。
同樣,如果不讨論一種方法學的某些基礎理論,那麼就沒有辦法描述該方法學是否能夠很好地工作。然而,這是一本軟體開發人員寫給軟體開發人員的書,是以本書有意識地使用了不具有數學嚴謹性的實踐術語來描述理論問題。
因為本書的主要内容是抽象ooa(object oriented analysis,面向對象分析)模型的建立,是以書中沒有很多oopl(object oriented programming language,面向對象程式設計語言)代碼。從方法學的名稱顧名思義,其重點在于抽象模組化而不是編寫傳統的源語言代碼。實際上,當一個具有“轉化品質”的ooa模型開發完成後,模型就是代碼。換句話說,ooa模組化使用的表示法是一種擴充的uml符号,其中增加了符合mda的抽象動作語言(abstract action language,aal)的内容。表示法是4gl(fourth generation language,第四代語言)而不是3gl(third generation language,第三代語言),但是模型像任何一個3gl程式一樣可執行。模型是獨立實作的,它是一個針對功能需求解決方案的完整、準确而清晰的規格說明。
我們需要指出的最後一點是,作者的實踐開發經驗是以幾十年而不是幾年來衡量的。盡管本書的重點在于解釋為什麼這樣做事情,但它絕對不是一本理論書。本書的基礎是在現實世界中行之有效的方法。
<a href="https://yq.aliyun.com/articles/118510">第1部分 面向對象開發的根本</a>
<a href="https://yq.aliyun.com/articles/118515">第1章 曆史的視角</a>
<a href="https://yq.aliyun.com/articles/118519">1.1 曆史</a>
<a href="https://yq.aliyun.com/articles/118524">1.2 結構化開發</a>
<a href="https://yq.aliyun.com/articles/118528">1.3 寶貴教訓</a>
<a href="https://yq.aliyun.com/articles/118534">1.4 技術革新</a>
<a href="https://yq.aliyun.com/articles/118541">第2章 對象技術</a>
<a href="https://yq.aliyun.com/articles/118550">2.1 基本理念</a>
<a href="https://yq.aliyun.com/articles/118561">2.2 廣度優先處理(又稱對等協作)</a>
<a href="https://yq.aliyun.com/articles/118566">第3章 泛化、繼承、泛型和多态</a>
<a href="https://yq.aliyun.com/articles/118571">3.1 泛化</a>
<a href="https://yq.aliyun.com/articles/118575">3.2 繼承</a>
<a href="https://yq.aliyun.com/articles/118579">3.3 多态</a>
<a href="https://yq.aliyun.com/articles/118583">3.4 泛型</a>