模塊
模塊是由一組語句組成,並且被標識符組成的邊界元素所界定。類,方法都是可以稱之為一個模塊。
內聚與耦合
內聚是指一個模塊內的交互程度,耦合是指模塊間的交互程度。我們需要盡力做到高內聚低耦合。
內聚:
內聚分為如下幾類:
1)偶然內聚:一個模塊里各個成分之間沒有什么關系,就是很隨意的拼湊了在了一起,被封裝成了一個模塊。
例子:
Public void funA(){
If(a>b)
c = a – b;
System.out.prinltn(“今天天氣真不錯”);
}
缺點:1.可讀性差(一會這個一會那個多亂呀)
2.可維護性差(這種一個功能干好多沒關系的事情,維護是不可能維護的2333)
解決:
這個解決辦法十分的簡單,就是將那些不相關的成分,都分別拆解開來形成各自的模塊,每個模塊都只是執行一個任務。
2)邏輯內聚:幾個邏輯上相關的功能被封裝到同一個模塊里面,然后由調用函數傳入控制的參數來確定調用哪個功能。
缺點:1.接口不容易理解,因為傳入控制參數至就會添加參數說明否則誰知道參數。
2.修改起來不好辦,如果添加或者刪除邏輯功能會麻煩。
3.增加耦合度
解決:把那幾個邏輯相關的拆解成獨立的模塊。
3)時間內聚:如果一些功能僅僅是因為在同一時間執行,僅僅是由於時間關系就被封裝到了一個模塊。如一些初始化模塊。
缺點:1.成分間的關系不強,但與其它模塊相關度很高。
4)過程內聚:把一些列的過程行為放到一起形成一個模塊。
例子:
缺點:模塊復用性低,多個行為活動封裝到一起,別的函數要是用到還要重新寫,導致復用性差。
解決:還是拆開。
5)通信內聚:因為行為活動使用數據參數相同,所以就將他們封裝到一個模塊。
例子:
缺點:不可復用
6) 功能內聚:每個模塊僅僅是完成一個行為互動,這也體現了單一職責。
例如:判斷大小,計算加法
好處:1.復用性高
2.錯誤隔離
7)信息內聚:一個模塊它可以執行很多的行為,但是每個行為都有自己入口,每個行為與其他行為獨立,並且都在統一數據結構上執行。
耦合
1)內容耦合:一個模塊不經調用直接引用另一個模塊的內容。
例子:
缺點:這種耦合標明,一個模塊與另一個模塊聯系十分緊密,如果另一個模塊改變,這個模塊必定收到很大影響,以至於無法正常使用。
解決:
2)公共耦合:多個模共同引用一個全局數據
缺點:全局變量修改會導致引用模塊都收影響,不易於維護。
3)控制耦合:一個模塊通過一個控制參數來控制另外一個模塊,它與邏輯內聚有關系。
缺點: 1.模塊見依賴不獨立
2.復用性低
解決:取消控制參數,將B內不同活動拆解開,由A模塊進行判斷調用哪個模塊,而非傳遞參數到B來判斷執行哪個。
4)標記耦合:一個數據結構作為參數進行傳遞,但是被調用的模塊只是使用了數據結構中的一部分內容。
例子:
缺點:1.被調用函數必須清楚參數的數據結構,並按照結構的要求進行操作數據,
2.難於理解
5)數據耦合:模塊間傳遞基本數據類型或者是所有元素都被使用的數據結構進行調用。
缺點:沒啥缺點
優點:可維護性高,沒啥缺點233.
參考:https://blog.csdn.net/gpwner/article/details/53455217
中國大學MOOC軟件工程課件