面向对象的设计原则
现在我们学习和使用的程序设计方法,大部分是基本面向对象的程序设计,C++可以视为面向对象设计的经典语言,Java语言,微软的C#语言是现代的面向对象程序设计语言,这些面向对象的程序设计语言对面向对象的支持都包含三大面向对象的语法特性:封装,继承,多态。具体语言对这三大特性的支持,可以参考各自的语法教程,本文不做详细的描述,而本文的重点,是要阐述在面向对象程序设计中一些经验性的设计原则。
1.合成/聚合复用原则
合成、聚合其实描述的是一个概念,就是在一个新的对象中,使用一些已有的对象,来实现新的功能,是 已有对象成为新对象的一部分。从而到达功能复用的目的。
这个原则的简单描述就是:优先使用对象聚合,而减少对象的继承。这里要在编程时区分对象之间的关系到底是Has-a还是IS-a。
2.依赖倒置原则
这个原则将的是在程序设计中应该遵循,高层模块不应该依赖于底层模块,二者都应该依赖于抽象,而抽象不应该依赖于细节,细节应该依赖于抽象。要针对接口编程,而非具体的实现编程。这也是我们经常说的需要高内聚,低耦合。
3.开放——封闭原则
一个设计良好的系统,应该具有很强的健壮性,高复用性和良好的扩展性。系统对修改封闭,而对扩展开放。一般来说,系统的抽象层是不允许修改的,而具体实现可以对外开放。
4.里氏替换原则
子类型必须能够替换他们的基类型,而反之代换则不成立。在使用指向基类的引用的函数,必须能在不知道具体子类对象类型的情况下使用他们。
5.接口隔离原则
客户端在调用提供服务时,应该对这个服务的依赖性建立在最小的接口之上,而服务对客户端提供的接口中,没有冗余的功能。在具体编程中,如果对类的功能不能在类级别隔离,那么需要使用接口进行分割。保证接口的最优化。
6.单一职责原则
一个类应该面向一个问题层面提供服务,而不是面向对个问题层面提供服务,因为这个类提供多个问题层面的服务,会使类的不稳定性增加 。