軟體設計、架構與 UML 建模
(本文的最新版在 http://www.zhangxun.com/entry.aspx?sname=tdd§ion=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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- StarUML mac UML軟體建模器Mac
- 軟體架構設計架構
- 軟體設計師:UML
- 想學設計模式、想搞架構設計,先學學UML系統建模吧您設計模式架構
- 京東雲開發者|軟體架構視覺化及C4模型:架構設計不僅僅是UML架構視覺化模型
- 軟體架構與架構師架構
- 軟體建模即程式設計程式設計
- 架構實戰--軟體架構設計的過程架構
- 軟體架構設計模式大全 - vikipediaaaa架構設計模式
- 軟體架構設計原則和模式(上):分層架構設計架構模式
- UML建模實踐——選“對”企業架構建模視角很關鍵架構
- 軟體架構, 軟體框架,設計模式的區別架構框架設計模式
- 軟體架構與敏捷架構敏捷
- StarUML for Mac(UML軟體建模器) 5.1.0啟用版Mac
- SaaS(軟體即服務)架構設計架構
- 《軟體架構設計》讀書筆記架構筆記
- 認識軟體架構:設計面面觀架構
- 軟體自動測試架構設計架構
- 論軟體架構設計及應用架構
- 軟體體系架構課堂測試07 –邏輯架構設計架構
- 軟考中級(軟體設計)之下午場UML(三)
- 讀書筆記 之《軟體架構設計: 大型網站技術架構與業務架構融合之道》筆記架構網站
- 架構與設計架構
- API與軟體架構-介面API架構
- 嵌入式軟體架構設計-模組化架構
- 什麼是軟體架構設計?- Grady架構
- 國學思想之於軟體架構設計架構
- UML軟體建模器:StarUML for Mac v5.1.0啟用版Mac
- [全程建模]UML設計類中的實現與方法數量問題
- 嵌入式軟體架構設計-函式呼叫架構函式
- 嵌入式軟體架構設計-程式分層架構
- API介面設計之RESTful軟體架構風格APIREST架構
- 從Open Web SSO 學習軟體架構設計Web架構
- Java軟體架構設計慨論(轉載)--設計模式和系統架構的關係Java架構設計模式
- 無人駕駛與機器人領域的中介軟體與架構設計(一)機器人架構
- 開發軟體設計模型 visual studio UML模型
- StarUML for Mac(UML軟體建模器) 5.1.0中文啟用版Mac
- 《UML軟體建模技術》企業內訓課程大綱