動態

詳情 返回 返回

UML之包與包圖 - 動態 詳情

瞭解UML的人都知道UML中也有包的概念,包在UML中作用與面向對象編程語言中類似,它是管理對象的工具,也是解決對象同名衝突的手段。
在UML中,包的表示圖形是一個左上角帶標籤的矩形,而包名可以標註於矩形中央(如下圖所示,包名Package1位於矩形中央)或者左上角的標籤之內。

將包名置於包圖形中央時,通常會影響包中所包含內容的描畫,因而在需要體現包中的內容時,通常將包名置於左上角的標籤之中,如下圖所示。該示例表示包Pacakge2中包含一個類Book及其實例myBook。

不同工具對包名顯示位置的具體實現與支持會稍有差異,例如在下圖中,包名被置於矩形左上角而非標籤之中,雖然這種描畫包圖的方式一般也不會給閲讀者帶來困惑,但還是建議儘量使用標準的描畫形式。

包中可包含的對象較多,除在上圖中包含的類與類實例之外,諸如用例、時序圖、活動圖等UML對象均可隸屬於某個包。事實上,如果我們在使用UML對象時如果不指定其隸屬的包,則這些UML元素被認為隸屬於一個默認包。
在不同的場景下,一個包中包含的元素可能只有一個,也可能有許多。當包中包含的元素比較多而其中部分元素需要描畫的細節較多要佔據較大的空間時,包圖會變得巨大無比且難以描畫和閲讀。此時,UML為我們提供了兩種方式解決問題。一種方式是在包圖中以列表形式列出其所包含的元素,然後在包圖外另外描述這些元素的細節;另一種方式是將在包圖外描述細節的元素通過符號“⊕”與包圖進行關聯。這兩種形式的包圖分別如下所示:


在分析與設計中,一個良好的結構,應當使用不同層次的包對所有元素進行組織與管理,這就又引入了一個新的概念“子包”。顧名思義,子包就是存在於另一個包中的包。例如在下圖中,包Package3中包含了一個名為Package4的子包。

通過上面的講述,包在UML中的用法應當已經清楚了。但我們應進一步思考,包的本質是什麼?包其實是一個命名空間,同一命名空間要求其元素具有唯一且可區分的名稱,所以同一包下的元素不可以重名而不同包中的元素可以具有相同的名稱。
(附:我們可以進一步思考,在UML中,除了包,還有哪些元素其實也是命名空間?)

user avatar Dengsiyan 頭像
點贊 1 用戶, 點贊了這篇動態!
點贊

Add a new 評論

Some HTML is okay.