UML自1997年誕生以來,受到無數(shù)廠商、組織、專家學(xué)者的追捧和擁護(hù),短短幾年時(shí)間,便有一統(tǒng)天下之勢(shì)。提起建模語言,舍UML其誰?
UML相關(guān)標(biāo)準(zhǔn)OMG組織作為影響力最大的面向?qū)ο蠹夹g(shù)的機(jī)構(gòu),早早便將UML收入囊中,力捧其為標(biāo)準(zhǔn)建模語言。OMG在CORBA取得成功之后,最大的著力點(diǎn)便是MDA架構(gòu),而MDA架構(gòu)的四大標(biāo)準(zhǔn)UML、MOF、XMI和CWM中,圍繞著UML的技術(shù)便有三種:UML本身自不必說,版本已經(jīng)到了2.0;MOF作為“建模語言的語言”,似乎就是為UML量身定做的,雖說MOF有能力創(chuàng)建出與UML并駕齊驅(qū)的建模語言,但是似乎沒有看到誰這么干,大家只是在努力的發(fā)展UML的“方言”,例如UML Profile for CORBA,UML Profile for EJB等等;XMI是“模型的標(biāo)準(zhǔn)存儲(chǔ)交換格式”,為了解決不同的建模工具創(chuàng)建的模型不能互用的問題,OMG創(chuàng)建了XMI作為模型的存儲(chǔ)交換標(biāo)準(zhǔn)。這樣一來,UML工具更加可以大行其道,使用不同的建模工具創(chuàng)建的UML模型可以互相交流,只要它們都基于XMI。
UML相關(guān)工具工具的多寡與優(yōu)劣可以看出某個(gè)技術(shù)的受歡迎程度,在建模工具中,不說100%,大概也有90%支持了UML語言。最出名的UML工具Rational Rose,被IBM收購了;Eclipse下面的UML工具EclipseUML讓開發(fā)它的小公司Omondo也出名了;國內(nèi)也有一個(gè)UML工具,聽說效果也不錯(cuò),就是楚凡科技的Trufun Plato 2005。至于其他國際上有點(diǎn)名氣的UML工具,更是不勝枚舉,幾乎有點(diǎn)軟件實(shí)力的國家,都有自己的UML工具。
當(dāng)然,UML不僅僅出現(xiàn)在專用的UML工具中,它也頻繁出現(xiàn)在最新的各種開發(fā)環(huán)境中。例如編程開發(fā)環(huán)境JBuilder,具有將代碼轉(zhuǎn)換為UML類圖的功能;Together就更進(jìn)一步,直接實(shí)現(xiàn)了代碼和類圖的同步轉(zhuǎn)換;Eclipse作為最優(yōu)秀的開放式開發(fā)平臺(tái),擁有眾多的UML相關(guān)插件,除了前面提到的EclipseUML,比較有名的還有EMF和UML2。
UML在MDA出現(xiàn)之后,在OMG的概念中,成為了MDA的一個(gè)子集(雖然UML的名氣遠(yuǎn)遠(yuǎn)大于MDA)。因此眾多的MDA工具中,幾乎都少不了UML功能。我認(rèn)為很多MDA工具就是從UML工具直接改過來的。
UML使用現(xiàn)狀照理說來,如火如荼的標(biāo)準(zhǔn)和工具應(yīng)該催生出如火如荼的應(yīng)用才對(duì),可是UML的使用狀況實(shí)在不盡如人意。無論是身邊的還是網(wǎng)絡(luò)上的朋友,在項(xiàng)目中使用UML的都是鳳毛麟角,即便使用了UML,也是在很小的范圍內(nèi),完全沒有發(fā)揮出1%的功效。現(xiàn)在總結(jié)一下目前我所知道的UML使用現(xiàn)狀:
l 讀代碼時(shí),用UML工具進(jìn)行逆向工程,可以清晰的觀察代碼結(jié)構(gòu),方便理解代碼。
l 寫代碼時(shí),由于開發(fā)平臺(tái)可以自動(dòng)生成UML類圖,因此有時(shí)觀察UML類圖得到比較清晰的代碼結(jié)構(gòu)。例如Together或者JBuilder等工具。當(dāng)然,如果沒有自動(dòng)生成的UML圖,大部分人也不會(huì)尋找其他工具去生成UML類圖的。
l 撰寫科技論文時(shí),使用UML來表達(dá)系統(tǒng)架構(gòu)或者系統(tǒng)流程等。
l 部分對(duì)UML非常熟悉的程序員,在開始寫代碼時(shí),先畫UML類圖,然后利用工具生成代碼,最后對(duì)代碼進(jìn)行擴(kuò)展。
從上面的使用現(xiàn)狀可以看出,很多人把UML當(dāng)成一種可有可無的技術(shù)。即使使用了UML,也只是圍繞著UML中的類圖,其他的UML圖都拋到一邊去了。造成這種狀況的原因,一方面固然是因?yàn)閲鴥?nèi)的正規(guī)大型軟件項(xiàng)目比較少,軟件工程技術(shù)起步很晚;另一方面是由于國內(nèi)不管是架構(gòu)師、系統(tǒng)分析員、軟件工程師、程序員、測(cè)試人員等等實(shí)質(zhì)上都是程序員而已,很多人是趕著鴨子上架成了架構(gòu)師或者系統(tǒng)分析員的。這種狀況下,軟件工程的概念難以深入人心,UML更加成了一個(gè)國內(nèi)項(xiàng)目的雞肋。
看看國外的架構(gòu)師、UML專家們,往往都是滿臉大胡子,在計(jì)算機(jī)領(lǐng)域中浸淫了3,40年;而中國最古老的程序員,也只有十幾年經(jīng)驗(yàn),除去在黑暗中摸索的幾年,有十年以上開發(fā)經(jīng)驗(yàn)的程序員少之又少。不經(jīng)歷幾個(gè)大型項(xiàng)目,要使用軟件工程技術(shù)是不可能的,也是不能起到什么效果的。因此,有人堂而皇之的撰文“UML的三大硬傷”,將UML駁斥得一無是處。高喊口號(hào)打倒某東西是很容易的,關(guān)鍵是打倒了UML何以取而代之?
程序員眼中的UML既然國內(nèi)90%以上的軟件開發(fā)人員都是程序員,那么程序員眼中的UML到底應(yīng)該是什么樣子的呢?我很期望有一本好書能夠讓程序員們快速的掌握自己所需的UML知識(shí),遺憾的是目前還沒有看到這樣的一本書。無論是“三友”的UML經(jīng)典教材還是國內(nèi)的一些“xx天精通UML”都不符合這樣的要求。沒有一本是“有中國特色的UML教材――一本寫給程序員的UML入門書”。
作為一個(gè)程序員,我很了解其他同僚的心理,如果拿到一本書,翻了一個(gè)小時(shí)還沒有找到可以run的HelloWorld,90%的人會(huì)大叫一聲“去nmd”,然后把書扔進(jìn)廢紙堆。不能怪我們急功近利,在這個(gè)技術(shù)術(shù)語滿天飛,連底層平臺(tái)都動(dòng)蕩不安的年代,誰還有時(shí)間和興趣看一些與自己無關(guān)的東西呢?
我很能想象一個(gè)程序員,好不容易空出時(shí)間來看看最近很熱的UML技術(shù),當(dāng)他拿到一本UML入門以后,開始尋找對(duì)自己有用的東西。在開始的一個(gè)小時(shí),滿篇都是需求分析,use case,甚至?xí)淖髡哌€在饒有興趣的介紹use case有六種譯法:用例、用況、用案……對(duì)不起,老子一百年都沒做過需求分析了,也不想知道這個(gè)狗屁的use case到底叫什么。于是開始后悔在china-pub上又白花了這么多銀子。
還有些書上信誓旦旦的說“學(xué)好UML,走遍天下都不怕”,如果你做需求分析,你可以用UML和客戶交流;如果你做系統(tǒng)分析員,你可以用UML設(shè)計(jì)系統(tǒng);如果你做程序員,你可以用UML生成程序;如果你做測(cè)試員,你可以基于UML設(shè)計(jì)測(cè)試用例。而實(shí)際情況是什么呢?國內(nèi)的客戶有幾個(gè)懂UML?懂UML的人差不多自己都可以把軟件寫出來了,還需要請(qǐng)你做需求分析么?別說客戶了,上次聽同學(xué)說和北京某大科研所的工程師們交流,無意中說起了UML,在場(chǎng)的竟然只有一個(gè)稍微了解,而且堅(jiān)持認(rèn)為那是一種畫圖工具(那位仁兄其實(shí)也沒錯(cuò),Visio不就是一個(gè)畫圖工具么)。
雖然狀況如此不堪,但是UML確實(shí)是一個(gè)很優(yōu)秀的“交流語言”、“代碼生成工具”和“系統(tǒng)設(shè)計(jì)工具”。讓我們擦干身上的獻(xiàn)血,掩埋戰(zhàn)友的尸體,睜大迷蒙的雙眼來看清UML對(duì)程序員的作用。UML有九種圖,作用各自不同,基本上涵蓋了軟件工程的各個(gè)方面,很多人就是不堪于忍受知識(shí)不足的困惑與“侮辱”(很多程序員認(rèn)為一種技術(shù)自己看不懂就是對(duì)自己的侮辱),從而放棄了整片UML森林。他們怕的不是在UML這棵樹上吊死,而是怕在UML森林里面迷路。但是我想說,知識(shí)學(xué)習(xí)的過程就是去蕪存精,找出對(duì)自己有用的東西,然后掌握之。對(duì)于程序員來說,UML的價(jià)值就體現(xiàn)在三個(gè)方面:
一、UML是最好的交流語言,無論是與其他程序員交流,還是與領(lǐng)域?qū)<?、測(cè)試員或者用戶交流。原因只有一點(diǎn),UML是標(biāo)準(zhǔn)的,就像英語一樣,無論多么該死,大家還是忙著把自己的論文改成英文的。當(dāng)然,在小的領(lǐng)域可能有更好的交流方言,但是在大而長遠(yuǎn)的交流中,使用標(biāo)準(zhǔn)的交流語言是穩(wěn)妥的。
二、UML是很好的代碼生成工具,其實(shí)代碼生成功能并不是由UML語言和規(guī)范提供的,而是由UML工具提供的,而且不同的UML工具提供的代碼生成功能還不盡相同。例如Rose提供簡單的代碼框架生成,而Eclipse插件EMF可以生成功能豐富,提供了各種設(shè)計(jì)模式的代碼包。無論如何,如果程序員可以從UML入手來寫程序,比直接敲代碼要高級(jí)那么一點(diǎn)點(diǎn)。從文檔、版本控制、維護(hù)、測(cè)試等各方面來說,畫UML類圖比直接寫代碼都要高那么一點(diǎn)點(diǎn)。
三、UML是很好的系統(tǒng)設(shè)計(jì)工具。對(duì)于程序員來說,很少用到“設(shè)計(jì)”這個(gè)詞,大部分時(shí)候我們都是在“編寫”或者“實(shí)現(xiàn)”。但是勿庸置疑,程序員的許多工作中還是需要“設(shè)計(jì)”的。包和組件之間的依賴關(guān)系、復(fù)雜操作的流程、對(duì)象之間的關(guān)聯(lián)和狀態(tài)、程序的部署等等,都經(jīng)常是程序員的工作。那么上面的四種情況可以用UML的組件圖、序列圖、對(duì)象圖和部署圖來設(shè)計(jì)。雖然,不同的程序員有不同的設(shè)計(jì)方法或者設(shè)計(jì)圖例,不過,UML是標(biāo)準(zhǔn)的。不要忽視標(biāo)準(zhǔn)的力量,標(biāo)準(zhǔn)的東西意味著在全世界范圍內(nèi)都有可能會(huì)被看懂,不標(biāo)準(zhǔn)的東西可能出了你的辦公室就沒人能夠清晰、準(zhǔn)確的理解了。