為每種內聚和耦合舉例
參考:https://www.cnblogs.com/xiaym896/p/5400677.html
學習中補上些自己的理解。
一、內聚
1、偶然內聚:模組的各成分之間沒有關聯,只是把分散的功能合併在一起。
//程式1 double d1,d2,d3; if(d1 > d2) d3 = d1; else d3 = d2; //程式2 int i1,i2,i3; if(i1 > i2) i3 = i1; else i3 = i2;
以上分別是int double型求最值,沒有關聯,而都是進行同樣的操作求max,故把他們進行合併成一個模組。(可用c++的模板)
2、邏輯內聚:邏輯上相關的功能被放在同一模組中。
例:A模組實現的是將對應的人員資訊傳送給技術部,人事部和財政部,決定傳送給哪個部門是輸入的控制標誌決定的。
人員資訊傳送(任務)的結果是“傳送給技術部,人事部和財政部”,他們在邏輯上都是要進行處理人員資訊,故屬於類似的一類。所以,模組A中就是邏輯內聚。
3、時間內聚:模組完成的功能必須在同一段時間內執行。(但這些功能只是因為時間因素才有關聯。)
例:class類的建構函式的初始化資訊,必須得是同一段時間內執行。
4、過程內聚:模組內部的處理成分是相關的,而且這些處理必須以特定的次序進行執行。
例:使用者進行購買商品(先付後用)場景中,使用者訂單生效的前提是他得付款。故對於購買支付這個模組,其內部得是:付款->訂單生效。
5、通訊內聚:模組的所有成分都操作同一資料集或生成同一資料集。
例:模組A實現將傳入的Date型別資料轉換成String型別,以及將Date型別資料插入資料庫,這兩個操作都是對“Date型別資料”而言的。模組A中就是通訊內聚。
6、順序內聚:模組的各個成分和同一個功能密切相關,而且一個成分的輸出作為另一個成分的輸入。
例:查詢使用者的密碼場景中,使用者輸入的賬戶ID是到資料庫中查詢使用者密碼的輸入。沒有使用者ID怎麼查其對應的密碼呢?
7、功能內聚:模組的所有成分對於完成單一的功能都是必須的。(成分沒有多餘)
例:模組A實現將新註冊的使用者資訊(使用者名稱,密碼,個性簽名)全部轉換成String型別並插入資料庫。模組A中就是功能內聚。