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