内聚与耦合
耦合:
也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。
模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息内聚性:又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。
若一个模块内各元素(语句之间、程序段之间)联系的越紧密,则它的内聚性就越高。
内聚
一、单一职责原则
类的职责要单一,控制类的粒度大小,不能将太多的职责放在一个类中。单一职责原则是实现高内聚、低耦合的指导方针,设计人员需要发现类的不同职责并将其分离。
优点:
1.可以降低类的复杂度,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单的多;
2. 提高类的可读性,提高系统的可维护性;
3.变更引起的风险降低,变更是必然的,如果单一职责原则遵守的好,当修改一个功能时,可以显著降低对其他功能的影响。
二、开闭原则
一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。为了满足开闭原则,需要对系统进行抽象化设计,
抽象化是开闭原则的关键。为系统定义一个相对稳定的抽象层,而将不同的实现行为移至具体的实现层中完成。如果需要修改系统的行为,无须对抽象层进行任何改动,
只需要增加新的具体类来实现新的业务功能即可,实现在不修改已有代码的基础上扩展系统的功能,达到开闭原则的要求。
开闭原则是最基础的设计原则,下面的五个设计原则都是开闭原则的具体形态.
优点
1.提高复用性,抽象类粒度小,可复用性高,
2.提高维护性,不需要关注抽象类维护,只负责实例扩展。
3.面向对象开发的要求,设计之初考虑尽可能多的变化,留下接口,等待“可能”转变为实现
三、里氏代换原则
任何基类可以出现的地方,子类一定可以出现。LSP 是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,
而派生类也能够在基类的基础上增加新的行为。在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象。
四、依赖倒转原则
针对接口编程,依赖于抽象而不依赖于具体。高层模块不应该依赖低层模块,它们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象。
代码要依赖于抽象的类,而不要依赖于具体的类;要针对接口或抽象类编程,而不是针对具体类编程
五、接口隔离原则
使用多个隔离的接口,比使用单个接口要好。降低类之间的耦合度。不应该依赖那些它不需要的接口。用多个专门的接口,而不使用单一的总接口。
每一个接口应该承担一种相对独立的角色,不多不少,不干不该干的事,该干的事都要干。
六、合成复用原则
尽量使用合成/聚合的方式,尽量使用对象组合,而不是使用继承。一个新的对象里通过关联关系(包括组合关系和聚合关系)来使用一些已有的对象,
使之成为新对象的一部分;新对象通过委派调用已有对象的方法达到复用其已有功能的目的
七、迪米特法原则(最少知道原则)
一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。当一个模块修改时,就会尽量少的影响其他的模块,扩展会相对容易。