(1)面向对象起步之高内聚低耦合

来源:互联网 发布:pdf属于结构化数据么 编辑:程序博客网 时间:2024/06/02 02:27

  近来重新思考面向对象分析与设计,发现自己虽然一直在用着号称面向对象的语言C#,却对面向对象理解的很不够,可以说是忽略了面向对象中的很多思想。比如今天看到高内聚低耦合时,脑子里困惑,怎样才算是高内聚低耦合的设计,那么自己能够判断出自己的软件架构中实现到内聚和耦合中的什么程度?面对这些疑问,重新审视自己的面向对象思考方法。

  高内聚低耦合,是软件工程中的概念,是面向对象分析与设计中判断设计好坏的标准。

  为什么有高内聚低耦合之说呢?

  因为在现实中,一个软件是由多个子程序构成,而每个子程序是由多个模块或者方法构成。在面向对象的世界中,类是主体,那么类的设计就成为了软件开发中主要的工作。而怎么样设计一个类决定了该软件设计的好坏,有人把很多的功能都放在了一个类中,例如一个father类,有人把mother的功能或者职责也放到了father类中,这样造成father类的功能(职责)既要实现father的功能又包含mother的功能,这样导致father类处理的事情太多(既要写代码,又要带几个孩子,痛苦啊)。这样的话应该设计成father类和mother类,把father分内的职责放到father类中,mother分内的事放到mother类中,这样职责分离,每个类完成自己独立的功能(哈哈,全世界都一片光明),这就是高内聚。

  耦合就是类之间的互相调用关系,如果每一个对象都有引用所有其他的对象,那么就有高耦合,这是软件设计中的大忌。低耦合就是说类与类之间的调用应该尽可能的低,这样做就可以实现一个类的影响不会造成另外一个类的修改,也就不会造成牵一发而动全身的状况了,有利于维护和扩展。

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

  在实际编码的时候,我们大部分人或许有这样的疑惑:总是在犹豫是把某个方法封装在一个类里,还是单独的封装成一个类。那么用面向对象的思路去分析:

一个方法,如何封装,拿到现实生活中来看,看这种能力(方法)是否是属于这类事物(类)的本能。
如果是,就封装在这个类里。
如果不是,则考虑封装在其它类里。
如果这种能力,很多事物都具有,则一定要封装在这类事物的总类里。
如果这种能力,很多事物都会经常用到,则可以封装成一个总类的静态方法。