开-闭原则(Open-Closed Principle, OCP)是面向对象的可复用设计的基石。开-闭原则是指一个软件实体应当对 (53) 开放,对 (54) 关闭;里氏代换原则(Liskov Substitution Principle, LSP)是指任何 (55) 可以出现的地方, (56) 一定可以出现。依赖倒转原则(Dependence Inversion Principle, DIP)就是要依赖于 (57) ,而不依赖于 (58) ,或者说要针对接口编程,不要针对实现编程。
58()
A.程序设计语言
B.建模语言
C.实现
D.抽象
参考答案:C
解析:
本题考查面向对象设计的原则。
开-闭原则(Open-Closed Principle)是面向对象的可复用设计(Object Oriented Design, OOD)的基石。开-闭原则是指一个软件实体应当对扩展开放,对修改关闭,即在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。满足开-闭原则的系统可以通过扩展已有的软件系统,提供新的能力和行为,以满足对软件的新需求,使软件系统有一定的适应性和灵活性;因为已有的软件模块,特别是最重要的抽象层模块不能再修改,这就使变化中的软件系统有一定的稳定性和延续性;满足开-闭原则的系统具备更好的可复用性与可维护性。
在面向对象编程中,通过抽象类及接口,规定了具体类的特征作为抽象层,相对稳定,从而满足“对修改关闭”的要求;而从抽象类导出的具体类可以改变系统的行为,从而满足对扩展开放。
里氏代换原则(Liskov Substitution Principle, LSP)是指一个软件实体如果使用的是一个基类的话,那么一定适用于其子类,而且软件系统觉察不出基类对象和子类对象的区别,也就是说,在软件系统中把基类都替换成它的子类,程序的行为没有变化。但需要注意的是,里氏代换原则中仅仅指出了用子类的对象去代替基类的对象,而反过来的代换则是不成立的。例如,如果一个软件模块中使用的是一个子类对象,那么使用父类对象去代换子类对象则可能产生错误。用一句简单的话概括:任何基类对象可以出现的地方,子类对象一定可以代替基类对象。
依赖倒转原则(Dependence Inversion Principle, DIP)就是要依赖于抽象,而不依赖于实现,或者说要针对接口编程,不要针对实现编程。系统中进行设计和实现的时候应当使用接口和抽象类进行变量类型声明、参数类型声明、方法返回类型说明,以及数据类型的转换等,而不要用具体类进行上述操作。要保证做到这一点,一个具体类应当只实现接口和抽象类中声明过的方法,而不要给出多余的方法。
传统的过程性系统的设计办法倾向于使高层次的模块依赖于低层次的模块,抽象层次依赖于具体层次。依赖倒转原则就是把这个不良的依赖关系倒转过来。面向对象设计的重要原则是创建抽象层次,并且从该抽象层次导出具体层次,具体层次给出不同的实现。继承关系就是一种从抽象化到具体化的导出。抽象层包含的应该是应用系统的业务逻辑和宏观的、对整个系统来说重要的战略性决定,而具体层次含有的是一些次要的与实现有关的算法和逻辑,以及战术性的决定,带有一定的偶然性选择。从复用的角度来说,高层抽象的模块是应当复用的,而且是复用的重点,因为它含有一个应用系统最重要的宏观业务逻辑,是较为稳定的部分。而在传统的过程性设计中,复用则侧重于具体层次模块的复用。
使用依赖倒转原则时建议不依赖于具体类,即程序中所有的依赖关系都应该终止于抽象类或者接口。尽量做到:任何变量都不应该持有一个指向具体类的指针或者引用;任何类都不应该从具体类派生;任何方法都不应该覆写它的任何基类中的已经实现的方法。