<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    MDA之路

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

    程序員眼中的UML(4)

    --類圖釋疑之一,AttributeProperty之區(qū)別

    上一篇中提出了很多問題,其中最令人費(fèi)解的可能就是AttributeProperty之區(qū)別了吧。我在網(wǎng)絡(luò)上尋找良久也沒有發(fā)現(xiàn)好的解釋,反而發(fā)現(xiàn)了很多混亂的解釋和用法。因此,依靠OMG網(wǎng)站上的UML規(guī)范以及自己的理解,整理出了這篇文章。

    UML中的AttributeProperty之區(qū)別

    在很多人的腦海中,Attribute就是類的屬性,Property呢?好像也是類的屬性?因此有很多人不加區(qū)別的統(tǒng)一稱為類的屬性,尤其是在寫中文文章的時(shí)候。這種心理是典型的鴕鳥心態(tài),眼不見為凈。其實(shí)稍微用腳想一下就知道,事實(shí)肯定不是這樣的,UML中既然發(fā)明了這兩個(gè)術(shù)語,顯然不是用來冗余的。它們之間肯定有著千絲萬縷的聯(lián)系與區(qū)別。

    各種各樣的面向?qū)ο笳Z言、各種組件技術(shù)、模板技術(shù)、Web Service技術(shù),其中大部分涉及到了“屬性”這個(gè)概念,而其英文術(shù)語則常常是AttributeProperty或者Field。很多人一概稱之為“屬性”,有的地方確實(shí)可以不加區(qū)分,但有的地方卻是差之毫厘、謬以千里。我對(duì)于這些紛紛擾擾的技術(shù)和術(shù)語也很苦惱,但是我們至少可以通過UML中的這兩個(gè)術(shù)語的解釋找到一個(gè)可以參考的標(biāo)準(zhǔn)。無論如何,UML是面向?qū)ο蠹夹g(shù)的集大成者和事實(shí)上的標(biāo)準(zhǔn)。

    UML1.4中的AttributeProperty

    造成AttributeProperty理解混亂的罪魁禍?zhǔn)子幸话胧?/SPAN>OMG自己,因?yàn)樵?/SPAN>UML1.4以前的規(guī)范中,Property并沒有當(dāng)作一個(gè)標(biāo)準(zhǔn)的術(shù)語出場(chǎng),而是叫做Element Properties。其定義如下[1]

    Many kinds of elements have detailed properties that do not have a visual notation. In addition, users can define new element properties using the tagged value mechanism. A string may be used to display properties attached to a model element. This includes properties represented by attributes in the metamodel as well as both predefined and user-defined tagged values.

    許多模型元素含有詳細(xì)的特性(properties),它們并沒有可視化的符號(hào)。另外,用戶可以使用標(biāo)記值(tagged value)機(jī)制定義新的模型元素特性。一個(gè)字符串可以被用來顯示附著在模型元素上面的特性。它包括在元模型中用來表示特性(properties)的屬性(attribute)以及預(yù)定義和用戶自定義的標(biāo)記值。

    從上面的定義可以看出,OMG的本意是將Property作為表示模型元素特性的統(tǒng)一術(shù)語。模型元素是UML所有建模元素的頂層父類和原子成分,Class也是一種模型元素。因此Property是用來修飾一部分模型元素的,而不僅僅是用來修飾Class的。另外一層含義是,Property包含了Attriburetagged value,它的概念范圍應(yīng)該比Attribute要大。

    再來看看AttributeUML1.4規(guī)范中的定義[2]

    An attribute is a named slot within a classifier that describes a range of values that instances of the classifier may hold. In the metamodel, an Attribute is a named piece of the declared state of a Classifier, particularly the range of values that Instances of the Classifier may hold.

    一個(gè)屬性(attribute)是類元(classifier)中的一個(gè)命名的槽(named slot),它用來描述此類元的實(shí)例可能擁有的取值范圍。在元模型中,一個(gè)屬性是一個(gè)類元的可命名的聲明狀態(tài),尤其表示了這個(gè)類元的實(shí)例可能擁有的取值范圍。
             
    由此可知,Attribute是與Classifier相關(guān)聯(lián)的術(shù)語,它比Property的影響范圍要小。ClassClassifier的子類,因此Attribute也可以表示Class的屬性。從上面的定義還可以看出,Attribute可以是Classifier的實(shí)例的命名的槽。對(duì)于Class來說,其實(shí)例就是ObjectObject的槽就是對(duì)象的屬性值槽。因此,Attribute是可以作為對(duì)象的屬性的。而Property似乎沒有這一層的含義。按MOF(元對(duì)象設(shè)施,OMG的另一個(gè)規(guī)范,后面會(huì)有詳細(xì)解釋)的模型層次劃分,Attribute涉及的模型層從M2M0,而Property似乎只是M2層的概念。

    很客觀的說,UML1.4中對(duì)于這兩個(gè)術(shù)語并沒有很清晰的定義,但是其區(qū)別還是顯而易見的。Attribute應(yīng)該是UML1.4中的寵兒,而Property連一個(gè)單獨(dú)的術(shù)語都沒有撈到。誰也沒想到在UML2.0中風(fēng)云突變,Attribute從類圖中消失了,而Property堂而皇之入主中原。

    UML2.0拋棄Attribute了么?

    當(dāng)我看到UML2.0的類圖元模型的那一剎那,第一個(gè)感覺就是“Attribute哪兒去了?”下面是UML2.0中的Core::Basic包中的類圖元模型[3]

    image002.jpg
    從圖中可以清晰的看到,
    Class僅僅聚合了兩個(gè)元素:PropertyOperation。而Attribute卻從類圖元模型中消失了。

    先看看此元模型中Property的定義[4]

    A property is a typed element that represents an attribute of a class.

    一個(gè)特性(property)是一個(gè)有類型的元素(typed element),它代表了一個(gè)類中的一個(gè)屬性(Attribute)。

    哇,這個(gè)定義是不是在搞笑?各位別急,別忘記了UML2.0中的類圖元模型可不止一個(gè),它的類圖元模型是由三個(gè)分散的部分組成的。除了上面提到的Core::Basic::Class Diagram之外,還有Core::Constructs::Class DiagramClass Diagram from Kernel Package。下面再來看看Core::Constructs::Class Diagram[5]

    image004.jpg
    可以看出這個(gè)圖與上面的不同之處是加入了
    ClassifierAssociationClassPropertyOperation三巨頭還在。這個(gè)圖對(duì)于Property的定義幾乎可以解開我心中的疑惑了:

    A property is a structural feature of a classifier that characterizes instances of the classifier. Constructs::Property merges the definition of Basic::Property with Constructs::StructuralFeature.

    When a property is owned by a class it represents an attribute. In this case it relates an instance of the class to a value or set of values of the type of the attribute.

    When a property is owned by an association it represents a non-navigable end of the association. In this case the type of the property is the type of the end of the association.

    Property represents a declared state of one or more instances in terms of a named relationship to a value or values. When a property is an attribute of a classifier, the value or values are related to the instance of the classifier by being held in slots of the instance. When a property is an association end, the value or values are related to the instance or instances at the other end(s) of the association (see semantics of Association).

    一個(gè)property是一個(gè)類元(classifier)的結(jié)構(gòu)化特征,它用來刻畫這個(gè)類元的實(shí)例。Constructs包中的PropertyConstructs::Property)結(jié)合了Basic::PropertyConstructs::StructuralFeature的定義。

    當(dāng)一個(gè)property被一個(gè)class擁有時(shí)它代表一個(gè)attribute。在這種情況下,它將一個(gè)class的實(shí)例聯(lián)系到一個(gè)具體值或者一組值,這些值的類型符合attribute的類型。

    當(dāng)一個(gè)property被一個(gè)連接(association)擁有時(shí)它代表一個(gè)非導(dǎo)向的連接端。在這種情況下這個(gè)property的類型就是這個(gè)association的連接端的類型。

    Property表達(dá)了一個(gè)或者一些實(shí)例的聲明狀態(tài),它使用了一個(gè)命名的關(guān)系將實(shí)例連接到一個(gè)值或者一組值。當(dāng)一個(gè)property是一個(gè)classifier中的attribute的時(shí)候,它通過將值儲(chǔ)存在這個(gè)classifier的實(shí)例的槽(slot)中來給一個(gè)實(shí)例賦值。當(dāng)一個(gè)property是一個(gè)關(guān)聯(lián)端(association end)的時(shí)候,它的值被關(guān)聯(lián)到association另一個(gè)關(guān)聯(lián)端的實(shí)例。

    從上面的定義中可以看出,Property同時(shí)代表了AttributeAssociation end,如果它的owningAssociation不為空,則表明它屬于一個(gè)Association,這時(shí)它代表了一個(gè)關(guān)聯(lián)端;如果它的owningAssociation為空,則表明它不屬于一個(gè)Association,這時(shí)它代表了類的一個(gè)Attribute。同時(shí),Property繼承了UML1.4中的定義,它可以用來表示標(biāo)記值(Tagged Value)。

    那么Attribute呢?UML2.0徹底拋棄它了么?不是的,它的定義依然存在[6]

    A structural feature of a classifier that characterizes instances of the classifier. An attribute relates an instance of a classifier to a value or values through a named relationship.

    一個(gè)類元的結(jié)構(gòu)特征,它能夠刻畫這個(gè)類元的實(shí)例。一個(gè)Attribute通過一個(gè)命名的關(guān)系將一個(gè)類元的實(shí)例聯(lián)系到一個(gè)或者一組具體值。

    比起UML1.4中的定義,這個(gè)定義要簡(jiǎn)潔多了,Attribute這里僅僅指一個(gè)類元的結(jié)構(gòu)特征,可以將類元的實(shí)例聯(lián)系到一個(gè)或者一組具體值。而沒有提到實(shí)例的槽(slot)等等。我猜想,這是因?yàn)?/SPAN>UML2.0中已經(jīng)把Attribute作為Property的一個(gè)子集了,所以關(guān)于實(shí)例的槽(slot)等等的具體賦值方法,都?xì)w結(jié)到Property的定義中解釋了。

    另外一點(diǎn)值得注意的是,Attribute的定義來自于術(shù)語表,而沒有在元模型圖中出現(xiàn)。而Property出現(xiàn)在元模型圖中,并且都做了詳細(xì)而具體的解釋。這一點(diǎn)可以看出,UML強(qiáng)化Property,弱化Attribute的決心。

    AttributeProperty的總結(jié)

    這一節(jié)對(duì)AttributeProperty作一個(gè)小結(jié),基于目前最新的UML2.0規(guī)范:

    l         總體上來說,AttributeProperty的子集,Property會(huì)在適當(dāng)?shù)臅r(shí)機(jī)表現(xiàn)為Attribute

    l         Property出現(xiàn)在類圖的元模型中,代表了Class的所有結(jié)構(gòu)化特征;Attribute沒有出現(xiàn)在元模型中,它僅僅在Class的概念中存在,沒有相應(yīng)的語法了;

    l         Property有詳細(xì)的定義和約束,而Attribute沒有詳細(xì)的定義,因此也不能用OCL寫出其約束。

    l         PropertyAttribute都是M2層的概念。在M1層,它們的實(shí)例是具體類的屬性;在M0層,它們的實(shí)例的實(shí)例是具體對(duì)象的槽中存儲(chǔ)的值。

    上面多次提到了MOF的四層模型,這應(yīng)該是屬于MDA范疇中的概念,下面這一小節(jié)給出一個(gè)例子,希望能夠說明AttributeProperty及其實(shí)例在不同的模型層中扮演的角色。

    元模型圖、模型圖、對(duì)象圖

    MOF的四層模型分別是:元元模型層(M3)、元模型層(M2)、模型層(M1)、運(yùn)行時(shí)(M0)。其中元元模型層包含了定義建模語言所需的元素;元模型層定義了一種建模語言的結(jié)構(gòu)和語法;模型層定義了一個(gè)具體的系統(tǒng)的模型;運(yùn)行時(shí)包含了一個(gè)模型的對(duì)象在運(yùn)行時(shí)的狀態(tài)等。

    本文涉及到的有M2M1M0層,下面給出一個(gè)例子,首先是M2層,它可以定義一個(gè)建模語言的結(jié)構(gòu)和語法,例如:

    image005.jpg
    這是一個(gè)簡(jiǎn)要的元模型圖,它表示
    ClassPropertyOperation組成,這張圖符合UML2.0的概念,但是我們也可以這樣畫:

    image006.jpg
    這樣一來,
    Class包含三種元素:AttributeAssociationEndOperation,這樣我們就創(chuàng)建了一個(gè)新的元模型,也可以說創(chuàng)建了一個(gè)小的新建模語言。雖然它不符合UML2.0規(guī)范。

    M1層模型就是我們通常簡(jiǎn)稱的“模型”,它是系統(tǒng)的標(biāo)準(zhǔn)化表示,一般用建模語言來表示一個(gè)軟件系統(tǒng),例如下面的汽車和人的系統(tǒng):

    image007.jpg
    其中
    Car類表示汽車的模型,它有兩個(gè)屬性pricetype,另外還有一個(gè)關(guān)聯(lián)端owner(表示車主),這些都是Property的實(shí)例。Person類也有兩個(gè)屬性agename,還有一個(gè)關(guān)聯(lián)端car。可以看出,M1層模型中的元素都是M2層模型元素的實(shí)例,例如:

    CarPersonClass的實(shí)例;pricetypeagename以及carowner都是Property的實(shí)例;run()drive()都是Operation的實(shí)例。

    所謂“建模”實(shí)際上就是利用M2層定義的元模型作為建模語言來定義M1層的模型。

    再來看看M0層,汽車和人系統(tǒng)的運(yùn)行時(shí)對(duì)象圖如下:

    image008.jpg
    因?yàn)椴粦B(tài)熟悉對(duì)象圖,所以其中可能有疏漏,不過其意義是一目了然的。其中具體的對(duì)象屬性就是
    Property的實(shí)例的實(shí)例了。例如type=mediummediumM1層模型中type的實(shí)例值,typeM2層中Property的實(shí)例值。

    后記

    總算將這一篇寫完了,在群里面和阿飛仔細(xì)討論了好久,真的是非常辛苦,但是我覺得弄清楚了AttributeProperty的區(qū)別是非常有意義的。它們所涉及的范圍很廣,可謂知十而聞一。這篇似乎不能夠叫“程序員眼中的UML了”,因?yàn)樯婕傲撕枚?/SPAN>MDA的知識(shí),而且離代碼很遠(yuǎn)。不過我盡量寫得清楚通俗一點(diǎn),文中出現(xiàn)的術(shù)語都作了解釋,希望能夠讓大家看懂。

    文中的術(shù)語翻譯來自于《UML參考手冊(cè)》[7],因?yàn)?/SPAN>UML很多術(shù)語的翻譯不統(tǒng)一,因此我用了這本很著名的UML書的譯法。同時(shí)注明了英文原文。

    參考文獻(xiàn)

    1.  UML1.4-01-09-67文檔 289

    2.  UML1.4-01-09-67文檔 80

    3.  UML 2.0 Infrastructure Final Adopted Specifcation03-09-15文檔109

    4.  UML 2.0 Infrastructure Final Adopted Specifcation03-09-15文檔111

    5.  UML 2.0 Infrastructure Final Adopted Specifcation03-09-15文檔123

    6.  UML 2.0 Infrastructure Final Adopted Specifcation03-09-15文檔17

    7.  UML參考手冊(cè)


    評(píng)論

    # re: 程序員眼中的UML(4)--類圖釋疑之一,Attribute和Property之區(qū)別  回復(fù)  更多評(píng)論   

    2005-06-21 14:12 by sumtec
    僅討論一下英譯中,參考文獻(xiàn)中:
    ... an Attribute is a named piece of the declared state of a Classifier ...

    這里的a named piece of的翻譯方法不太認(rèn)同。我認(rèn)為a named piece of the declared state 和 a large cup of coffee 從語法結(jié)構(gòu)上可能使相似的,仔細(xì)一點(diǎn)說就是:
    1、可以去掉中間的形容詞named和large:
    a piece of the declared state
    a cup of coffee
    2、of前面的是一個(gè)量詞,而非名詞:
    a piece of cake,一塊蛋糕 (容許我換一個(gè)簡(jiǎn)單一點(diǎn)的東西,當(dāng)然,這已經(jīng)用作“很簡(jiǎn)單的事情”了)
    a cup of coffee,一杯咖啡,而非咖啡的一個(gè)杯子
    3、在此基礎(chǔ)上加上named,是不是應(yīng)該指:
    這是一“piece”的聲明狀態(tài),而這一“piece”是已命名的。
    4、稍微調(diào)整一下順序,說得好聽點(diǎn)是否可以說成:
    一個(gè)已聲明的命名狀態(tài)?

    總之我認(rèn)為翻譯成“一個(gè)屬性是 …… 一個(gè)命名的片”是不可接受的,好比“This special combo includes a cup of coffee”被翻譯成“這個(gè)套餐包含 …… 一個(gè)杯子”一樣,讓人覺得不爽。

    # re: 程序員眼中的UML(4)--類圖釋疑之一,Attribute和Property之區(qū)別  回復(fù)  更多評(píng)論   

    2005-06-21 18:19 by wxb_nudt
    嗯,我又查閱了那個(gè)文檔,并搜索了named piece,找到了兩個(gè)地方,另一個(gè)地方是這樣的:
    In the metamodel, a Method is a declaration of a named piece of behavior in a Classifier and realizes one (directly) or a set (indirectly) of Operations of the Classifier.
    可以看出,這個(gè)地方的piece確實(shí)是屬于a piece of這個(gè)詞組。
    所以你的意見是正確的。
    文中的翻譯應(yīng)該是:
    An attribute is a named slot within a classifier that describes a range of values that instances of the classifier may hold. In the metamodel, an Attribute is a named piece of the declared state of a Classifier, particularly the range of values that Instances of the Classifier may hold.

    一個(gè)屬性(attribute)是類元(classifier)中的一個(gè)命名的槽(named slot),它用來描述此類元的實(shí)例可能擁有的取值范圍。在元模型中,一個(gè)屬性是一個(gè)類元的可命名的聲明狀態(tài),尤其表示了這個(gè)類元的實(shí)例可能擁有的取值范圍。

    并且為了方便讀者,我已經(jīng)修改了原文,對(duì)于你的建議,表示萬分的感謝!!!!

    # re: 程序員眼中的UML(4)--類圖釋疑之一,Attribute和Property之區(qū)別  回復(fù)  更多評(píng)論   

    2007-05-18 23:25 by tt
    good

    # re: 程序員眼中的UML(4)--類圖釋疑之一,Attribute和Property之區(qū)別  回復(fù)  更多評(píng)論   

    2007-05-18 23:41 by bingo
    An attribute is a named slot within a classifier that describes a range of values that instances of the classifier may hold. In the metamodel, an Attribute is a named piece of the declared state of a Classifier, particularly the range of values that Instances of the Classifier may hold.

    類元(classifier)中被命名的槽(named slot)稱作屬性(attribute),它描述了類元中實(shí)例的取值范圍。在元模型中,屬性表示一種類元的聲明狀態(tài),且該狀態(tài)已經(jīng)被命名,尤其是該類元中實(shí)例的取值范圍已經(jīng)被命名。

    (我不太懂技術(shù),從純粹翻譯的角度理解。原譯文翻譯腔太濃,已讀就知道是翻譯過來的。同時(shí)“它”有歧義,且最后一句話不太連貫。僅作交流)

    主站蜘蛛池模板: 精品熟女少妇AV免费观看| 一本色道久久88综合亚洲精品高清| 国产一级淫片a免费播放口之| 亚洲精品字幕在线观看| 亚洲香蕉久久一区二区三区四区| 四虎国产精品成人免费久久| 亚洲精品在线免费观看| 亚洲乱码国产一区网址| 亚洲一区二区三区不卡在线播放| 国产A∨免费精品视频| 久久午夜免费视频| 亚洲色婷婷六月亚洲婷婷6月| 亚洲一日韩欧美中文字幕在线| 青青操在线免费观看| 国产成人免费福利网站| 亚洲最大视频网站| 中文在线观看永久免费| 波多野结衣久久高清免费 | 你懂的免费在线观看网站| 四虎免费大片aⅴ入口| 老司机亚洲精品影院| v片免费在线观看| 嫩草影院免费观看| 99人中文字幕亚洲区| 国产精品玖玖美女张开腿让男人桶爽免费看| 无码人妻精品中文字幕免费东京热| 久久久久亚洲av毛片大| 亚洲大码熟女在线观看| 99精品视频在线观看免费播放| 亚洲国产高清在线一区二区三区 | 99视频在线看观免费| 亚洲日本一区二区一本一道| 91在线亚洲综合在线| 人妻丰满熟妇无码区免费| 亚洲中文字幕丝袜制服一区| 亚洲AV无码精品国产成人| 国产桃色在线成免费视频| 亚洲伊人久久大香线蕉苏妲己| 国产午夜无码片免费| 亚洲精品网站在线观看不卡无广告| 亚洲hairy多毛pics大全|