什么是包
包可直接理解為命名空間,文件夾,是用來組織圖形的封裝,包圖可以用來表述功能組命名空間的組織層次。
•在面向對象軟件開發的視角中,類顯然是構建整個系統的基本構造塊。但是對於龐大的應用系統而言,其包含的類將是成百上千,再加上其間“阡陌交縱”的關聯關系、多重性等,必然是大大超出了人們可以處理的復雜度。這也就是引入了“包”這種分組事物構造塊。
•包的作用是:
1)對語義上相關的元素進行分組;
2)定義模型中的“語義邊界”;
3)提供配置管理單元;
4)在設計時,提供並行工作的單元;
5)提供封裝的命名空間,其中所有名稱必須惟一
在VS2010中,就用文件夾直接代表包
在EA中可以想下面這樣新建包
•名稱:每個包都必須有一個與其它包相區別的名稱
•擁有的元素:在包中可以擁有各種其它元素,包括類、接口、構件、節點、協作、用例,甚至是其它包或圖
可見性
•包的可見性:
用“+”來表示“public”,
用“#”來表示“protected”,
用“-”來表示“private”
上圖解釋
•首先根據《use》關系,可以發現Client包使用Server包,Server包使用System.Data.SqlClient包,結合其元素,不難得知Client負責Order(訂單)的輸入,並通過Server來管理用戶的登錄(LoggingService)和數據庫存儲(DataBase),而Server包還將通過.NET的SQL Server訪問工具包來實現與數據庫的實際交互。
•接着再看兩個《import》,從包的命名和其所屬的元素不難發現Rule負責處理一些規則,並引用一個具體的窗體(Window),而Client包則通過引用Rule來實現整個窗體和表單的顯示、輸入等。並且還將暫存Order(訂單)信息。
•最后來看包的泛化關系,GUI有兩個具體實現,一個是針對C/S的WindowsGUI,一個是實現B/S的WebGUI。
依賴關系
•《use》使用關系:是一種默認的依賴關系,說明客戶包(發出者)中的元素以某種方式使用提供者包(箭頭指向的包)的公共元素,也就是說客戶包依賴於提供者包
•《import》引用關系:最普遍的包依賴類型,說明提供者包(箭頭指向的包)的命名空間(包本身代表命名空間)將被添加到客戶包(發出者)的命名空間中,客戶包中的元素也能夠訪問提供者包的所有公共元素
•《access》訪問關系:只想使用提供者包中的元素,而不想將其命名空間合並則應使用該關系
•《trace》追溯關系:想表示一個包到另一個包的歷史發展,則需要使用《trace》關系來表示
包圖繪制原則
•最小化包之間的依賴,最小化每個包中的public、protected元素的個數,最大化每個包中private元素個數
•在建模時應該避免包之間的循環依賴,也就是不能夠包含相互依賴的情況,對於這種情況應進行分析:
例子描述
•分析系統工作流程:
1)通過Internet連接到股票信息服務器,獲取實時的股票信息,並存入數據庫中。
2)根據用戶的輸入和選擇,從數據庫中獲取相應的信息,展現在屏幕中。
3)在數據的展現過程中,將需要繪制大量的圖表
•根據功能模塊組織包:
包 |
分析與功能 |
.NET支持包 |
SocketClient |
負責連接Internet服務器,獲取實時股票信息 |
System.Net.Sockets |
DataAccess |
負責從數據庫讀寫實時股票信息 |
System.Data.Sqlclient |
UI |
負責響應用戶輸入和選擇,並展現信息 |
System.Windows.Forms |
GraphicGenerate |
負責根據數據庫的信息生成相應的圖表 |
System.Drawing |
包之間的依賴關系
包圖使用說明
對成組元素建模
•每個包都應該是在概念、語義上相互接近的元素組成;
•對每個包找出應標記為公共的元素,但應盡可能地少;
•一般使用默認的《use》構造型,在映射到編程時考慮明確《import》構造型;
•考慮采用泛化來對特殊包進行建模。
•在表示這種模型時,注意只標明對每個包都起核心作用的元素;另外也可以標識每個包的文檔標記值,以使其更加清晰
對體系結構建模
•對體系結構進行建模(程序分層),是包圖更有意義的一個用途。體系結構是一個軟件系統的核心邏輯結構
•常用的體系結構 模式包括分層、MVC、管道、黑板、微內核等,而在應用軟件中,分層和MVC