内聚:一個子產品内各個元素彼此結合的緊密程度
耦合:一個軟體結構内不同子產品之間互連程度的度量
(一)這是判斷設計好壞的标準,主要是面向OO的設計,主要是看類的内聚性是否高,偶合度是否低。
高内聚:類與類之間的關系而定。高,意思是他們之間的關系要簡單,明了,不要有很強的關系,不然,運作起來就會出問題。一個類的運作影響到其他的類。
低耦合:類内部的方法而言。把程式的功能盡量分散,别在一個類裡隻寫一個或很好的方法,因為那樣會給你的調試等帶來很多問題。出了錯你都不知道在什麼地方。
(二)系統的各個子產品盡可能具有較大的獨立性,換句話說,希望這樣設計軟體結構,使得每個子產品完成一個相對獨立的特定子功能,并且和其他子產品之間的關系很簡單,以便能友善地把不同場合下寫成的程式子產品組合成軟體系統。衡量子產品獨立性的定性标準是内聚(一個子產品内各個元素彼此結合的緊密程度)和耦合(一個軟體結構内不同子產品之間互連程度的度量)。高内聚、低耦合的子產品是設計時追求的目标。
(三)“子產品獨立性指每個子產品隻完成系統要求的獨立子功能,并且與其他子產品的聯系最少且接口簡單,兩個定性的度量标準――耦合性和内聚性。
耦合性也稱塊間聯系。指軟體系統結構中各子產品間互相聯系緊密程度的一種度量。子產品之間聯系越緊密,其耦合性就越強,子產品的獨立性則越差。子產品間耦合高低取決于子產品間接口的複雜性、調用的方式及傳遞的資訊。
無直接耦合;資料耦合;标記耦合;控制耦合;公共耦合;
内容耦合(低――高); 1無直接耦合;2資料耦合指兩個子產品之間有調用關系,傳遞的是簡單的資料值,相當于進階語言的值傳遞;3标記耦合指兩個子產品之間傳遞的是資料結構,如進階語言中的數組名、記錄名、檔案名等這些名字即标記,其實傳遞的是這個資料結構的位址;
4控制耦合指一個子產品調用另一個子產品時,傳遞的是控制變量(如開關、标志等),被調子產品通過該控制變量的值有選擇地執行塊内某一功能。; 5公共耦合指通過一個公共資料環境互相作用的那些子產品間的耦合。公共耦合的複雜程式随耦合子產品的個數增加而增加。6内容耦合:這是最高程度的耦合,也是最差的耦合。
當一個子產品直接使用另一個子產品的内部資料,或通過非正常入口而轉入另一個子產品内部。内聚性又稱塊内聯系。指子產品的功能強度的度量,即一個子產品内部各個元素彼此結合的緊密程度的度量。若一個子產品内各元素(語名之間、程式段之間)聯系的越緊密,則它的内聚性就越高。
偶然内聚;邏輯内聚;時間内聚;通信内聚;順序内聚;
功能内聚(低――高)1偶然内聚指一個子產品内的各處理元素之間沒有任何聯系。 2邏輯内聚指子產品内執行幾個邏輯上相似的功能,通過參數确定該子產品完成哪一個功能。3時間内聚:把需要同時執行的動作組合在一起形成的子產品為時間内聚子產品。4通信内聚指子產品内所有處理元素都在同一個資料結構上操作(有時稱之為資訊内聚),或者指各處理使用相同的輸入資料或者産生相同的輸出資料。5順序内聚指一個子產品中各個處理元素都密切相關于同一功能且必須順序執行,前一功能元素輸出就是下一功能元素的輸入。6功能内聚:這是最強的内聚,指子產品内所有元素共同完成一個功能,缺一不可。與其他子產品的耦合是最弱的。耦合性與内聚性是子產品獨立性的兩個定性标準,将軟體系統劃分子產品時,盡量做到高内聚低耦合,提高子產品的獨立性,為設計高品質的軟體結構奠定基礎。”
有個例子很容易明白:一個程式有50個函數,這個程式執行得非常好;然而一旦你修改其中一個函數,其他49個函數都需要做修改,這就是高耦合的後果。
一旦你了解了它,你編寫概要設計的時候設計類或者子產品自然會考慮到“高内聚,低耦合”。