實(shí)例解析UML對(duì)象圖用法
本文和大家重點(diǎn)討論一下UML對(duì)象圖的概念,一個(gè)UML對(duì)象圖主要集中在特定的對(duì)象實(shí)例和其槽,以及實(shí)例之間的連接。相信通過過本文的學(xué)習(xí)你對(duì)UML對(duì)象圖的概念有深刻的認(rèn)識(shí)。
UML中的UML對(duì)象圖
1UML對(duì)象圖
UML對(duì)象圖用于描述被建模系統(tǒng)的模型元素實(shí)例之間的結(jié)構(gòu)化信息,其所表達(dá)的是特定時(shí)間被建模系統(tǒng)在結(jié)構(gòu)上的部分或是全部視圖。一個(gè)UML對(duì)象圖主要集中在特定的對(duì)象實(shí)例和其槽,以及實(shí)例之間的連接。同一個(gè)類圖所對(duì)應(yīng)的UML對(duì)象圖可以有多個(gè),多個(gè)UML對(duì)象圖合在一起共同展示了隨著時(shí)間的推移,在不同時(shí)間點(diǎn)系統(tǒng)的對(duì)象狀態(tài)。與類圖的抽象性相比,UML對(duì)象圖是具體的,其通常用來提供所對(duì)應(yīng)類圖的結(jié)構(gòu)示例,或者作為所對(duì)應(yīng)類圖的測(cè)試用例。應(yīng)當(dāng)說每一幅UML對(duì)象圖都有其側(cè)重點(diǎn),因而,每一幅UML對(duì)象圖應(yīng)當(dāng)只側(cè)重表達(dá)其所側(cè)重內(nèi)容。
在UML中,對(duì)象實(shí)例是采用實(shí)例規(guī)范(instancespecification參見1.1)來表示的,對(duì)象實(shí)例所具有的結(jié)構(gòu)化特性(feature)是采用槽(slot,參見1.2)來表示的,對(duì)象實(shí)例與對(duì)象實(shí)例之間的關(guān)系則是采用連接(link,參見1.3)來表示。與類圖相對(duì)比,實(shí)例對(duì)應(yīng)于類對(duì)象,槽對(duì)應(yīng)于類屬性的實(shí)例,而連接則對(duì)應(yīng)于類與類之間關(guān)聯(lián)的實(shí)例。有了這些對(duì)應(yīng)關(guān)系,在掌握了類圖的情況下,就更加的容易理解和掌握UML對(duì)象圖了。
圖1.1是UML對(duì)象圖相關(guān)建模元素在UML規(guī)范中的語法定義,后面在講解具體的概念時(shí)我們會(huì)更加具體的說明。
圖1.1類圖元素在UML規(guī)范中的語法
1.1實(shí)例規(guī)范
實(shí)例規(guī)范(instancespecification,參見USS的7.3.22節(jié))是用于表示被建模系統(tǒng)中的實(shí)例實(shí)體,它描述了模型實(shí)例實(shí)體的部分或是全部。我們平時(shí)編程時(shí),口頭上所說的實(shí)例,在UML中就稱之為實(shí)例規(guī)范。實(shí)例規(guī)范所描述的內(nèi)容可能包括:
1)一個(gè)或是多個(gè)實(shí)例所屬的分類器。在實(shí)例規(guī)范中一個(gè)分類器如果是類,那么它所描述的是這個(gè)類的對(duì)象;如果一個(gè)分類器是關(guān)聯(lián),那么它所描述的是這個(gè)關(guān)聯(lián)的一個(gè)連接。
2)結(jié)構(gòu)化特性的值。結(jié)構(gòu)化特性對(duì)應(yīng)于類的屬性用于描述類的結(jié)構(gòu)組成,在類圖中行為化特性是采用操作(operation)來表示的,而在UML對(duì)象圖中并不表示類的行為特性。在實(shí)例規(guī)范中,我們并不是一定要表示所有實(shí)例的所有結(jié)構(gòu)化特性。
3)如何計(jì)算、推導(dǎo)或是構(gòu)造實(shí)例。
一個(gè)實(shí)例規(guī)范用于指示被建模系統(tǒng)中存在的實(shí)體,在實(shí)例規(guī)范中其信息可以是不完整的,其只側(cè)重于表達(dá)所關(guān)心的信息。從圖1.1可以得到以下信息:
1)一個(gè)實(shí)例規(guī)范是一個(gè)可打包元素,因?yàn)橐粋€(gè)InstanceSpecification“是一個(gè)”PackageableElement。
2)一個(gè)實(shí)例規(guī)范可以包含任意多個(gè)的槽,這從其slots組成屬性可以看出。
3)一個(gè)實(shí)例規(guī)范最多可以包含一個(gè)值規(guī)范(valuespecification,參見USS的7.3.54節(jié)),這從其specification組成屬性可以看出。簡(jiǎn)單地說,值規(guī)范就是表示對(duì)于一個(gè)對(duì)象的可取值范圍是什么。
4)一個(gè)實(shí)例規(guī)范可以包含任意多個(gè)的分類器,這從其classifiers關(guān)聯(lián)屬性可以看出。
一個(gè)實(shí)例規(guī)范可以包括槽,而每一個(gè)槽實(shí)際上是一個(gè)結(jié)構(gòu)化特性的表達(dá)。實(shí)例規(guī)范是一個(gè)或是多個(gè)分類器的對(duì)象實(shí)例,因此,它是遵循分類器所定義的結(jié)構(gòu)或是(和)行為規(guī)范的。一個(gè)沒有槽的實(shí)例規(guī)范,并不是表示它沒有結(jié)構(gòu)化的特性,因?yàn)橛锌赡苣切┙Y(jié)構(gòu)特性并不是這一UML對(duì)象圖所關(guān)心的。
需要注意的是實(shí)例規(guī)范并不是被建模系統(tǒng)運(yùn)行時(shí)的精確描述,而只是一個(gè)示例,其只是表示了相關(guān)的結(jié)構(gòu)信息。我們不能從實(shí)例規(guī)范中推導(dǎo)任何的運(yùn)行時(shí)對(duì)象結(jié)構(gòu)方面的詳細(xì)信息。
圖1.2是一個(gè)使用實(shí)例規(guī)范的一個(gè)例子,其中每一個(gè)矩形框都是一個(gè)實(shí)例規(guī)范。圖1.3是其所對(duì)應(yīng)的類圖。其中my_car是一個(gè)不帶有槽的實(shí)例,而其它的Window實(shí)例都是帶有兩個(gè)槽。你會(huì)注意到,實(shí)例規(guī)范的表示方法與類圖中的類是相似的,但也有以下的區(qū)別:
1)其名稱下面具有一根下劃線,在線上標(biāo)明了這一實(shí)例的名稱以及其所屬的分類器),實(shí)例名與分類器之間采用‘:’進(jìn)行分割,而如果有多個(gè)所屬分類器,那么分類器之間采用逗號(hào)分開。圖1.2中所有的實(shí)例規(guī)范都只有一個(gè)分類器,比如my_car所屬分類器是Car類,也就是說my_car是Car類的一個(gè)實(shí)例,而front_left、front_right、rear_left和rear_right都分別是Window類的一個(gè)實(shí)例。
2)槽對(duì)應(yīng)于類中的屬性,但其在實(shí)例規(guī)范中都會(huì)有值。如果沒有值那么通常不用在實(shí)例規(guī)范中表示出來。
圖1.2使用實(shí)例規(guī)范的一個(gè)例子
圖1.3圖1.2UML對(duì)象圖所對(duì)應(yīng)的類圖
圖1.2是一個(gè)相對(duì)簡(jiǎn)單的UML對(duì)象圖,而在現(xiàn)實(shí)應(yīng)用中,我們可以通過多個(gè)UML對(duì)象圖來展現(xiàn)同樣的實(shí)例在不同時(shí)間點(diǎn)時(shí)各實(shí)例的狀態(tài),不同的狀態(tài)是通過槽的不同值來表達(dá)的。比如,我們可以采用UML對(duì)象圖來表示一個(gè)算法,而對(duì)于同一算法在不同時(shí)間點(diǎn)各實(shí)例的狀態(tài)(表現(xiàn)在槽的值不同)采用不同的UML對(duì)象圖來表示。
1.2槽
槽(slot,參見USS的7.3.48節(jié))是用于表示實(shí)例規(guī)范中被建模實(shí)體結(jié)構(gòu)特征的值,槽對(duì)應(yīng)于類圖中類的屬性,是類屬性的實(shí)例,而屬性是類的結(jié)構(gòu)化特性的描述。從圖1.1中可以看出,一個(gè)槽具有三個(gè)屬性:
1)definingFeature表示這一槽所對(duì)應(yīng)的結(jié)構(gòu)化特性是什么。
2)owningInstance表示這一槽是屬于哪一個(gè)實(shí)例規(guī)范的。
3)value指示槽的值是多少。
圖1.2中每一個(gè)Window實(shí)例規(guī)范都有兩個(gè)槽。其中name槽的definingFeature應(yīng)當(dāng)就是窗口名稱,顯然name槽的owningInstance是各Window實(shí)例,而value對(duì)于每一個(gè)Window實(shí)例就不同了,有的叫“frontleft”,也有的叫“rearleft”。相類似地,is_automatic槽用于表示每一個(gè)車窗是不是自動(dòng)的。
1.3連接
在UML規(guī)范中沒有專門用于介紹連接(link)的章節(jié),但在實(shí)例規(guī)范章節(jié)中有所提及。其定義了實(shí)例規(guī)范之間的關(guān)系,從類圖的角度來看,一個(gè)連接就是一個(gè)關(guān)聯(lián)關(guān)系的實(shí)例。圖1.2中示例了Car類實(shí)例規(guī)范與Window類實(shí)例規(guī)范之間的四個(gè)連接。對(duì)比圖1.2和圖1.3我們可以發(fā)現(xiàn),圖1.2中的四個(gè)連接都是圖1.3中關(guān)聯(lián)關(guān)系的實(shí)例。
2總結(jié)
UML對(duì)象圖用于表示被建模系統(tǒng)中不同對(duì)象在不同時(shí)間點(diǎn)的結(jié)構(gòu)狀態(tài)快照,其所表達(dá)的是類圖中更為細(xì)化的結(jié)構(gòu)化信息。當(dāng)我們掌握了類圖后,學(xué)習(xí)UML對(duì)象圖就相對(duì)的簡(jiǎn)單了許多。
【編輯推薦】
- UML對(duì)象圖概念及其作用解析
- 揭秘UML對(duì)象圖和類圖的六大關(guān)系
- 九種UML模型圖及其功能詳解
- UML對(duì)象圖的表示法和用途
- 解析UML對(duì)象圖建模技術(shù)及類圖和對(duì)象圖區(qū)別