摘 要:耦合、內聚是軟件工程中的一個概念。低耦合、高內聚是面向對象編程中的應遵守的基本原則。不同的設計人員對于這個原則的理解不同,其所設計、開發(fā)的系統(tǒng)也不盡相同。本文以學生信息管理系統(tǒng)為例,詮釋了筆者對于低耦合、高內聚的理解。
關鍵詞:耦合;內聚
中圖分類號:TP312.2-4
1 耦合
所謂耦合指的是軟件系統(tǒng)中一個代碼模塊與另一個代碼模塊之間的關系。耦合度越高說明模塊間的關系越緊密;反之模塊之間的關系越少。為了提高軟件系統(tǒng)應對變更的能力、提高代碼的重用率、減少因變更而花費的變更成本,在進行系統(tǒng)設計時應盡量降低模塊之間的耦合度,使各個模塊相對獨立。這樣即使一個模塊發(fā)生了變更,也不會對其他的模塊產(chǎn)生較大的影響。
以學生信息管理系統(tǒng)為例,學生類和班級類是針對學生和班級這兩個業(yè)務實體的實體類。從低耦合的原則上講它們之間應相對獨立,不產(chǎn)生過多的交互。學生類提供學生信息相關的操作;班級類提供班級信息相關的服務。如圖1所示:
學生類Student中包含了與學生這個業(yè)務實體相關的屬性和操作,如學號、姓名、班級、住址、手機號、添加學生信息、修改學生信息、刪除學生信息、查詢學生信息等。通常一個學生只屬于一個班級,為此在Student類中包含了一個Classes類型的屬性。實現(xiàn)了Student類對Classes類的多對一關聯(lián)。此外Student類中還包含了通過班級號查詢學生的操作。雖然該操作以學號作為參數(shù),但其主要功能是實現(xiàn)學生的查詢。遵循低耦合的原則,該操作應該放在Student類中,而不是Classes類。
從分層的角度上講,同樣需要遵循低耦合的原則。如圖2所示:
對于學生信息管理系統(tǒng)來說,可以采用標準的三層架構,即UI層、實體層、數(shù)據(jù)訪問層(DAL)。其中UI層負責用戶交互;實體層啟到了承上啟下的作用。既對UI層提供功能上的支持,又要調用數(shù)據(jù)訪問層(DAL),實現(xiàn)業(yè)務實體到關系表的映射;數(shù)據(jù)訪問層(DAL)則提供了數(shù)據(jù)持久化的相關操作。
本著低耦合的原則,層與層之間僅僅是向下依賴的,即UI層依賴于實體層,實體層依賴于數(shù)據(jù)訪問層(DAL)。隔層之間(UI層與數(shù)據(jù)訪問層(DAL))是不可見的。也就是說,UI層不會用到數(shù)據(jù)訪問層(DAL)中的任何成員。這樣就大大降低了層與層之間的耦合度,提高了系統(tǒng)應對變更的能力。舉個例子:假設原有學生信息管理系統(tǒng)為C/S結構,出于部屬方便的考慮,用戶要求將原系統(tǒng)改為B/S結構?;跇藴嗜龑蛹軜嫷膶W生信息管理系統(tǒng)只需將原有的UI層替換為web項目即可。實體層、數(shù)據(jù)訪問層(DAL)保持不變。
“低耦合”可以總結為“獨”。也就是說在設計和開發(fā)的過程中,要保持類與類之間,層與層之間的相對獨立,不產(chǎn)生多余的關系。
2 內聚
所謂的內聚指的是一個模塊各個成員之間的關聯(lián)程度。內聚性越高說明模塊內各個成員關系越緊密,該模塊的重用性越強。內聚按緊密程度從低到高排列,依次為包括:偶然內聚、邏輯內聚、時間內聚、過程內聚、通信內聚、信息內聚、功能內聚。
偶然內聚:因為偶然原因出現(xiàn)在一個模塊中的成員關系。可以說各個成員之間毫無關系,內聚性最低。例如各個系統(tǒng)中都包含的工具類。工具類成員通常有加、解密,生成隨機的校驗碼等操作。
邏輯內聚:指的是同一個模塊中的成員邏輯上相關,但功能上并無關聯(lián)。
時間內聚:因為時間因素使一組成員關聯(lián)在一起。例如需要同一時間進行數(shù)據(jù)同步。
通信內聚:因對同一數(shù)據(jù)集操作或生成同一數(shù)據(jù)集而關聯(lián)在一個模塊內的成員。
順序內聚:為順序完成一個任務一組成員被放置在一個模塊中,一個成員的輸出作為另一個成員的輸入。
過程內聚:因在一個過程中被先后調用的操作被放置在一個模塊中。
信息內聚:基于同一個數(shù)據(jù)的一組成員被放置在一個模塊中。
功能內聚:為完成單一功能,一組成員必須出現(xiàn)在一個模塊中。功能內聚是一個功能專一、獨立性強、內部結構緊密的內聚類型,是最理想的內聚。例如:Student類包含了學生相關的全部成員。各個成員只為實現(xiàn)學生信息的增刪改查提供支持。
“高內聚”可以總結為“緊”,即模塊內部各成員之間關系緊密,功能專一。
3 結束語
“低耦合、高內聚”是在進行系統(tǒng)設計、開發(fā)過程中應該保持的原則。不同的開發(fā)人員因項目經(jīng)驗不同、對面向對象編程的理解不同而各不相同。要充分理解這六個字還需要在項目實戰(zhàn)中逐步的去理解,需要一個由量變到質變的過程。
參考文獻:
[1]梁立新.項目實踐精解·ASP.NET應用開發(fā):基于ASP.NET?C#和ADO.NET的三層架構案例分析[M].北京:電子工業(yè)出版社,2010.
[2]Matthew MacDonald.ASP.NET高級程序設計[M].北京:人民郵電出版社,2011.
[3]Christian Thilmany..NET模式:架構設計與過程[M].北京:中國電力出版社,2005.
[4]Jeffrey Richter.Microsoft.NET框架程序設計[M].北京:清華大學出版社,2003.
[5]Martin L.Shoemaker.UML實戰(zhàn)教程[M].北京:清華大學出版社,2006.
作者簡介:趙磊(1981-),男,河北人,軟件系副主任,講師,碩士,研究方向:軟件技術。
作者單位:天津電子信息職業(yè)技術學院,天津 300312