java面向對象編程類的內聚性分析
類劃分時關於內聚性的問題
靜態類的設計
在軟件設計中,我們經常會將一些通用的方法封裝到一個類中,這種類隻包含方法,沒有屬性,類中的方法之間沒有關聯,內聚性最低,屬於偶然內聚或巧合內聚。這種設計常用於工具類,一般設計為靜態類,這些方法的使用時類似函數調用。設計需註意,將功能基本接近的方法封裝到一個類中,切忌不能將所有的公用方法封裝到一個大類中,如:日期格式轉換,數字轉換字符串等。
高內聚類的設計
高內聚類的設計時,按照操作功能進行封裝,需遵循單一職責原則,即每一個類完成規定的某一項任務。如:dao層的類用作數據的增刪改查(CRUD),數據實體僅為數據載體,用作傳遞數據任務。即每個封裝的類僅完成一項任務。
又如迭代器模式中迭代器僅為某一個集合進行服務,但是還要獨立出來一個內部類,就是把集合數據的表示和對集合的遍歷操作兩項任務分開。
低耦合代表高內聚,在進行類的設計時,如類A的方法中調用瞭B類的方法,在A類定義屬性變量或局部對象變量時,使用B類接口定義,通過註入或方法參數傳入B的對象,使得二者之間形成一種松耦合的關系。如果一個類對外暴露的接口簡單,接口的參數為簡單數據類型,所有的復雜操作封裝在類的內部,這種類內聚性最高,獨立性強。如:通過短信貓發送短信,對外接口僅為sendMsg(String msg),如何創建連接、格式轉換、信息發送全部封裝類的內部。
附:面向過程編程中模塊的內聚性
以下是面向過程中內聚性由高到低做一說明,對類劃分時有一定的參考意義。
偶然內聚或巧合內聚(Coincidental)
內內的各成分之間沒有關聯,隻是把分散的功能合並在一起;類A內有BCDE四個方法,這四個方法均為public方法,功能含義上各自獨立。前端開發api,將不同模塊的api放在一起,就是偶然耦合。
var api = { //登錄 getCaptcha: (param) => get(apiBase+"/captcha.jpg", param), adminLogin: (param) => post(apiBase+"/sys/login", param), //部門管理 departmentList:(param) => get(apiBase+"/tywdepart/list", param), departmentAdd:(param) =>post(apiBase+"/tywdepart/save", param), departmentUpdate:(param) =>post(apiBase+"/tywdepart/update", param), departmentDelete:(param) =>post(apiBase+"/tywdepart/delete", param), }
增強耦合度辦法:拆分;將登錄api要使用的api和部門管理api設計為兩個獨立的api。
邏輯內聚(Logical):
若幹個邏輯相似的功能通過參數確定該模塊對應哪一個功能。如:類A內有BCDE四個方法,這四個方法均為public方法,功能上類似,把它們封裝在一起,如字符串轉換函數工具類,包括int轉字符串、double轉字符串等。
時間內聚(Temporal ):
因為功能必須在同一時間內執行才寫到一個模塊,即這些功能隻是因為時間因素才有關聯。 例:程序初始化時,程序員把對所有全局變量的初始化操作放在模塊A中,模塊A中就是時間內聚。
過程內聚:
模塊內部的處理成分是相關的,而且這些處理必須以特定的次序進行執行。一個模塊,為某員工計算工齡工資:打開員工信息文件取出員工記錄;按一定的算法計算工 齡;按一定的算法計算工齡工資。 該模塊中的三個相對獨立的子功能必須以特定次序執行,整個模塊具有過程內聚
通信內聚(Communicational):
所有處理元素集中在一個數據結構的區域上。一個模塊,接收一個遠程傳來的信息文件,保存,同時馬上打印該文件。 該模塊針對同一個文件操作,打印和存盤操作沒有前後順序關系,整個模塊具有通信內聚。
順序內聚(Sequential):
模塊內的各個處理元素關註同一功能,順序執行,前一元素的輸出結果作為下一元素的輸入。
功能內聚(Functional):
類內所有的功能成分均為瞭完成一項功能服務的,如:userDao都是為瞭完成用戶數據庫的增刪改查(CRUD)服務的。
面向過程編程中模塊的內聚性參考:
https://www.jb51.net/article/120602.htm
以上就是java面向對象編程類的內聚性分析的詳細內容,更多關於java面向對象編程類的內聚性的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- 聊聊Java Double相加出現的怪事
- Java學習筆記:關於Java double類型相加問題
- java中BigDecimal用法詳解
- 新手瞭解java 泛型基礎知識
- spring聲明式事務 @Transactional 不回滾的多種情況以及解決方案