系統設計及模塊划分依據


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

模塊划分依據: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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM