軟體項目實訓及課程設計指導——軟體系統概要設計中的組件設計示例
1、UML技術規範中的UML組件及UML組件圖
UML技術規範中的組件是軟體應用系統的一個物理單元,它代表軟體應用系統中的一個物理實現的功能模塊——在Java技術平臺中一般為一個*.jar包文件。從模型視圖控制器(MVC)系統架構模式的角度來看,在一個軟體應用系統中應該包括有邊界組件、控制組件和實體組件三大部分。如下示圖為Rose UML開發工具軟體中創建UML組件的功能菜單的局部截圖:
UML技術規範中的組件圖是由組件、接口和組件之間的關系所構成的,組件圖一方面能夠幫助軟體應用系統的開發人員理解軟體應用系統的最終結構——因為組件圖可以描述出軟體應用系統的構成組件以及各個組件之間的相互關係;另一方面也使得開發實現工作有一個明確的開展目標和有利於項目開發小組中的其他人員(如幫助文檔的編寫人員)也能夠更好地理解軟體應用系統中的各個功能模塊。
2、UML技術規範中的UML組件之間可以存在有依賴關係
組件之間的依賴關係主要出現在下面的場合:一個組件中的模型元素使用了另一個組件中的模型元素;通過接口實現而產生出依賴聯繫——也就是一個組件對另一個組件的接口進行了具體的實現。UML技術規範中的組件圖中的各個組件之間的依賴關係是採用虛線箭頭表示的,如下示圖所示為某個信息管理系統中的UML組件圖局部截圖,各個組件之間的關係在示圖中也標註完畢。
3、在UML技術規範中所支持的各種主要類型的組件
(1)配置組件(Configurable Component)
配置組件是可執行系統的基礎、並描述了其他組件之間的關係和工作參數,它是一個可執行系統必須的組件。如在J2EE系統平臺中的各種*.xml的配置文件等。如下示圖為某個Web應用系統項目中的部署描述文件web.xml內容的局部截圖:
(2)工作產品組件(Work Product Components)
工作產品組件是在軟體開發階段使用的組件,是配置組件的來源——如數據文件和資料庫表、源程序文件等。它們並不直接構成可執行系統,而是軟體系統開發過程中的產品。
(3)可執行組件(Executive Program Components)
可執行組件構成可運行系統的最終組成結果,如Windows平臺中的動態連結庫DLL文件(COM+、DLL、ActiveX等形式)、可執行的EXE程序文件、Java平臺中的JAR包文件(各種形式的JavaBeans)等等都是執行組件。如下示圖為某個Web應用項目部署到應用伺服器Tomcat中的部署過程的局部截圖:
4、利用UML組件圖可以進一步細化軟體應用系統的系統架構設計結果
(1)明確軟體應用系統分層設計中的各個主要的組件
為了能夠細化軟體應用系統的架構設計結果,軟體應用系統的設計人員需要進一步對軟體應用系統中的架構設計結果進行橫向分塊——設計出體現軟體應用系統分層中的各個組件,並畫出最終的UML組件圖。
而對於一個軟體應用系統來說,在縱向方向從下至上一般可以分為如下不同的組件模塊:
1)持久層中的數據連接組件:負責連接軟體應用系統中的資料庫系統;
2)持久層中的持久實體組件:這些實體組件負責系統中的各種需要持久化的數據封裝;
3)持久層中的數據訪問接口組件:定義和規範系統中的各個資料庫表的數據訪問操作的方法(增、刪、改、查)和要求;
4)持久層中的數據訪問實現組件:具體完成數據訪問接口中所定義的各個數據訪問操作的功能實現--也就是具體地完成對資料庫表的增、刪、改、查的功能;
5)業務邏輯層中的業務實體組件:這些實體組件負責對系統中與業務處理有關的各種業務數據的封裝;
6)業務邏輯層中的業務處理接口組件:定義和規範系統中的各個業務邏輯處理的規則和要求;
7)業務邏輯層中的業務功能處理組件:具體完成業務處理接口中所定義的各個業務邏輯的功能實現;
8)表示層中的控制調度組件:響應表示層中視圖組件的請求、並對業務處理功能組件進行訪問和獲得處理後的結果,最後轉發到特定的視圖組件中顯示輸出;
9)表示層中的實體組件:這些實體組件負責對用戶的各種請求數據的封裝;
10)表示層中的視圖組件:它們是系統中的各種界面可視元素的集合,負責系統的界面顯示和請求數據的收集、校驗等功能;
11)其他輔助或者工具類型的組件:完成系統中的各種全局和通用的輔助性功能。
(2)採用UML組件圖表現出對軟體應用系統中的橫向分塊的設計結果
UML組件的圖示表示形式定義為一個大矩形左嵌兩個小矩形,並在大矩形框內標註出該組件的名字。在UML技術規範的組件視圖中一般包含有組件、接口和組件之間的依賴關係。下圖所示為體現銀行帳戶信息管理系統中的各個組件及關係的組件圖,它充分體現出該軟體應用系統分層設計中的橫向分塊設計結果——各個組件是依據它們在該軟體應用系統中的職責劃分的、並遵守面向對象封裝和隔離的基本原則完成對各個組件模塊的設計。
當然,軟體應用系統中的各個組件之間的關係不應該出現「多對多」形式的依賴關係。因為,如果組件彼此之間的依賴關係比較複雜時,則意味著該軟體應用系統的分層設計結果不是太良好,軟體應用系統的設計人員此時需要對軟體應用系統再進一步地「縱向分離」和「橫向分塊」。