MDA之路

          MDA,UML,XML,Eclipse及Java相關(guān)的Blog
          posts - 53, comments - 494, trackbacks - 0, articles - 2
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          程序員眼中的UML

          Posted on 2005-06-08 11:49 wxb_nudt 閱讀(6476) 評(píng)論(15)  編輯  收藏 所屬分類(lèi): 技術(shù)雜談

          程序員眼中的UML

          UML1997年誕生以來(lái),受到無(wú)數(shù)廠商、組織、專(zhuān)家學(xué)者的追捧和擁護(hù),短短幾年時(shí)間,便有一統(tǒng)天下之勢(shì)。提起建模語(yǔ)言,舍UML其誰(shuí)?

          UML相關(guān)標(biāo)準(zhǔn)

          OMG組織作為影響力最大的面向?qū)ο蠹夹g(shù)的機(jī)構(gòu),早早便將UML收入囊中,力捧其為標(biāo)準(zhǔn)建模語(yǔ)言。OMGCORBA取得成功之后,最大的著力點(diǎn)便是MDA架構(gòu),而MDA架構(gòu)的四大標(biāo)準(zhǔn)UMLMOFXMICWM中,圍繞著UML的技術(shù)便有三種:UML本身自不必說(shuō),版本已經(jīng)到了2.0MOF作為“建模語(yǔ)言的語(yǔ)言”,似乎就是為UML量身定做的,雖說(shuō)MOF有能力創(chuàng)建出與UML并駕齊驅(qū)的建模語(yǔ)言,但是似乎沒(méi)有看到誰(shuí)這么干,大家只是在努力的發(fā)展UML的“方言”,例如UML Profile for CORBAUML Profile for EJB等等;XMI是“模型的標(biāo)準(zhǔn)存儲(chǔ)交換格式”,為了解決不同的建模工具創(chuàng)建的模型不能互用的問(wèn)題,OMG創(chuàng)建了XMI作為模型的存儲(chǔ)交換標(biāo)準(zhǔn)。這樣一來(lái),UML工具更加可以大行其道,使用不同的建模工具創(chuàng)建的UML模型可以互相交流,只要它們都基于XMI

          UML相關(guān)工具

          工具的多寡與優(yōu)劣可以看出某個(gè)技術(shù)的受歡迎程度,在建模工具中,不說(shuō)100%,大概也有90%支持了UML語(yǔ)言。最出名的UML工具Rational Rose,被IBM收購(gòu)了;Eclipse下面的UML工具EclipseUML讓開(kāi)發(fā)它的小公司Omondo也出名了;國(guó)內(nèi)也有一個(gè)UML工具,聽(tīng)說(shuō)效果也不錯(cuò),就是楚凡科技的Trufun Plato 2005。至于其他國(guó)際上有點(diǎn)名氣的UML工具,更是不勝枚舉,幾乎有點(diǎn)軟件實(shí)力的國(guó)家,都有自己的UML工具。

          當(dāng)然,UML不僅僅出現(xiàn)在專(zhuān)用的UML工具中,它也頻繁出現(xiàn)在最新的各種開(kāi)發(fā)環(huán)境中。例如編程開(kāi)發(fā)環(huán)境JBuilder,具有將代碼轉(zhuǎn)換為UML類(lèi)圖的功能;Together就更進(jìn)一步,直接實(shí)現(xiàn)了代碼和類(lèi)圖的同步轉(zhuǎn)換;Eclipse作為最優(yōu)秀的開(kāi)放式開(kāi)發(fā)平臺(tái),擁有眾多的UML相關(guān)插件,除了前面提到的EclipseUML,比較有名的還有EMFUML2

          UMLMDA出現(xiàn)之后,在OMG的概念中,成為了MDA的一個(gè)子集(雖然UML的名氣遠(yuǎn)遠(yuǎn)大于MDA)。因此眾多的MDA工具中,幾乎都少不了UML功能。我認(rèn)為很多MDA工具就是從UML工具直接改過(guò)來(lái)的。

          UML使用現(xiàn)狀

          照理說(shuō)來(lái),如火如荼的標(biāo)準(zhǔn)和工具應(yīng)該催生出如火如荼的應(yīng)用才對(duì),可是UML的使用狀況實(shí)在不盡如人意。無(wú)論是身邊的還是網(wǎng)絡(luò)上的朋友,在項(xiàng)目中使用UML的都是鳳毛麟角,即便使用了UML,也是在很小的范圍內(nèi),完全沒(méi)有發(fā)揮出1%的功效。現(xiàn)在總結(jié)一下目前我所知道的UML使用現(xiàn)狀:

          l         讀代碼時(shí),用UML工具進(jìn)行逆向工程,可以清晰的觀察代碼結(jié)構(gòu),方便理解代碼。

          l         寫(xiě)代碼時(shí),由于開(kāi)發(fā)平臺(tái)可以自動(dòng)生成UML類(lèi)圖,因此有時(shí)觀察UML類(lèi)圖得到比較清晰的代碼結(jié)構(gòu)。例如Together或者JBuilder等工具。當(dāng)然,如果沒(méi)有自動(dòng)生成的UML圖,大部分人也不會(huì)尋找其他工具去生成UML類(lèi)圖的。

          l         撰寫(xiě)科技論文時(shí),使用UML來(lái)表達(dá)系統(tǒng)架構(gòu)或者系統(tǒng)流程等。

          l         部分對(duì)UML非常熟悉的程序員,在開(kāi)始寫(xiě)代碼時(shí),先畫(huà)UML類(lèi)圖,然后利用工具生成代碼,最后對(duì)代碼進(jìn)行擴(kuò)展。

          從上面的使用現(xiàn)狀可以看出,很多人把UML當(dāng)成一種可有可無(wú)的技術(shù)。即使使用了UML,也只是圍繞著UML中的類(lèi)圖,其他的UML圖都拋到一邊去了。造成這種狀況的原因,一方面固然是因?yàn)閲?guó)內(nèi)的正規(guī)大型軟件項(xiàng)目比較少,軟件工程技術(shù)起步很晚;另一方面是由于國(guó)內(nèi)不管是架構(gòu)師、系統(tǒng)分析員、軟件工程師、程序員、測(cè)試人員等等實(shí)質(zhì)上都是程序員而已,很多人是趕著鴨子上架成了架構(gòu)師或者系統(tǒng)分析員的。這種狀況下,軟件工程的概念難以深入人心,UML更加成了一個(gè)國(guó)內(nèi)項(xiàng)目的雞肋。

          看看國(guó)外的架構(gòu)師、UML專(zhuān)家們,往往都是滿(mǎn)臉大胡子,在計(jì)算機(jī)領(lǐng)域中浸淫了340年;而中國(guó)最古老的程序員,也只有十幾年經(jīng)驗(yàn),除去在黑暗中摸索的幾年,有十年以上開(kāi)發(fā)經(jīng)驗(yàn)的程序員少之又少。不經(jīng)歷幾個(gè)大型項(xiàng)目,要使用軟件工程技術(shù)是不可能的,也是不能起到什么效果的。因此,有人堂而皇之的撰文“UML的三大硬傷”,將UML駁斥得一無(wú)是處。高喊口號(hào)打倒某東西是很容易的,關(guān)鍵是打倒了UML何以取而代之?

          程序員眼中的UML

          既然國(guó)內(nèi)90%以上的軟件開(kāi)發(fā)人員都是程序員,那么程序員眼中的UML到底應(yīng)該是什么樣子的呢?我很期望有一本好書(shū)能夠讓程序員們快速的掌握自己所需的UML知識(shí),遺憾的是目前還沒(méi)有看到這樣的一本書(shū)。無(wú)論是“三友”的UML經(jīng)典教材還是國(guó)內(nèi)的一些“xx天精通UML”都不符合這樣的要求。沒(méi)有一本是“有中國(guó)特色的UML教材――一本寫(xiě)給程序員的UML入門(mén)書(shū)”。

          作為一個(gè)程序員,我很了解其他同僚的心理,如果拿到一本書(shū),翻了一個(gè)小時(shí)還沒(méi)有找到可以runHelloWorld90%的人會(huì)大叫一聲“去nmd”,然后把書(shū)扔進(jìn)廢紙堆。不能怪我們急功近利,在這個(gè)技術(shù)術(shù)語(yǔ)滿(mǎn)天飛,連底層平臺(tái)都動(dòng)蕩不安的年代,誰(shuí)還有時(shí)間和興趣看一些與自己無(wú)關(guān)的東西呢?

          我很能想象一個(gè)程序員,好不容易空出時(shí)間來(lái)看看最近很熱的UML技術(shù),當(dāng)他拿到一本UML入門(mén)以后,開(kāi)始尋找對(duì)自己有用的東西。在開(kāi)始的一個(gè)小時(shí),滿(mǎn)篇都是需求分析,use case,甚至?xí)淖髡哌€在饒有興趣的介紹use case有六種譯法:用例、用況、用案……對(duì)不起,老子一百年都沒(méi)做過(guò)需求分析了,也不想知道這個(gè)狗屁的use case到底叫什么。于是開(kāi)始后悔在china-pub上又白花了這么多銀子。

          還有些書(shū)上信誓旦旦的說(shuō)“學(xué)好UML,走遍天下都不怕”,如果你做需求分析,你可以用UML和客戶(hù)交流;如果你做系統(tǒng)分析員,你可以用UML設(shè)計(jì)系統(tǒng);如果你做程序員,你可以用UML生成程序;如果你做測(cè)試員,你可以基于UML設(shè)計(jì)測(cè)試用例。而實(shí)際情況是什么呢?國(guó)內(nèi)的客戶(hù)有幾個(gè)懂UML?懂UML的人差不多自己都可以把軟件寫(xiě)出來(lái)了,還需要請(qǐng)你做需求分析么?別說(shuō)客戶(hù)了,上次聽(tīng)同學(xué)說(shuō)和北京某大科研所的工程師們交流,無(wú)意中說(shuō)起了UML,在場(chǎng)的竟然只有一個(gè)稍微了解,而且堅(jiān)持認(rèn)為那是一種畫(huà)圖工具(那位仁兄其實(shí)也沒(méi)錯(cuò),Visio不就是一個(gè)畫(huà)圖工具么)。

          雖然狀況如此不堪,但是UML確實(shí)是一個(gè)很優(yōu)秀的“交流語(yǔ)言”、“代碼生成工具”和“系統(tǒng)設(shè)計(jì)工具”。讓我們擦干身上的獻(xiàn)血,掩埋戰(zhàn)友的尸體,睜大迷蒙的雙眼來(lái)看清UML對(duì)程序員的作用。UML有九種圖,作用各自不同,基本上涵蓋了軟件工程的各個(gè)方面,很多人就是不堪于忍受知識(shí)不足的困惑與“侮辱”(很多程序員認(rèn)為一種技術(shù)自己看不懂就是對(duì)自己的侮辱),從而放棄了整片UML森林。他們怕的不是在UML這棵樹(shù)上吊死,而是怕在UML森林里面迷路。但是我想說(shuō),知識(shí)學(xué)習(xí)的過(guò)程就是去蕪存精,找出對(duì)自己有用的東西,然后掌握之。對(duì)于程序員來(lái)說(shuō),UML的價(jià)值就體現(xiàn)在三個(gè)方面:

          一、UML是最好的交流語(yǔ)言,無(wú)論是與其他程序員交流,還是與領(lǐng)域?qū)<摇y(cè)試員或者用戶(hù)交流。原因只有一點(diǎn),UML是標(biāo)準(zhǔn)的,就像英語(yǔ)一樣,無(wú)論多么該死,大家還是忙著把自己的論文改成英文的。當(dāng)然,在小的領(lǐng)域可能有更好的交流方言,但是在大而長(zhǎng)遠(yuǎn)的交流中,使用標(biāo)準(zhǔn)的交流語(yǔ)言是穩(wěn)妥的。

          二、UML是很好的代碼生成工具,其實(shí)代碼生成功能并不是由UML語(yǔ)言和規(guī)范提供的,而是由UML工具提供的,而且不同的UML工具提供的代碼生成功能還不盡相同。例如Rose提供簡(jiǎn)單的代碼框架生成,而Eclipse插件EMF可以生成功能豐富,提供了各種設(shè)計(jì)模式的代碼包。無(wú)論如何,如果程序員可以從UML入手來(lái)寫(xiě)程序,比直接敲代碼要高級(jí)那么一點(diǎn)點(diǎn)。從文檔、版本控制、維護(hù)、測(cè)試等各方面來(lái)說(shuō),畫(huà)UML類(lèi)圖比直接寫(xiě)代碼都要高那么一點(diǎn)點(diǎn)。

          三、UML是很好的系統(tǒng)設(shè)計(jì)工具。對(duì)于程序員來(lái)說(shuō),很少用到“設(shè)計(jì)”這個(gè)詞,大部分時(shí)候我們都是在“編寫(xiě)”或者“實(shí)現(xiàn)”。但是勿庸置疑,程序員的許多工作中還是需要“設(shè)計(jì)”的。包和組件之間的依賴(lài)關(guān)系、復(fù)雜操作的流程、對(duì)象之間的關(guān)聯(lián)和狀態(tài)、程序的部署等等,都經(jīng)常是程序員的工作。那么上面的四種情況可以用UML的組件圖、序列圖、對(duì)象圖和部署圖來(lái)設(shè)計(jì)。雖然,不同的程序員有不同的設(shè)計(jì)方法或者設(shè)計(jì)圖例,不過(guò),UML是標(biāo)準(zhǔn)的。不要忽視標(biāo)準(zhǔn)的力量,標(biāo)準(zhǔn)的東西意味著在全世界范圍內(nèi)都有可能會(huì)被看懂,不標(biāo)準(zhǔn)的東西可能出了你的辦公室就沒(méi)人能夠清晰、準(zhǔn)確的理解了。

          后記

          Blog好久沒(méi)有更新,因?yàn)樽罱恢泵τ谝恍┧孜铮谑窍雽?xiě)點(diǎn)清高的東西。但是寫(xiě)完之后再看,好像也不怎么清高,反而更俗了。

          前段時(shí)間寫(xiě)論文時(shí),需要用到UML2.0的類(lèi)圖元模型,在UML2.0的規(guī)范中尋覓了好久,發(fā)現(xiàn)類(lèi)圖元模型已經(jīng)被拆分到三個(gè)包里面了,因?yàn)?/SPAN>UML2.0的規(guī)范實(shí)在是太大太繁瑣了。于是有感于UML之博大精深,說(shuō)好聽(tīng)是博大精深,難聽(tīng)點(diǎn)就是亂七八糟。不過(guò)OMG歷來(lái)如此,當(dāng)初的CORBA如果更簡(jiǎn)約一點(diǎn),也許J2EE根本就沒(méi)有立足之地。

          感慨之后就是想把UML中對(duì)自己有用的部分整理出來(lái),在整理之前免不了到處翻資料,這篇文檔就是翻資料的一些感觸了。希望能夠?qū)?/SPAN>UML的有用部分都整理出來(lái),形成一個(gè)系列的文檔。


          評(píng)論

          # re: 程序員眼中的UML  回復(fù)  更多評(píng)論   

          2005-06-13 21:08 by rainbow
          不錯(cuò)。
          從一個(gè)很有意義的角度解讀了UML,還是很有啟迪的。

          # re: 程序員眼中的UML  回復(fù)  更多評(píng)論   

          2005-06-14 12:41 by hnlylyly@tom.com
          這個(gè)雖然只是對(duì)UML的一個(gè)大致的介紹,只是在短短的時(shí)間里就能夠領(lǐng)會(huì)這么多,佩服。

          # re: 程序員眼中的UML  回復(fù)  更多評(píng)論   

          2005-06-23 22:11 by yangs
          說(shuō)的挺現(xiàn)實(shí)的,不過(guò)我還是對(duì)uml挺樂(lè)觀的,雖然我并沒(méi)有學(xué)多少,但是它是一種標(biāo)準(zhǔn)的建模語(yǔ)言!

          # re: 程序員眼中的UML  回復(fù)  更多評(píng)論   

          2005-07-21 12:31 by ericyang
          寫(xiě)得好,好久沒(méi)看到如此好文了。頂你一下,呵呵。其實(shí),現(xiàn)在逆向工程做得遠(yuǎn)遠(yuǎn)不足以應(yīng)付需求,所以才導(dǎo)致它成為鏡中花,水中月。國(guó)外的為什么能成立,因?yàn)閡ml的應(yīng)用已經(jīng)成為一種規(guī)范,但是國(guó)內(nèi)沒(méi)有這種氣候,準(zhǔn)確的說(shuō),還早。因?yàn)閺目蛻?hù)、到軟件供應(yīng)商、到所謂的軟件評(píng)估機(jī)構(gòu),很少有拿它當(dāng)成一個(gè)一定要做的東西,其實(shí),不說(shuō)uml,能做到有齊全的各種文檔的,又有幾家呢?暫且估計(jì),當(dāng)有某個(gè)工具出現(xiàn)把這個(gè)逆向工程做得很到位的時(shí)候,國(guó)內(nèi)的uml才會(huì)成為大家普及的一個(gè)東西吧,不妨你去試試,呵呵

          erricyanglei@yahoo.com.cn

          # re: 程序員眼中的UML  回復(fù)  更多評(píng)論   

          2005-10-27 17:34 by ysq961
          不錯(cuò).感覺(jué)說(shuō)得很實(shí)在.致以謝意!

          # re: 程序員眼中的UML  回復(fù)  更多評(píng)論   

          2006-08-21 10:24 by 綠色的青蛙
          初學(xué),來(lái)看看概念

          謝謝

          # re: 程序員眼中的UML  回復(fù)  更多評(píng)論   

          2006-09-08 23:46 by justice
          受益了
          剛好今天項(xiàng)目經(jīng)理讓我做個(gè)用例圖, 在網(wǎng)上一搜主搜到你的 《程序員眼中的UML(2)--克服用例圖的恐懼》學(xué)習(xí)了一下輕輕松松地解決了問(wèn)題~~
          感激不盡~!

          # re: 程序員眼中的UML  回復(fù)  更多評(píng)論   

          2006-10-23 16:59 by yang[匿名]
          很不錯(cuò),本來(lái)對(duì)uml有些迷惑,現(xiàn)在有了進(jìn)一步的認(rèn)識(shí)。

          # re: 程序員眼中的UML  回復(fù)  更多評(píng)論   

          2007-02-02 21:27 by trufun
          當(dāng)有某個(gè)工具出現(xiàn)把這個(gè)逆向工程做得很到位的時(shí)候,國(guó)內(nèi)的uml才會(huì)成為大家普及的一個(gè)東西吧.

          現(xiàn)在國(guó)內(nèi)已經(jīng)有了這樣一個(gè)產(chǎn)品,不僅使逆向工程,完全實(shí)現(xiàn)了模型與代碼的雙向?qū)崟r(shí)同步,Trufun kant studio,支持多種開(kāi)發(fā)語(yǔ)言,而且該產(chǎn)品是完全國(guó)產(chǎn)的。

          # re: 程序員眼中的UML  回復(fù)  更多評(píng)論   

          2007-02-06 05:09 by ullillr
          大后天考試 考的就是uml

          # re: 程序員眼中的UML[未登錄](méi)  回復(fù)  更多評(píng)論   

          2007-04-03 11:56 by trufun
          Trufun kant 2007就可以算是把逆向工程做到位的產(chǎn)品了,大家可以到網(wǎng)站:www.trufun.net上面了解

          # re: 程序員眼中的UML  回復(fù)  更多評(píng)論   

          2007-05-22 22:02 by 一劍飄雪
          讓我們擦干身上的鮮血,埋葬戰(zhàn)友的尸體,另眼看UML...

          是福不是禍,是社禍你也躲不過(guò)...

          uu8uu8@gmail.com

          # re: 程序員眼中的UML  回復(fù)  更多評(píng)論   

          2007-07-12 13:54 by umlchina
          Trufun kant 2007 巨爛,千萬(wàn)別用

          # re: 程序員眼中的UML  回復(fù)  更多評(píng)論   

          2007-08-26 23:17 by hippo
          兄弟啊!一看就是自己人。看問(wèn)題透徹,一針見(jiàn)血啊!

          # re: 程序員眼中的UML[未登錄](méi)  回復(fù)  更多評(píng)論   

          2014-05-07 16:15 by 123
          學(xué)習(xí)了,感覺(jué)非常好,頂一個(gè)。
          主站蜘蛛池模板: 湘潭市| 锦州市| 惠州市| 寿宁县| 苗栗县| 凤冈县| 嘉义县| 常熟市| 陆川县| 石河子市| 慈利县| 凤冈县| 石阡县| 海丰县| 平山县| 博野县| 天峻县| 奎屯市| 兰州市| 新龙县| 宣恩县| 新安县| 海林市| 翁牛特旗| 图们市| 柯坪县| 青州市| 麻阳| 四川省| 汉沽区| 高密市| 子洲县| 太谷县| 修武县| 九龙城区| 高唐县| 济南市| 宜春市| 五指山市| 旬阳县| 玉溪市|