內(nèi)聚的含義:內(nèi)聚指一個(gè)模塊內(nèi)部元素彼此結(jié)合的緊密程度
在面向?qū)ο箢I(lǐng)域,談到“內(nèi)聚”的時(shí)候,模塊的概念遠(yuǎn)遠(yuǎn)不止我們通常所理解的“系統(tǒng)內(nèi)的某個(gè)模塊”這個(gè)范圍,而是可大可小,大到一個(gè)子系統(tǒng),小到一個(gè)函數(shù),你都可以理解為內(nèi)聚里所說的 “模塊”。所以可以用“內(nèi)聚”來判斷一個(gè)函數(shù)設(shè)計(jì)是否合理,一個(gè)類設(shè)計(jì)是否合理,一個(gè)接口設(shè)計(jì)是否合理, 一個(gè)包設(shè)計(jì)是否合理,一個(gè)模塊/子系統(tǒng)設(shè)計(jì)是否合理。
其次:“元素”究竟是什么? 有了前面對“模塊”的深入研究后,元素的含義就比較容易明確了(不同語言稍有不同)。
函數(shù):函數(shù)的元素就是“代碼”
類/接口:類的元素是“函數(shù)、屬性”
包:包的元素是“類、接口、全局?jǐn)?shù)據(jù)”等
模塊:模塊的元素是“包、命名空間”等
再次:“結(jié)合”是什么? 英文的原文是“belong”,有“屬于”的意思,翻譯成中文“結(jié)合”,更加貼近中文的理解。但“結(jié)合”本 身這個(gè)詞容易引起誤解。絕大部分人看到“結(jié)合”這個(gè)單詞,想到的肯定是“你中有我、我中有你”這樣 的含義,甚至可能會(huì)聯(lián)想到“美女和帥哥”的結(jié)合,抑或“青蛙王子和公主”的結(jié)合這種情況。這樣的理解本身也并沒有錯(cuò),但比較狹隘。 我們以類的設(shè)計(jì)為例:假如一個(gè)類里面的函數(shù)都是只依賴本類其它函數(shù)(當(dāng)然不能循環(huán)調(diào)用啦),那內(nèi)聚性肯定是最好的,因?yàn)椤敖Y(jié)合”得很緊密
判斷一個(gè)模塊(函數(shù)、類、包、子系統(tǒng))“內(nèi)聚性”的高低,最重要的是關(guān)注模塊的元素是否都忠于模塊的職責(zé),簡單來說就是“不要掛羊頭賣狗肉”。
【內(nèi)聚的分類】
以下各種形式的內(nèi)聚的內(nèi)聚性越來越高
【巧合內(nèi)聚(Coincidental cohesion)】
網(wǎng)友評論