熟悉Java的人都知道Java程序设计时,为了避免程序的冗杂,减少各个类之间的依耐性,经常使用低耦合和高内聚的设计理念。
所谓耦合是指在一个软件结构内不同模块之间互连程度的度量,
而低耦合就是指在设计一个软件时,作为一个完整的软件系统,对于各种模块与模块之间应尽可能的是其独立的存在,让每个模块尽可能的独立完成其特定的功能。
如果某两个模块间的关系比较复杂的话,最好首先考虑进一步的模块划分。这样有利于修改和组合。
所谓内聚是指一个模块内各个元素彼此结合的紧密程度。而高内聚就是指在一个模块的内部,应该尽可能的让每个元素都紧密的相连。
也就是充分利用每一个元素的功能,各施所能,以最终实现某个功能。
如果某个元素与该模块的关系比较疏松的话,可能该模块的结构还不够完善,或者是该元素是多余的。
例如以下有四个类,分别有两种设计方法 ,如图
图一: 在该图中 各个类之间呈网状引用结构,如果写代码时也是这种结构,那么不仅会使代码很难理解,而且不容易使读者理解,更重要的时,无法继续在上面扩展代码,即你更改某一个类的元素时,同时也会影响到其他的类,因为他们之间的依耐性很高,所谓的“牵一发而动全身”就是指的这个意思。
在图二中,我们可以看到类C,B,A都只是为D所用,所以他们相互之间是独立的,在我们修改代码时:比如我们修改类C中的代码,那就不会影响到类B和类A,这样,只要采用这种星状结构,不论我们的软件有多么的庞大,我们在修缮代码时也不会有太多的麻烦。
内聚和耦合,包含了横向和纵向的关系。功能内聚和数据耦合,是我们需要达成的目标。横向的内聚和耦合,通常体现在系统的各个模块、类之间的关系,而纵向的耦合,体现在系统的各个层次之间的关系。
高内聚和低耦合是软件工程设计的一种原则,是写代码时要遵循的一种规范。
聚合:指的是相同模块内关系的紧密程度
耦合:一个软件结构内不同模块之间相互连接程度的度量
为什么要高内聚?
对于同一个功能模块而言他们关系越紧密那么出错率就会相应的降低,同时也有利于编程。
为什么要低耦合?
对于一个软件而言,他的功能模块有很多,如果各个模块之间的关系越复杂,就会产生更多的意想不到的错误(例如随便改一个参数,有可能对其他模块都会造成不可预估的影响),会给以后的维护工作带来很多麻烦