内聚耦合類型及特征
軟體開發中,對于子產品設計,盡可能遵循高内聚低耦合的設計;基本的内聚和耦合類型如下:
耦合
- 内容耦合
内容耦合: 是最緊的耦合程度,一個子產品直接通路另一子產品的内容,則稱這兩個子產品為内容耦合
- 公共耦合
公共耦合: 一組子產品都通路同一個全局資料結構。
- 外部耦合
一組子產品都通路同一全局簡單變量,而且不通過參數表傳遞該全局變量的資訊,則稱之為外部耦合。
外部耦合和公共耦合很像,差別就是一個是簡單變量,一個是複雜資料結構
- 控制耦合
子產品之間傳遞的不是資料資訊,而是控制資訊例如标志、開關量等,一個子產品控制了另一個子產品的功能。
從控制耦合開始,子產品的資料就放在自己内部了,不同子產品之間通過接口互相調用。
- 标記耦合
- 資料耦合
調用子產品和被調用子產品之間隻傳遞簡單的資料項參數。相當于進階語言中的值傳遞
- 非直接耦合
兩個子產品之間沒有直接關系,它們之間的聯系完全是通過主子產品的控制和調用來實作的。耦合度最弱,子產品獨立性最強。
子子產品無需知道對方的存在,子子產品之間的聯系,全部變成子子產品和主子產品之間的聯系。
内聚
- 功能内聚
如果一個子產品内所有處理元素完成一個,而且僅完成一個功能,則稱為功能内聚。
功能内聚是最高程度的内聚。但在軟體結構中,并不是每個子產品都能設計成一個功能内聚子產品。
- 順序内聚
如果一個子產品内處理元素和同一個功能密切相關,而且這些處理元素必須順序執行,則稱為順序内聚。
- 通信内聚
如果一個子產品中所有處理元素都使用同一個輸入資料和(或)産生同一個輸出資料,稱為通信内聚。
- 過程内聚
如果一個子產品内的處理元素是相關的,而且必須以特定的次序執行,稱為過程内聚。
過程内聚與順序内聚的差別是: 順序内聚中是資料流從一個處理單元流到另一個處理單元,而過程内聚是控制流從一個動作流向另一個動作。
- 時間内聚
如果一個子產品包含的任務必須在同一段時間内執行,稱為時間内聚。也稱為瞬時内聚
- 邏輯内聚
如果子產品完成的任務在邏輯上屬于相同或相似的一類,稱為邏輯内聚
- 偶然内聚
如果一個子產品由完成若幹毫無關系的功能處理元素偶然組合在一起的,就叫偶然内聚