MDA之路

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

          程序員眼中的UML(3)

          --類(lèi)圖,就是比你高一點(diǎn)

          UML的成功80%是因?yàn)轭?lèi)圖,提到UML的時(shí)候有90%的人想到了類(lèi)圖,應(yīng)用UML的時(shí)候100%應(yīng)用了類(lèi)圖。如果類(lèi)圖和源代碼走到一起,肯定是要代碼抗釘耙的,因?yàn)檎撐涔椭腔?,?lèi)圖都高了那么一點(diǎn)點(diǎn)。

          亂談?lì)悎D

          如果說(shuō)程序是一個(gè)人,那么類(lèi)圖就是這個(gè)人的軀體。也就是說(shuō),光有類(lèi)圖,一個(gè)程序已經(jīng)成型了,看上去很像那么一回事了。UML在刻畫(huà)程序的靜態(tài)結(jié)構(gòu)方面很成功,但是在刻畫(huà)程序的動(dòng)態(tài)語(yǔ)義時(shí)很失敗,至今沒(méi)有一個(gè)好的解決方案,或者說(shuō),沒(méi)有一個(gè)能讓各方面都接受的方案。如果UML動(dòng)態(tài)語(yǔ)義的問(wèn)題解決了,那么MDA的目標(biāo)就真的達(dá)到了,模型可以完全代替代碼了。

          目前的MDA工具,號(hào)稱(chēng)模型代碼同步的,號(hào)稱(chēng)代碼生成的,號(hào)稱(chēng)PIM/PSM轉(zhuǎn)換的,大部分都只是和類(lèi)圖打交道罷了。因?yàn)轭?lèi)圖和代碼之間的轉(zhuǎn)換是如此自然,以至于出現(xiàn)了Together這樣的工具,模型(類(lèi)圖而已)和代碼是同步的。

          類(lèi)圖是程序的軀體,動(dòng)作語(yǔ)義才是程序的靈魂,可惜UML在刻畫(huà)程序靈魂的事情上做得太不出色了。很多研究者僅僅把目光放在類(lèi)圖上,類(lèi)圖到代碼的生成幾乎已經(jīng)沒(méi)有什么可以研究了,還是抱住不放,在生成的代碼中加入約束、加入設(shè)計(jì)模式、加入持久化存儲(chǔ)等等。怒其不爭(zhēng)、哀其無(wú)志。想到自己也是其中的一員,不由臨表涕零。

          類(lèi)圖難點(diǎn)問(wèn)題總結(jié)

          類(lèi)圖是非常容易學(xué)習(xí)的,因?yàn)樗兔嫦驅(qū)ο缶幊淌菍\生兄弟,如今的程序員哪有不懂面向?qū)ο蟮模虼祟?lèi)圖對(duì)于他們,就如同奶瓶對(duì)于嬰兒一般。下面從硬盤(pán)中翻出一幅曾經(jīng)自己畫(huà)的類(lèi)圖,相信大家一看便知:
          image001.jpg

          類(lèi)圖是一門(mén)易學(xué)難精的技術(shù),正如面向?qū)ο蠹夹g(shù)一樣,一百個(gè)程序員九十九個(gè)都說(shuō)自己懂面向?qū)ο?,但是真正入門(mén)的可能不到十個(gè),真正精通的也許只有一個(gè),這個(gè)人還往往不是中國(guó)人,唉~

          自己重新學(xué)習(xí)UML的動(dòng)機(jī)就來(lái)自于一次論文撰寫(xiě)過(guò)程中,想查閱類(lèi)圖的元模型圖,但是問(wèn)遍同行,翻遍網(wǎng)絡(luò),找不到合適的圖形或者描述,最后只能求救于OMGUML規(guī)范。一查之下,大驚失色,原來(lái)很多東西原來(lái)都是懵懵懂懂,不甚了了。因此痛下決心,要弄懂類(lèi)圖中的疑點(diǎn)。

          翻看類(lèi)圖,我發(fā)現(xiàn)有如下是疑點(diǎn)所在:

          l         AttributeProperty的關(guān)系如何?區(qū)別和共同點(diǎn)是什么?

          l         完整的描述一個(gè)操作(Operation),需要多少東西?

          l         類(lèi)之間可以有關(guān)系(Relationship),關(guān)系可以是關(guān)聯(lián)(Association)或者泛化(Generalization),這個(gè)你知道么?

          l         關(guān)聯(lián)有七種:普通關(guān)聯(lián)、遞歸關(guān)聯(lián)、限定關(guān)聯(lián)、或關(guān)聯(lián)、有序關(guān)聯(lián)、三元關(guān)聯(lián)、聚合(聚合和組合),各自有什么含義?用法如何?

          l         關(guān)聯(lián)類(lèi)(Association Class)的含義如何?應(yīng)用場(chǎng)景如何?

          l         類(lèi)的實(shí)例化是對(duì)象,關(guān)聯(lián)的實(shí)例化是什么呢?

          總結(jié)出了這些疑點(diǎn)要?dú)w功于中文UML書(shū)籍的模糊和混亂,或者是翻譯者的語(yǔ)焉不詳。所以讓我在復(fù)習(xí)時(shí)找出了這么多的疑點(diǎn)。

          要查閱資料,解決疑難,并舉例說(shuō)明,起碼需要3,4天的時(shí)間,因此這篇隨筆就作為類(lèi)圖的引文先發(fā)了。也希望志同道合者和我一起研究上面的問(wèn)題。

          后記

          周末了,想偷懶了,結(jié)果適得其反,剛剛完成這篇blog就停電了,后面的幾百字全沒(méi)了。這一點(diǎn)告訴我們,持久化存儲(chǔ)是多么重要啊~


          評(píng)論

          # re: 程序員眼中的UML(3)--類(lèi)圖,就是比你高一點(diǎn)  回復(fù)  更多評(píng)論   

          2005-06-17 23:20 by xiterator
          1) Attribute和Property的關(guān)系如何?區(qū)別和共同點(diǎn)是什么?
          UML2.0中已沒(méi)有UML1.x的Attribute,取而代之的是Property。

          2) 完整的描述一個(gè)操作(Operation),需要多少東西?
          參見(jiàn)UML2.0的Operation的抽象語(yǔ)法圖及其描述。

          3)類(lèi)之間可以有關(guān)系(Relationship),關(guān)系可以是關(guān)聯(lián)(Association)或者泛化(Generalization),這個(gè)你知道么?
          還有依賴(lài)(Dependency)、包關(guān)系(PackageImport/Merge)、。。。

          4)關(guān)聯(lián)有七種:普通關(guān)聯(lián)、遞歸關(guān)聯(lián)、限定關(guān)聯(lián)、或關(guān)聯(lián)、有序關(guān)聯(lián)、三元關(guān)聯(lián)、聚合(聚合和組合),各自有什么含義?用法如何?
          參見(jiàn)關(guān)聯(lián)(Association)元類(lèi)描述、關(guān)聯(lián)所連接的Property的屬性描述。聚合和組合,詳見(jiàn)Franck Barbier, et al. Formalization of the Whole-Part Relationship in the Unified Modeling Language. IEEE TRANSACTIONS ON SOFTWARE ENGINEERING, VOL. 29, NO. 5, MAY 2003

          5)關(guān)聯(lián)類(lèi)(Association Class)的含義如何?應(yīng)用場(chǎng)景如何?

          它與UML2.0的Association所owned Property功能重疊嗎?

          6) 類(lèi)的實(shí)例化是對(duì)象,關(guān)聯(lián)的實(shí)例化是什么呢?

          以M2層的元類(lèi)關(guān)聯(lián)為頂點(diǎn),若從關(guān)聯(lián),同層實(shí)例化,則關(guān)聯(lián)的實(shí)例是關(guān)聯(lián)對(duì)象*。若從關(guān)聯(lián),異層實(shí)例化,則關(guān)聯(lián)的實(shí)例是圖標(biāo)記“線(xiàn)”。
          * 關(guān)聯(lián)對(duì)象本質(zhì)上與圖文法是圖分類(lèi)是類(lèi)似的,在圖文法中,M1層的“線(xiàn)”的類(lèi)型就是關(guān)聯(lián)的類(lèi)似物。而M1層的“線(xiàn)”,在許多OO中沒(méi)有直接表示,只能轉(zhuǎn)換成指針、引用、整體部分關(guān)系。

          # re: 程序員眼中的UML(3)--類(lèi)圖,就是比你高一點(diǎn)  回復(fù)  更多評(píng)論   

          2005-06-18 00:44 by wxb_nudt
          6) 類(lèi)的實(shí)例化是對(duì)象,關(guān)聯(lián)的實(shí)例化是什么呢?

          以M2層的元類(lèi)關(guān)聯(lián)為頂點(diǎn),若從關(guān)聯(lián),同層實(shí)例化,則關(guān)聯(lián)的實(shí)例是關(guān)聯(lián)對(duì)象*。若從關(guān)聯(lián),異層實(shí)例化,則關(guān)聯(lián)的實(shí)例是圖標(biāo)記“線(xiàn)”。
          * 關(guān)聯(lián)對(duì)象本質(zhì)上與圖文法是圖分類(lèi)是類(lèi)似的,在圖文法中,M1層的“線(xiàn)”的類(lèi)型就是關(guān)聯(lián)的類(lèi)似物。而M1層的“線(xiàn)”,在許多OO中沒(méi)有直接表示,只能轉(zhuǎn)換成指針、引用、整體部分關(guān)系。
          --------------------------
          我的理解是:UML2.0中,關(guān)聯(lián)(Association)的實(shí)例化就是鏈接(Link)。鏈接在許多OO語(yǔ)言中表示為指針、引用或者其他的東西,是用來(lái)表示對(duì)象之間的聯(lián)系。
          看得出來(lái)阿飛的回答內(nèi)容更豐富,不過(guò)很多地方看不懂。例如:
          “若從關(guān)聯(lián),同層實(shí)例化”
          “若從關(guān)聯(lián),異層實(shí)例化”
          “* 關(guān)聯(lián)對(duì)象本質(zhì)上與圖文法是圖分類(lèi)是類(lèi)似的”
          這三句不懂。

          # re: 程序員眼中的UML(3)--類(lèi)圖,就是比你高一點(diǎn)  回復(fù)  更多評(píng)論   

          2005-06-23 09:36 by leo
          佩服。
          繼續(xù)努力吧!

          # re: 程序員眼中的UML(3)--類(lèi)圖,就是比你高一點(diǎn)  回復(fù)  更多評(píng)論   

          2005-06-24 19:36 by 歡迎來(lái)到 Java 一下
          我正想學(xué)一下UML,這篇文章對(duì)我有很大啟發(fā)

          # re: 程序員眼中的UML(3)--類(lèi)圖,就是比你高一點(diǎn)  回復(fù)  更多評(píng)論   

          2005-07-01 14:08 by feng
          能解釋
          關(guān)聯(lián)類(lèi)(Association Class)的含義如何?應(yīng)用場(chǎng)景如何?

          # re: 程序員眼中的UML(3)--類(lèi)圖,就是比你高一點(diǎn)  回復(fù)  更多評(píng)論   

          2005-07-01 22:19 by wxb_nudt
          對(duì)不起,最近忙著趕論文,因此我的blog暫時(shí)沒(méi)有更新,這個(gè)系列的文章我也沒(méi)有時(shí)間再寫(xiě)。我想應(yīng)該過(guò)幾天才能繼續(xù)更新。

          # re: 程序員眼中的UML(3)--類(lèi)圖,就是比你高一點(diǎn)  回復(fù)  更多評(píng)論   

          2006-06-23 14:41 by tigertiger
          UML在實(shí)際項(xiàng)目中主要是用來(lái)溝通的,如果很多概念不是很容易的講清楚,不妨嘗試對(duì)它進(jìn)行簡(jiǎn)化(如關(guān)聯(lián)類(lèi)有相應(yīng)的替代方案),簡(jiǎn)單就是美。

          # re: 程序員眼中的UML(3)--類(lèi)圖,就是比你高一點(diǎn)  回復(fù)  更多評(píng)論   

          2006-12-06 15:26 by lattimore[匿名]
          不完整
          主站蜘蛛池模板: 江都市| 南漳县| 平邑县| 鄢陵县| 盱眙县| 诏安县| 南昌市| 兰州市| 宿松县| 北碚区| 嘉义市| 诏安县| 廉江市| 称多县| 沁水县| 东阳市| 政和县| 长岭县| 淮安市| 拜泉县| 井冈山市| 新邵县| 海阳市| 海林市| 四子王旗| 吉隆县| 新乡县| 邹城市| 偏关县| 吴忠市| 宁德市| 博客| 鹤山市| 天镇县| 姚安县| 镶黄旗| 蓬莱市| 佛冈县| 华阴市| 敦煌市| 武安市|