軟件設計中的二元關系充滿了二元辯證、平衡之道的現(xiàn)代軟件工程,竟然與兩千年前中國古典哲學《陰陽太極》中的黑、白對立統(tǒng)一相暗合,這真的是歷史的巧合,還是科學的必然?
UML抽象、簡潔、高于Java、C++諸等高級程序設計語言之上的形象表達,可以讓我們真切領略到蘊藏于軟件那紛繁蕪雜的細節(jié)表面之后的一份簡單、和諧之美。
軟件究竟是什么?有很多比喻可以形容。靜態(tài)的軟件就像一座虛擬的建筑(Architecture),而運動時的軟件有時就像一部開動的虛擬機器,或多條柔性的工廠流水線(進程與線程),有時又像一種虛擬的生物,可以肆意的復制和生長(比如軟件病毒)。
過去有一種說法認為:程序 = 算法 + 數(shù)據(jù)結(jié)構(gòu),如今看來這種舊結(jié)構(gòu)化時代的觀點是不準確、不全面的,在新結(jié)構(gòu)化時代我們至少可以得出這樣大致的公式:程序 = 算法 + 軟件結(jié)構(gòu) + 數(shù)據(jù)結(jié)構(gòu),在這里我們強調(diào)軟件結(jié)構(gòu)不同于數(shù)據(jù)結(jié)構(gòu),軟件是操縱數(shù)據(jù)的程序,而軟件結(jié)構(gòu)(包括架構(gòu)和設計模式)的質(zhì)量對軟件的質(zhì)量同樣具有決定性的影響。
過去這15年無疑是面向?qū)ο螅∣O)軟件的天下,世界軟件開發(fā)早已進入了OO時代。
人們知道,高質(zhì)量的好軟件是設計出來的,而軟件的設計目前依然主要依賴于人們大腦的思考和判斷,人類大腦的思考過程恰是一個對現(xiàn)實世界以及虛擬世界建模的過程。
而作為OO建模技術的事實上工業(yè)標準,統(tǒng)一建模語言(UML)正好為我們提供了一個運用OO思維進行軟件建模和設計的工具。
UML 1.4.2成為正式國際標準ISO/IEC 19501是軟件設計的一個重要事件,UML標準成熟之后的研發(fā)進展也比較順利,當前新版本為2.1。
UML有什么用?作為一種建?!罢Z言”,促進溝通是一項基本功能,然而很多人忽視了UML獨立于傳統(tǒng)具象編程語言、擅長表達抽象OO概念的一大特點。
事實上,熟練掌握UML能夠幫助我們的大腦學會快速、敏捷地運用OO方式進行思考。UML標準及其相關技術不但是近10年來各工程領域OO軟件設計與建模的利器,還是當前表達軟件設計模式形象和有效的工具。
在我看來,學會運用UML思考,抽象地用UML表達軟件架構(gòu)和設計方案,從而能透過現(xiàn)象看本質(zhì),是當今任何一名軟件架構(gòu)師乃至普通OO程序員都應該盡快掌握的基本功。所以,這幾年世界各地的大專院校紛紛把OOAD/UML列為一門軟件工程專業(yè)的必修課也在情理之中了。
建模(modeling)并不是軟件行業(yè)所特有的做法,建模幾乎是幾千年來人類所有工程行業(yè)所共有的一項佳實踐。為什么我們要對軟件建模?因為軟件太復雜,難以理解和掌握,我們需要一種能夠簡單而深刻地反映軟件設計本質(zhì)的方法和工具。如何建模?就像對待建筑模型、機械模型一樣,軟件也是一個多面體(虛擬的),我們也需要選擇視點、視角和視圖,對模型做投影、做切片。Kruchten 博士提出的的 4+1 視圖(邏輯視圖、實現(xiàn)視圖、構(gòu)件視圖和進程視圖,再加上用例視圖)為我們利用UML對復雜軟件的結(jié)構(gòu)和行為建模提供了很好的指導。
軟件設計和UML建模既然那么重要,有什么簡單易學、提綱攜領的好方法、好原則嗎?我曾經(jīng)編寫了一首建??谠E,多次在講課咨詢時與客戶、學員們分享交流,取得了很好的效果。
這首太極建模詩(或叫十六字OO建??谠E)受到了Larman(《UML和模式應用》)、Cockburn(《編寫有效用例》)、3 Amigos(《UML用戶指南》)等專家們睿智大作的啟發(fā),也凝結(jié)了我10多年來從事OO設計和編程的一點小小感悟。
我發(fā)現(xiàn)“外與內(nèi),高與低,靜與動,粗與細”等基本二元辯證關系,不但適用于軟件用例需求的建模,也適用于軟件架構(gòu)的OOAD/UML 建模。
當然,軟件設計中的二元關系還遠不止這些。充滿了二元辯證、平衡之道的現(xiàn)代軟件工程,竟然與兩千年前中國古典哲學《陰陽太極》中的黑、白對立統(tǒng)一相暗合,這真的是歷史的巧合,還是科學的必然?
UML抽象、簡潔、高于Java、C++諸等高級程序設計語言之上的形象表達,可以讓我們真切領略到蘊藏于軟件那紛繁蕪雜的細節(jié)表面之后的一份簡單、和諧之美。
軟件究竟是什么?有很多比喻可以形容。靜態(tài)的軟件就像一座虛擬的建筑(Architecture),而運動時的軟件有時就像一部開動的虛擬機器,或多條柔性的工廠流水線(進程與線程),有時又像一種虛擬的生物,可以肆意的復制和生長(比如軟件病毒)。
過去有一種說法認為:程序 = 算法 + 數(shù)據(jù)結(jié)構(gòu),如今看來這種舊結(jié)構(gòu)化時代的觀點是不準確、不全面的,在新結(jié)構(gòu)化時代我們至少可以得出這樣大致的公式:程序 = 算法 + 軟件結(jié)構(gòu) + 數(shù)據(jù)結(jié)構(gòu),在這里我們強調(diào)軟件結(jié)構(gòu)不同于數(shù)據(jù)結(jié)構(gòu),軟件是操縱數(shù)據(jù)的程序,而軟件結(jié)構(gòu)(包括架構(gòu)和設計模式)的質(zhì)量對軟件的質(zhì)量同樣具有決定性的影響。
過去這15年無疑是面向?qū)ο螅∣O)軟件的天下,世界軟件開發(fā)早已進入了OO時代。
人們知道,高質(zhì)量的好軟件是設計出來的,而軟件的設計目前依然主要依賴于人們大腦的思考和判斷,人類大腦的思考過程恰是一個對現(xiàn)實世界以及虛擬世界建模的過程。
而作為OO建模技術的事實上工業(yè)標準,統(tǒng)一建模語言(UML)正好為我們提供了一個運用OO思維進行軟件建模和設計的工具。
UML 1.4.2成為正式國際標準ISO/IEC 19501是軟件設計的一個重要事件,UML標準成熟之后的研發(fā)進展也比較順利,當前新版本為2.1。
UML有什么用?作為一種建?!罢Z言”,促進溝通是一項基本功能,然而很多人忽視了UML獨立于傳統(tǒng)具象編程語言、擅長表達抽象OO概念的一大特點。
事實上,熟練掌握UML能夠幫助我們的大腦學會快速、敏捷地運用OO方式進行思考。UML標準及其相關技術不但是近10年來各工程領域OO軟件設計與建模的利器,還是當前表達軟件設計模式形象和有效的工具。
在我看來,學會運用UML思考,抽象地用UML表達軟件架構(gòu)和設計方案,從而能透過現(xiàn)象看本質(zhì),是當今任何一名軟件架構(gòu)師乃至普通OO程序員都應該盡快掌握的基本功。所以,這幾年世界各地的大專院校紛紛把OOAD/UML列為一門軟件工程專業(yè)的必修課也在情理之中了。
建模(modeling)并不是軟件行業(yè)所特有的做法,建模幾乎是幾千年來人類所有工程行業(yè)所共有的一項佳實踐。為什么我們要對軟件建模?因為軟件太復雜,難以理解和掌握,我們需要一種能夠簡單而深刻地反映軟件設計本質(zhì)的方法和工具。如何建模?就像對待建筑模型、機械模型一樣,軟件也是一個多面體(虛擬的),我們也需要選擇視點、視角和視圖,對模型做投影、做切片。Kruchten 博士提出的的 4+1 視圖(邏輯視圖、實現(xiàn)視圖、構(gòu)件視圖和進程視圖,再加上用例視圖)為我們利用UML對復雜軟件的結(jié)構(gòu)和行為建模提供了很好的指導。
軟件設計和UML建模既然那么重要,有什么簡單易學、提綱攜領的好方法、好原則嗎?我曾經(jīng)編寫了一首建??谠E,多次在講課咨詢時與客戶、學員們分享交流,取得了很好的效果。
這首太極建模詩(或叫十六字OO建??谠E)受到了Larman(《UML和模式應用》)、Cockburn(《編寫有效用例》)、3 Amigos(《UML用戶指南》)等專家們睿智大作的啟發(fā),也凝結(jié)了我10多年來從事OO設計和編程的一點小小感悟。
我發(fā)現(xiàn)“外與內(nèi),高與低,靜與動,粗與細”等基本二元辯證關系,不但適用于軟件用例需求的建模,也適用于軟件架構(gòu)的OOAD/UML 建模。
當然,軟件設計中的二元關系還遠不止這些。充滿了二元辯證、平衡之道的現(xiàn)代軟件工程,竟然與兩千年前中國古典哲學《陰陽太極》中的黑、白對立統(tǒng)一相暗合,這真的是歷史的巧合,還是科學的必然?