圖 1.1 類圖元素在UML規範中的語法
1.1 實例規範
實例規範(instance specification,參見USS的7.3.22節)是用於表示被建模系統中的實例實體,它描述了模型實例實體的部分或是所有。咱們平時編程時,口頭上所說的實例,在UML中就稱之爲實例規範。實例規範所描述的內容可能包括:
1)一個或是多個實例所屬的分類器。在實例規範中一個分類器若是是類,那麼它所描述的是這個類的對象;若是一個分類器是關聯,那麼它所描述的是這個關聯的一個鏈接。
2)結構化特性的值。結構化特性對應於類的屬性用於描述類的結構組成,在類圖中行爲化特性是採用操做(operation)來表示的,而在對象圖中並不表示類的行爲特性。在實例規範中,咱們並非必定要表示全部實例的全部結構化特性。
3)如何計算、推導或是構造實例。
一個實例規範用於指示被建模系統中存在的實體,在實例規範中其信息能夠是不完整的,其只側重於表達所關心的信息。從圖 1.1能夠獲得如下信息:
1)一個實例規範是一個可打包元素,由於一個InstanceSpecification「是一個」PackageableElement。
2)一個實例規範能夠包含任意多個的槽,這從其slots組成屬性能夠看出。
3)一個實例規範最多能夠包含一個值規範(value specification,參見USS的7.3.54節),這從其specification組成屬性能夠看出。簡單地說,值規範就是表示對於一個對象的可取值範圍是什麼。
4)一個實例規範能夠包含任意多個的分類器,這從其classifiers關聯屬性能夠看出。
一個實例規範能夠包括槽,而每個槽其實是一個結構化特性的表達。實例規範是一個或是多個分類器的對象實例,所以,它是遵循分類器所定義的結構或是(和)行爲規範的。一個沒有槽的實例規範,並非表示它沒有結構化的特性,由於有可能那些結構特性並非這一對象圖所關心的。
須要注意的是實例規範並非被建模系統運行時的精確描述,而只是一個示例,其只是表示了相關的結構信息。咱們不能從實例規範中推導任何的運行時對象結構方面的詳細信息。
圖 1.2是一個使用實例規範的一個例子,其中每個矩形框都是一個實例規範。圖 1.3是其所對應的類圖。其中my_car是一個不帶有槽的實例,而其它的Window實例都是帶有兩個槽。你會注意到,實例規範的表示方法與類圖中的類是類似的,但也有如下的區別:
1)其名稱下面具備一根下劃線,在線上標明瞭這一實例的名稱以及其所屬的分類器),實例名與分類器之間採用‘:’進行分割,而若是有多個所屬分類器,那麼分類器之間採用逗號分開。圖 1.2中全部的實例規範都只有一個分類器,好比my_car所屬分類器是Car類,也就是說my_car是Car類的一個實例,而front_left、front_right、rear_left和rear_right都分別是Window類的一個實例。
2)槽對應於類中的屬性,但其在實例規範中都會有值。若是沒有值那麼一般不用在實例規範中表示出來。
圖 1.2 使用實例規範的一個例子
圖 1.3 圖 1.2對象圖所對應的類圖
圖 1.2是一個相對簡單的對象圖,而在現實應用中,咱們能夠經過多個對象圖來展示一樣的實例在不一樣時間點時各實例的狀態,不一樣的狀態是經過槽的不一樣值來表達的。好比,咱們能夠採用對象圖來表示一個算法,而對於同一算法在不一樣時間點各實例的狀態(表如今槽的值不一樣)採用不一樣的對象圖來表示。
1.2 槽
槽(slot,參見USS的7.3.48節)是用於表示實例規範中被建模實體結構特徵的值,槽對應於類圖中類的屬性,是類屬性的實例,而屬性是類的結構化特性的描述。從圖 1.1中能夠看出,一個槽具備三個屬性:
1)definingFeature表示這一槽所對應的結構化特性是什麼。
2)owningInstance表示這一槽是屬於哪個實例規範的。
3)value指示槽的值是多少。
圖 1.2中每個Window實例規範都有兩個槽。其中name槽的definingFeature應當就是窗口名稱,顯然name槽的owningInstance是各 Window實例,而value對於每個Window實例就不一樣了,有的叫「front left」,也有的叫「rear left」。相相似地,is_automatic槽用於表示每個車窗是否是自動的。
1.3 鏈接
在UML規範中沒有專門用於介紹鏈接(link)的章節,但在實例規範章節中有所說起。其定義了實例規範之間的關係,從類圖的角度來看,一個鏈接就是一個關聯關係的實例。圖 1.2中示例了Car類實例規範與Window類實例規範之間的四個鏈接。對比圖 1.2和圖 1.3咱們能夠發現,圖 1.2中的四個鏈接都是圖 1.3中關聯關係的實例。
2 總結
對象圖用於表示被建模系統中不一樣對象在不一樣時間點的結構狀態快照,其所表達的是類圖中更爲細化的結構化信息。當咱們掌握了類圖後,學習對象圖就相對的簡單了許多。
致讀者
若是你想參與討論UML相關的話題,請加入UML技術圈(
g.51cto.com/UltraUML)。