列出面向对象的几个设计原则
考点:考察求职者在使用OOP设计时需要注意的设计原则,能够体现出求职者的设计素养。
出现频率:★★★
【面试题解析】
OO设计根本的指导原则是提高可维护性和可复用性。这些原则主要如下所述。
1.开闭原则
一个软件实体应该对扩展开放,对修改关闭。在设计一个模块的时候,就应当使这个模块可以在不被修改的前提下被扩展。换言之,就应当可以在不必修改源代码的情况下改变这个模块的行为。
说明:开闭原则是总的原则,其他几条是开闭原则的手段和工具。
2.依赖倒转原则
依赖倒转原则讲的是:要依赖于抽象,不要信赖于实现。开闭原则是目标,而达到这一目标的手段是依赖倒转原则。
3.里氏代换原则
任何基类可以出现的地方,子类一定可以出现。开闭原则的关键步骤是抽象化。而基类与子类的继承关系就是抽象化的具体体现,里氏代换原则是对实现抽象化的具体步骤的规范。
4.合成/聚合复用原则
要尽量使用合成/聚合,而不是继承关系达到复用的目的。合成/聚合原则要求用户首先考虑合成/聚合关系,里氏代换原则要求在使用继承时,必须确定这个继承关系符合一定的条件(继承是用来封装变化的;任何基类可以出现的地方,子类一定可以出现。)
合成/聚合原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用已有功能的目的。
5.迪米特原则
软件实体应当尽可能少地与其他实体发生相互作用。模块之间的交互要少。这样做的结果是当系统的功能需要扩展时,会相对更容易地做到对修改的关闭。
一个对象应当对其他对象有尽可能少的了解。迪米特原则的具体操作如下。
(1)优先考虑将一个类设置成不变类。不变类易于设计、实现和使用。
(2)尽量降低一个类的访问权限。
(3)谨慎使用Serializable,一旦将一个类设置成Serializable,就不能再在新版本中修改这个类的内部结构,包括private的方法和句段。
(4)尽量降低成员的访问权限。
6.接口隔离原则
应当为客户端提供尽可能小的单独接口,而不要提供大的总接口。也即是使用多个专门的接口比使用单一的总接口要好。
接口隔离原则与迪米特都是对一个软件实体与其他的软件实体的通信限制。迪米特原则要求尽可能地限制通信的宽度和深度,接口隔离原则要求通信的宽度尽可能地窄。这样做的结果使一个软件系统在功能扩展过程当中,不会将修改的压力传递到其他对象。
参考答案:
OO设计根本的指导原则是提高可维护性和可复用性。这些原则主要有:开闭原则、依赖倒转原则、里氏代换原则、合成/聚合复用原则、迪米特原则和接口隔离原则。