系統設計及模塊劃分依據

系統就是問題域,系統劃分過程就是對問題分解過程。實際設計中常常根據業務分類(目的職責環節職能)的劃分模塊,好比客戶有不少個部門,每一個部門用的功能放在一個模塊中,這樣設計的好處是業務部門容易上手。html

模塊劃分依據: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.net

http://blog.csdn.net/lyc_daniel/article/details/9212235設計

http://www.csframework.com/cs-framework-intro.htmhtm

http://www.cnblogs.com/kzloser/archive/2012/07/06/2578960.htmlblog

相關文章
相關標籤/搜索