軟體設計、架構與 UML 建模

張恂發表於2008-06-11

(本文的最新版在 http://www.zhangxun.com/entry.aspx?sname=tdd&section=modeling

張恂:Software is virtual reality.

軟體究竟是什麼?有很多比喻可以形容。靜態的軟體就像一座虛擬的建築,有著清晰的層次結構,而運動時的軟體,有的就像一部開動的虛擬機器器,或多條柔性的工廠流水線(程式與執行緒),有的又像一種虛擬的生物,可以肆意地複製和生長(比如軟體病毒)。

過去有一種說法,認為:程式 = 演算法 + 資料結構,如今看來這種舊結構化時代的觀點是不準確、不全面的,在新結構化的 OO 時代我們至少可以得出這樣大致的等式:

程式 = 演算法 + 軟體結構 + 資料結構 + ... ?

這裡我們特別強調,軟體結構不同於資料結構。程式本身當然也是一種資料資訊,可以資料、檔案的形式儲存,但傳統的資料是啞資料,而軟體(程式)是操縱啞資料的活動/主動資料。這個等式說明除了演算法和資料結構以外,軟體結構(包括架構和設計模式)的質量,對軟體、程式的質量同樣具有決定性的影響。

軟體架構是軟體的核心結構與行為,因而軟體架構的設計是軟體設計的核心,而軟體架構的設計活動,本身就是一個建模過程。

建模(modeling)並不是軟體行業所特有的做法。作為智慧生物的一項基本能力,它也是數千年來人類所有工程行業所共有的一項最佳實踐。為什麼我們要軟體建模?簡而言之,無非是因為軟體太複雜,有太多的細節,難以被人所理解和掌握,所以我們需要一種能夠簡單而深刻地反映軟體設計本質特徵的方法和工具。如何軟體建模?就像對待建築模型、機械模型一樣,抽象的軟體也是一個(虛擬)多面體,我們需要選擇視點、視角和檢視,對軟體模型做投影和切片。比如,Philippe Kruchten 博士提出的著名的軟體架構 4+1 檢視(邏輯檢視、實現檢視、構件檢視和程式檢視,再加上用例檢視)就為我們利用 UML 對複雜軟體的結構和行為建模,提供了很好的指導。

過去二十年來,無疑是物件導向(OO)軟體的天下,世界軟體開發早已進入了 OO 時代。人們知道,高質量的好軟體是設計出來的,而軟體的設計目前依然主要依賴於人們大腦的思考和判斷,人類大腦的思考過程恰是一個對現實世界以及虛擬世界建模的過程。而作為 OO 建模技術的事實上工業標準,統一建模語言(UML)正好為我們提供了一個運用 OO 思維進行軟體建模和設計的工具。

自 1997 年 UML 成為物件管理集團(OMG)的國際行業標準,已過去了 10 年。2005 年 UML 1.4.2 成為正式國際標準 ISO/IEC 19501:2005,可以說是軟體設計史上的一個重要事件。UML 標準成熟之後的研發進展也比較順利,當前最新版本為 2.1。

UML 中文 FAQ

UML 有什麼用?作為一種建模“語言”,促進溝通是一項基本功能,然而很多人忽視了 UML 獨立於傳統具象程式語言(比如 Java、C#、C++)、擅長表達抽象 OO 概念的一大特點。事實上,熟練掌握 UML 能夠幫助我們的大腦學會快速、敏捷地 運用 OO 方式進行思考。UML 標準建模及其相關技術不但是近 10 年來各工程領域 OO 軟體分析、設計與建模的利器,也是當前表達軟體架構和設計模式(design patterns)最形象、簡潔和有效的工具。

從一名初級程式設計師成長為一名經驗豐富的軟體架構師,有很長的路要走。根據張恂的經驗,掌握抽象、理性和邏輯的思維方式、思考能力,是程式設計師成功成長的一個重要關鍵。在我看來,學會運用 UML 思考,透過現象看本質,抽象地運用 UML 表達軟體架構和設計方案,是當今世界上任何一名軟體架構師乃至普通 OO 程式設計師都應該具備或儘快掌握的基本功。這幾年世界各地的大專院校、教育培訓機構紛紛把 OOAD/UML 列為一門軟體工程、軟體設計專業的必修課,可以說正在情理之中。

敏捷 OO 教練 張恂
www.zhangxun.com
2008   版權所有

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13633641/viewspace-343365/,如需轉載,請註明出處,否則將追究法律責任。

相關文章