OOD 设计基本原则
一. 开-闭原则 :我们改变不了历史,但我们可以改变未来。
抽象化 对扩展(未来)开放 对修改(历史)关闭
抽象层
(接口、抽象
类)
1. 为其实现层提供扩展的能力,这就需要充
分考虑系统未来的可变因素。
2. 结合单一职责原则,即有了“分块封装可变
因素”的思路。
1. 严格执行“对修改关闭”,以保持系
统的稳定性。
实现层
(实现类)
新需求实现类:
1. 可通过重新实现抽象层的接口来实现新需
求,以适应新变化。
2. 也可通过集成类的方式来实现新需求,以
适应新变化。
原需求实现类:
1. 不修改或少修改原需求的实现类,
以保存历史记录。
1.1“开-闭”原则的定义及优点
1)定义:一个软件实体应当对扩展开放,对修改关闭。即在设计一个软件实体的时候,应当使这个软件
实体可以在不修改或少修改的前提下通过扩展来实现变化。
软件实体包括模块,类和函数;扩展包括集成类,实现接口;关闭是要求保存历史和抽象层的稳定。
2)满足“开-闭”原则系统的优点:
a)通过扩展已有的软件系统,可以提供新的行为,以满足对软件的新需求,使变化中的软件系统有一
定的适应性和灵活性。
b)已有的软件模块,特别是最重要的抽象层模块不能再修改,而原需求的实现层尽量不修改或少修改,
这就使变化中的软件系统有一定的稳定性和延续性。
c)这样的系统同时满足了可复用性与可维护性。
1.2 如何实现“开-闭”原则
1)在面向对象设计中,不允许更改的是系统的抽象层(抽象类或接口),尽量少修改原需求的实现层
(已
运行的实现类),而允许扩展的是新需求的实现层(增加新的实现类)。
2)解决问题的关键在于抽象化。抽象化是面向对象设计的第一个核心本质。 对一个事物抽象化,实质上
是在归纳总结它的本质。抽象让我们抓住最重要的东西,从更高一层去思考。这降低了思考的复杂度,我
们不用同时考虑那么多的东西。换言之,我们封装了事物的本质,看不到任何细节。
3)在面向对象编程中,通过抽象类及接口,规定了具体类的特征作为抽象层,相对稳定,不需更改,从
而
满足“对修改关闭”;而从抽象类导出的具体类可以改变系统的行为,从而满足“对扩展开放”。
1.3 对可变性的封装原则
“开-闭”原则也就是“对可变性的封装原则”。即找到一个系统的可变因素,将之分块封装起来。换言之,
在设计中什么可能会发生变化,应使之成为抽象层而封装,而不是什么会导致设计改变才封装。
“对可变性的封装原则”意味着:
1 / 8