Stories

Detail Return Return

UML之集合類型 - Stories Detail

無論何時當我們要使用一個多值對象時,我們必須要清楚兩個問題,一是這些值的順序重要嗎?二是允許重複值的存在嗎?在編程語言中還會有其他的明確的信息,在UML中,只需明確這兩個問題的答案即可確定對應的集合類型。

1.Set

Set是一個不允許存在重複值且未排序的集合。
例如一個騎行活動中,有許多騎手參加。每個騎手在一個騎行活動中只可能出現一次,即任一個特定的騎手在騎行活動中不可能重複出現;每個參與騎行活動的騎手之間沒有什麼特定或要求的順序,他們是平等的。所以參與一個騎行活動的騎手不重複且無序,這些騎手就構成了一個Set。在類圖中可表示如下:

在UML中,Set並沒有專有的表示符號,它通過在多重性後添加表示不允許重複只能唯一的約束“{unique}”來表達。“unique”用於對集合中元素的唯一性進行約束,“{unique}”還有等價形式“{isunique=true}”。

2.Ordered Set

Ordered Set是一個不允許存在重複值且排序的集合。
例如一本書的作者可能有多人,而每位作者對一本書的貢獻是不同的,所以書籍在出版時,一方面不會將一個作者列出來兩次,另一方面作者的排序是非常重要的,即一本書的作者是不重複且有序的集合,他們構成了一個Ordered Set。以下類圖中的屬性author表達了這種特性。

在UML中,Ordered Set沒有專有的表示符號,它通過在多重性後添加表示不允許重複並排序的的約束“{ordered, unique}”來表達。其中“ordered”表示集合是有序的,“{order}”也有一個等價形式“{isorder=true}”。

3.Bag

Bag是一個允許存在重複值且未排序的集合。
例如一個購物車中的商品,同一件商品可能會有多個,並且這些商品之間沒有順序可言,這些商品構成了一個Bag。
在UML中,Bag也沒有專有的表示符號,它通過在多重性後添加表示允許重複(不唯一)、無序(不排序)的約束“{nonUnique, unordered}”來表達。在一些UML工具中,通常只支持添加“{unique}”和“{order}”約束,而缺省情況下,即未添加相關約束則表示相反的情況。故對於一個多重性條目,如果它是Bag,則不添加“{unique}”和“{order}”約束即可。
以下類圖中屬性items體現了它是一個Bag。

4.Sequence

Sequence是一個允許存在重複值且排序的集合,又稱為Ordered Bag。
例如一個騎行活動的線路規劃由多個點構成,而線路並不排斥兩次甚至多次經過同一地點,但在線路上這些地點是有嚴格順序的,所以騎行線路上的這些點構成了一個Sequence。在以下類圖中屬性itinerary描述了騎行線路。

在UML中,Sequence也沒有專有的表示符號,它通過在多重性後添加表示不唯一且有序的約束來表達,如前所述,不標明唯一約束則表示不唯一,故僅使用約束“{ordered}”即可。或者,也可直接使用約束“{sequence}”或“{seq}”,在某些情況下,“{stream}”表達了相似的含義。
可以看到,在UML中集合類型的兩個關鍵特性就是唯一性與有序性,這兩個特性的不同組合對應了不同的集合類型。我們可以歸納如下表:
image

Add a new Comments

Some HTML is okay.