对高内聚 低耦合 的理解

引用:http://www.3snews.net/html/91/7091-20450.html

 

我们在程序设计中经常会听到:“软件设计要讲究 高内聚 低耦合”,那么到底什么是“高内聚 低耦合”呢??
       其实啊,内聚: 故名思议,表示内部间聚集、关联的长度,那么高内聚就是指要高度的聚集和关联。
       而耦合其实就是指外部间的联系程度。
      在程序设置中高内聚就是要程序模块内、类内要保持高度的联系,也就是属性间、方法间、属性方法间要高度紧密、不能脱离联系。要么方法中应该存在某些属性的参数,要么属性中要返回方法的结果,这样能够充分调用代码,减少代码的冗余。而耦合是指程序各个模块间要尽量保持距离,不能关联的太近,即使是“父亲 与 儿子 ”(父类与子类),以及其它的扩展类,就好比是俗话中所讲的:“亲戚远了香,近了臭” 道理一样,关系过于亲密,暴露的缺点(心眼)也就越容易被人看到(呵呵,比喻有点远了   ),也就越容易产生矛盾;因此在程序设置中,类与类之间虽然存在继承的关系,但是继承的越多,那么子类和父类也就越像,父类变了,子类也就需要进行更改;我想谁也不想刚刚设计完毕的代码,随着一个类的更改去大动工程吧!  
     
       网络中也有很多关于“高内聚 低耦合”的文章,大家可以去浏览一下,这样您会体会的更加深刻,说多了也是纸上谈兵,不如大家在实际的开发中仔细体会!
       下面是网络中讲的不错的帖子,供大家参考!

(1)http://www.1000sun.com/blog/user1/eluo/archives/2006/1432.html

这是判断设计好坏的标准,主要是面向OO的设计,主要是看类的内聚性是否高,偶合度是否低。 
高内聚:类与类之间的关系而定,高,意思是他们之间的关系要简单,明了,不要有很强的关系,不然,运行起来就会出问题。一个类的运行影响到其他的类。 

    低偶合:类内部的方法而言。把程序的功能尽量分散,别在一个类里只写一个或很好的方法,因为那样会给你的调试等带来很多问题。出了错你都不知道在什么地方。

    系统的各个模块尽可能具有较大的独立性,换句话说,希望这样设计软件结构,使得每个模块完成一个相对独立的特定子功能,并且和其他模块之间的关系很简单, 以便能方便地把不同场合下写成的程序模块组合成软件系统。衡量模块独立性的定性标准是内聚(一个模块内各个元素彼此结合的紧密程度)和耦合(一个软件结构 内不同模块之间互连程度的度量)。高内聚、低耦合的模块是设计时追求的目标。

直接影响:

如果程序在实现上没有把低耦合,高内聚作为其设计要求,那么你对程序功能上进行修改的时候,你要使用编辑器修改分散在各个源文件中的代码,再做编译 与连接;由于处理多个源文件,很有可能,你不会一下子全部修改正确,你的改动还有可能导致新的错误,这样你还必须查找原因,浪费了时间。我想OO之所以引 入类的封装机制,也是实现低耦合,高内聚的一种手段.Java中在内之外还有package,更好一层,高阶C++有namespace,都是为了这个目 的。

对于软件维护人员:

对于软件维护来说,修改这样的无序代码无疑是一个噩梦,倘若代码维护者与原作者非同一人,他要理解代码实现的机制将要花费多大的精力,花几天时间查 看几万行代码是对人的一种折磨,这仅是为了弄清楚几个月前那些程序员是如何实现xxx功能的,当然如果有相应的设计文档与注释,压力会减轻一点。我就经历 过这种痛苦。但我想如果在源头进行控制,在各个阶段对方案评审会最大程度的避免出现诸如"一个功能实现分散在各个源文件"的情况。这又回到一个永恒的主 题,如何将风险控制在早期而不是事后讨论。

(2)http://tieba.baidu.com/f?kz=434621288
“高内聚,低耦合”主要是阐述的面向对象系统中,各个类需要职责分离的思想。    
  每一个类完成特定的独立的功能,这个就是高内聚。耦合就是类之间的互相调用关系,如果耦合很强,互相牵扯调用很多,那么会牵一发而动全身,不利于维护和扩展。    

类之间的设置应该要低耦合,但是每个类应该要高内聚.耦合是类之间相互依赖的尺度.如果每个对象都有引用其它所有的对象,那么就有高耦合,这是不 合乎要求的,因为在两个对象之间,潜在性地流动了太多信息.低耦合是合乎要求的:它意味着对象彼此之间更独立的工作.低耦合最小化了修改一个类而导致也要 修改其它类的"连锁反应". 内聚是一个类中变量与方法连接强度的尺度.高内聚是值得要的,因为它意味着类可以更好地执行一项工作.低内聚是不好的,因为 它表明类中的元素之间很少相关.成分之间相互有关联的模块是合乎要求的.每个方法也应该高内聚.大多数的方法只执行一个功能.不要在方法中添加'额外'的 指令,这样会导致方法执行更多的函数.  
     
  推广开来说,这个思想并不限于类与类之间的关系。模块和模块,子系统之间也都要遵守这个原则,才可以设计出延展性比较强的系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值