系統就是問題域,系統划分過程就是對問題分解過程。實際設計中經常根據業務分類(目的職責環節職能)的划分模塊,比如客戶有很多個部門,每個部門用的功能放在一個模塊中,這樣設計的好處是業務部門容易上手。
模塊划分依據:http://www.ibm.com/developerworks/cn/rational/1312_wanggb_arch/
所謂模塊獨立性即:不同模塊相互之間的聯系盡可能少,盡可能減少公共的變量和數據結構。每個模塊盡可能的在邏輯上獨立,功能上完整單一,數據上與其他模塊無太多的耦合
模塊獨立性的度量:高內聚低耦合,數據接口簡單,可擴展可維護可復用,結構精簡。
模塊獨立性的度量之一:內聚性
一個模塊內部各成分之間相互關聯的強度。
設計目標:高內聚(一個模塊的所有成分都直接參與 並縣城對於完成同一功能來說都是最基本的)
內聚性越高,模塊獨立性越強,由低向高的內聚方式為:
巧合內聚
邏輯內聚
時間內聚
過程內聚
通信內聚
信息內聚
功能內聚
(1)巧合內聚
模塊內各分部間無聯系, 例:
view source
print?
1 MOVE O TO R
2 READ FILE F
3 MOVE S TO T
模塊中的三個語句沒有任何聯系,
缺點:可理解性差, 可修改性差。
(2)邏輯內聚
把幾種相關功能(邏輯上相似的功能)組合在一模塊內, 每次調用由傳給模塊的參數確定執行哪種功能。
缺點:增強了耦合程序(控制耦合),不易修改,效率低
(3)時間內聚
模塊完成的功能必須在同一時間內執行,這些功能只因時間因素關聯在一起。如
初始化系統模塊
系統結束模塊
緊急故障處理模塊
(4)過程內聚
模塊內各處理成分相關,且必須以特定次序執行
(5)通信內聚
模塊內各部分使用相同的輸入數據,或產生相同的輸出結果
(6)信息內聚
信息內聚指模塊寫成多個功能,各個功能都在同一數據結構上操作,每個功能有唯一入口。如對同一個數據庫的查找-添加-刪除-修改模塊
(7)功能內聚
模塊僅包括為完成某個功能所必須的所有成分(模塊所有成分共同完成一個功能,缺一不可)
模塊獨立性的度量之二
耦合性是模塊間相互依賴程度的度量,耦合的強弱取決於模塊間接口的復雜程度,進入或訪問一個模塊的點,以及通過接口的數據
耦合性越高,模塊獨立性越弱, 耦合強度依賴的因素:
一模塊對另一模塊的引用
一模塊向另一模塊傳遞的數據量
一模塊施加到另一模塊的控制數量
模塊間接口的復雜度
(1)非直接耦合
兩個模塊沒有直接關系,模塊獨立性最強。
(2)數據耦合
一個模塊調用另一模塊時,被調用模塊的輸入輸出都是簡單的數據,性松散耦合
(3)標記耦合
如兩個模塊通過傳遞數據結構(不是簡單的數據,而是記錄,數組等)加以聯系,或都與一個數據結構有關系,則稱這兩個模塊間存在標記耦合
信息情況是一個數據結構,圖中模塊都與此數據結構產生依賴關系,它們之間也是標記耦合
(4)控制耦合
一模塊通過開關量、標志、名字等控制信息,明顯地控制另一模塊
控制耦合增加了理解和編程的復雜性,調用模塊必須知道被調用模塊的內部邏輯,增加了相互依賴
去除模塊間控制耦合的方法:
1)將被調用模塊內的判定上移到調用模塊中進行
2)被調用模塊分解成若干單一功能模塊。
(5)外部耦合
一組模塊均與同一外部環境關聯(例如: I/O模塊與特定的設備、模式和通信 協議關聯),它們之間便存在外部耦合。
外部耦合必不可少,但是這種模塊數目應盡量少。
(6)公共耦合
一組模塊引用同一個共用數據區(也稱全局數據區,公共數據環境)
公共數據區指:
全局數據結構
共享通訊區
內存公共覆蓋區等
公共耦合存在的問題:
軟件可理解性降低: 模塊間存在錯綜復雜的聯系
軟件可維護性差: 修改變量名或屬性困難
軟件可靠性差: 公共數據區及全程變量無保護措施
慎用公共數據區和全程變量
(7)內容耦合
一模塊直接訪問另一模塊的內部信息(程序代碼或數據),最不好的內容耦合形式
發生內容耦合的情形:
一模塊直接訪問另一模塊的內部數據
一模塊不通過正常入口轉到另一模塊內
兩模塊有一部分代碼重疊
一模塊有多個入口
如何降低耦合度?
1)如模塊必須存在耦合,選擇適當的耦合類型
原則:
盡量使用數據耦合
少用控制耦合
限制公共耦合的范圍
堅決避免使用內容耦合
2)降低模塊間接口的復雜性。
http://m.blog.csdn.net/article/details?id=50121411
http://blog.csdn.net/lyc_daniel/article/details/9212235
http://www.csframework.com/cs-framework-intro.htm
http://www.cnblogs.com/kzloser/archive/2012/07/06/2578960.html