天天看點

子產品獨立性的度量(耦合度和内聚度)子產品獨立性的度量

子產品獨立性的度量

從兩個方面來度量子產品之間的獨立性,這兩個概念是子產品的耦合度和子產品的内聚度

耦合度

耦合度分為: 獨立耦合 , 資料耦合 , 控制耦合 , 公共耦合 和 内容耦合

獨立耦合

指兩個子產品之間彼此完全獨立,沒有直接聯系,他們之間的聯系僅僅在于他們同屬于一個軟體系統或共有一個上層子產品,這是耦合程度最低的一種(系統中不可能所有的子產品都屬于這種關系)

資料耦合

資料耦合指兩個子產品彼此交換資料,如: 一個子產品的輸出資料是另一個子產品的輸入資料,或者一個子產品帶參數調用另一個子產品,下層子產品又傳回參數,在一個系統中,這種耦合是不可避免的,資料耦合的聯系程度也較低,這種耦合是不可避免的

控制耦合

在調用過程中,若兩個子產品間傳遞的不是資料而是控制參數,則子產品間的關系為控制耦合,控制耦合不是一種必須存在的耦合

當被調用子產品收到控制資訊作為輸入參數時,說明該子產品内部存在多個并列的邏輯路徑,即有多個功能,控制變量從多個功能中選擇所要執行的部分,控制耦合是可以完全避免的

  • 找出子產品調用時所用的一個或多個控制變量
  • 在被調子產品中根據控制變量找出所有的流程
  • 将每一個流程分解為一個獨立的子產品
  • 将原被調子產品中的流程選擇部分移到上層子產品,變為調用判斷

公共耦合

公共耦合又稱為公共環境耦合或者資料區耦合,如果多個子產品對同一個資料區進行存取操作,則它們之間的關系就是公共耦合,公共耦合最弱的一種是:兩個子產品共享一個資料變量,一個子產品隻向其中寫資料,另一個子產品隻從其中讀資料

注意的是: 公共耦合很強的時候,關系會變得錯綜負責,難以控制,系統的可靠性下降,可了解性,可維護性變差

内容耦合

内容耦合是耦合程式最高的一種形式,若一個子產品直接通路另一個子產品的内部代碼或資料,即出現内容耦合,内容耦合會嚴重破壞子產品的獨立性和系統的結構化,代碼互相糾纏,運作錯綜複雜,應盡量避免

内容耦合往往變現為以下幾種形式:

  • 一個子產品通路另一個子產品的内部代碼或資料
  • 一個子產品不通過正常入口而轉到另一個子產品的内部(如使用goto語句或者jmp指令直接進入另一個子產品的内部)
  • 兩個子產品有一部分代碼重疊
  • 一個子產品有多個入口(這意味着一個子產品有多種功能)

    子產品劃分時,盡量使用書資料耦合,少用控制耦合(轉成資料耦合),限制公共耦合的範圍,完全不用内容耦合

内聚度

内聚度是子產品内部各成分(語句或者語句段)之間的聯系,子產品内部各成分聯系越緊,其内聚度越大,子產品獨立性越強,系統越易了解和維護,良好的内聚度的子產品應能較好的滿足資訊局部化的原則,功能完整單一子產品的高内聚必然能導緻子產品的低耦合度,理想情況是,一個子產品隻使用局部資料變量,完成一個功能

由弱到強的順序,内聚讀可分為7類:

偶然内聚

塊中的各個任務(通過語句或指令來實作的)之間沒有什麼有意義的聯系,他們之是以能構成一個子產品完全是偶然的原因

偶然内聚的子產品有很多缺點:由于子產品内沒有實質性的聯系,很可能在某種情況下一個調用子產品需要對它修改而别的子產品不需要,這時就很難處理,同時這種子產品的含義也不易了解,甚至難以為他去一個何時的名字,偶然内聚的子產品也難于測試,空間允許下,不應該使用偶然内聚

邏輯内聚

一個子產品完成的任務在邏輯上屬于相同或相似的一類(例如,用一個子產品産生各種類型的輸出)

如: 子產品A,B,C的功能相似但不相同,如果把他們合并成一個子產品ABC,則這個子產品就為邏輯内聚,因為他們是由于邏輯上相似而發生聯系的,邏輯聯系是一種較弱的聯系,當X,Y,Z調用合成的ABC子產品時,需要判别執行不同功能的哪一部分

邏輯耦合存在的問題

  • 修改困難,調用子產品中有一個要對其改動,還要考慮到其他調用子產品
  • 子產品内需要增加開關,判斷是誰調用
  • 實際上每次調用隻執行子產品中的一部分,其他部分也被裝入了記憶體,因而效率不高

時間内聚

時間内聚是指一個子產品中包含的任務需要在同一時間内執行(如初始化,結束等所需操作)

時間内聚和偶然内聚,邏輯内聚一樣,都屬于低内聚度類型

過程内聚

如果一個子產品内的各個處理元素是相關的,而且必須按固定的次序執行,這種内聚就稱為過程内聚,這種内聚往往表現為次序的流程

通信内聚

若一個子產品中的各處理元素需引用共同的資料(同一資料項,資料區或檔案),則稱其元素間的聯系為通信内聚,通信内聚的各部分是借助共同使用的資料聯系在一起的,故有較好的可了解性,通信内聚和過程内聚屬于中内聚度型子產品

順序内聚

若一個子產品内的各處理元素關系密切,必須按規定的處理次序執行,則這樣的子產品為順序内聚型,在順序内聚子產品内,後執行的語句或語句段往往依賴先執行的語句或語句段,以先執行的部分為條件,由于子產品内各處理元素間存在着這種邏輯聯系,是以順序内聚子產品的可了解性很強,屬于高内聚度型子產品

功能耦合

功能耦合是内聚度最高的一種子產品類型,如果子產品僅完成一個單一的功能,且該子產品的所有部分是實作這一功能所必需的,沒有多餘的語句,則該子產品為功能内聚型,功能内聚子產品的結構緊湊,界面清晰,易于了解和維護,因而可靠性強,又由于其功能單一,故複用率高,是以他是子產品劃分時應追求的一種子產品類型

在子產品設計時力争做到高内聚,并且能夠辨識出低内聚的子產品,加以修改使用提高内聚度并降低子產品之間的耦合度

  • 設計功能單一的子產品
  • 控制使用全局資料
  • 子產品間盡量傳遞資料型變量

    構件(子產品)設計的最終目的是将資料模型,架構模型,界面模型變為可以操作的軟體,構件設計的詳細程度可以根據項目的具體情況而定,在概要設計的時候,可以根據具體要求對各個子產品進行詳細設計,如果某項目開發過程中不存在詳細設計過程,則可以将構件設計得盡可能詳細,這樣概要設計和詳細設計合為一個過程

繼續閱讀