套件是對UML中各模型元素進行組織管理的一種機制,它把概念上相似、有關聯的模型元素(包括靜態的和動態的)組織到一個包中,形成具有各種功能或用途的模組,並且可以控制包中元素的可見性,以方便人們更好的理解複雜的系統。
包圖由包之間的關係組成,透過包之間關係的描述來展現系統各個模組之間的依賴關係。
它類似於作業系統中的資料夾,因此,它在UML中也使用類似的資料夾符號來表示:
在同一層級內,每個包應有一個與其它包不同的名稱。包的名稱有兩種形式:
1,簡單名稱(Simple Name)
簡單名稱僅包含套件的名稱字串,如下面的範例:
2,路徑名稱(Path Name)
在許多情況下,包內又包含其它包,則在外圍使用包內的某個包時可以使用路徑名稱來指明包的路徑,其基本語法為:外部包名稱::本包名稱。下圖中說明「Borrow」這個包是位於「SystemInterface」包內的:
套件是一種分組機制,所以包內可以包含UML中任何元素,如類別、用例、介面、元件、節點等,也可以包含其它包、使用案例圖、協作圖、時序圖等。
包中的元素可見性主要包含三種:
1,公有的(public)
透過在元素前面加上「+」符號來表示,則該元素對所有引入該套件的元素可見。
2,私有的(private)
在元素前面加上“-”符號來表示,則該元素只能被同一個包內的元素可見。
3,保護的(protected)
透過在元素前面加上「#」符號來表示,則該元素對繼承該包的包中元素可見。
下圖給出了包內元素的三種可見性的表示方法:
包含元素三種可見性表示方法
上圖中的三個類別「class A」、"class B"和「class C」的可見度分別是公有的、私有的和保護的。
包之間的關係主要有依賴關係和泛化關係。
1,依賴關係
包之間的依賴關係是指兩個包內的若干元素之間存在著依賴,依賴使用虛線箭頭表示,箭頭由依賴包指向被依賴的包,包之間的依賴關係可以是泛化、實現、導入等。下圖表示的是兩個套件之間的依賴關係:
導入依賴(import dependency)是指允許一個套件中的元素訪問另外一個套件中的元素,可以在虛線箭頭上添加<<import>>構造型來表示。導入依賴不具傳遞性。
2,泛化關係
包之間的泛化關係類似於類別之間的泛化關係。包之間的這種泛化關係是指其中的特殊包可以替換一般包中的元素,並且可以添加新的元素,實際上包之間的泛化也是一種依賴關係。
下圖是包的一些構造型,並使用不同的圖形或標記來表示:
包的構造型
在上圖中,由上到下,由左至右分別表示業務分析模型(Business Analysis Model)、業務系統(Buesiness System)、業務使用案例分析模型(Business Use Case Analysis Model)、網域套件(Domain Package) 、層(Layer)和子系統(Subsystem)。根據需要可以選擇包對應的構造型,能夠快速辨識出包的作用。
在實際建模中可以遵循以下原則:
1,重用等價原則
對於同類可重複使用的模型元素盡量放到一個套件中,不要把可重複使用模型元素和不可重複使用的模型元素混到一個套件中。
2,共同重用原則
把同一個應用要重複使用的多個模型元素放到同一個套件中,以減少對包間的依賴,提高套件的獨立性。
3,共同封閉原則
把可能同時修改,同時維護的模型元素放到一個套件中,以便於今後維護和升級。
4,非循環依賴原則
包之間的依賴關係不要形成循環:即不要出現A依賴B,B又依賴A的現象,或多個包形成循環依賴。
嚴格來講,包圖並不是真正意義上的UML圖,但在模型元素分類、模型結構和程序命名空間中扮演著重要的角色。在實際建模過程中,可以使用下面的做法來繪製包圖:
1,分析系統的模型元素,把概念上或語意上相近的模型元素納入一個包中;
2,對包中的每個元素標識其可見性;
3,確定包與包之間的依賴關係;
4,繪製包圖,並對包圖進行最佳化。
在ProcessOn中,可以在UML圖檔內建立包圖,也可以在流程圖中加入包圖製作時涉及的圖形元素來建立包圖。
1,創建包
直接從編輯器左側的圖形組件區拖曳UML通用圖形中的「包」元素到編輯器右側空白區域,即可完成套件的建立。
使用ProcessOn建立包
2,包的重命名
點擊套件圖形上的“套件名稱”,則可以對套件重新命名。
3,為包添加元素
使用者繪圖時可以直接從編輯器左側的圖形組件區拖曳圖形到編輯器空白區域,即可完成圖形的建立。然後可以選擇圖形後透過編輯器頂部工具列和右側的工具面板對圖形相關屬性進行設定。
為包添加元素
4,添加包之間的聯繫
繪製聯繫的方法是使用快捷鍵“L”,或者在左側圖形組件區的基礎圖形中拖曳“直線”元素到編輯器空白區域,或者直接從一個圖形的一端移動到另一個圖形上即可得到一條線條。如果新增依賴聯繫,則勾選「依賴套件」後,點擊其一端後按住滑鼠左鍵到「被依賴套件」上,放開滑鼠即完成了一個依賴關係的建立。
添加包之間的聯繫
下面舉出包圖的兩個例子,來說明包圖的具體使用方法。
第一個例子反映的是在建模過程中各模型元素的組織情況,使用套件依照系統分析設計的階段來組織各種模型。
建模過程中各模型元素的組織狀況
第二個例子描述了系統開發中各元素的組織情況。 UI中包含了使用的各種使用者介面,BLL中包含了業務邏輯處理的各種類或接口,DAL中包含了資料存取層的相關類,Common中存放的是系統各個模組共用的一些元件或類是內容。
系統開發中各元素的組織狀況