当前位置:文档之家› 面向对象设计七大原则-步骤资料

面向对象设计七大原则-步骤资料

面向对象设计原则
A. 面向对象设计七大原则
a) 开闭原则
Ø 软件实体对扩展开发,对修改关闭。

Ø 当软件系统面对着新的需求的时候,系统的设计是稳定的。

Ø 满足“开-闭”原则系统的优点:
1. 通过扩展已有的模块,提供新的行为,满足新需求,使得变化中的软件系统有一定的适应性和灵活性
2. 已有的软件模块,特别是最重要的抽象层模块不能再修改,这就使得变化中的模块有一定的稳定性和延续性.
Ø 怎样才能做到开闭原则?
1. 抽象化,为系统定义一个不再更改的抽象设计,这个设计预见了所有可能的变化。

满足了开闭原则的“闭”
2. 找到系统中变化的部分,把可变性封装起来。

使用继承或者其他方式来封装变化,将变化封装在一个方法中或者一个类中。

b) “里氏转换”原则(LSP)
Ø 定义:如果一个软件实体使用一个基类的话,那么一定适合于它的子类。

也就是基类出现的地方,子类一定可以出现,替换后软件行为不会发生变化,而且它根本不能识别出基类和子类对象的区别。

Ø 里氏转换原则是对开-闭原则的补充。

违反了里氏原则,有就违反了开闭原则;反之不成立。

Ø 里氏转换原则是继承复用的基础.只有当衍生类可以替换掉基类,软件功能不会受到影响的时候,基类才能被真正复用,而衍生类才能在基类的基础上增加新的行为。

Ø 理氏转换原则是代理模式成立的基础.代理模式和真实主题模式都是抽象主题角色的子类。

客户端只知道抽象主题,而代理主题可以替代抽象主题出现在任何地方
c) “依赖倒转”原则
Ø 抽象不应该依赖于细节,细节应该依赖于抽象.
Ø (高层模块不应该依赖于底层模块,两个都依赖于抽象)
Ø 通俗地说:面向接口编程,不要对实现编程.
d) “接口隔离”原则
Ø 使用专门的接口比使用一个总的接口好;一个类对另外一个类的依赖性应当建立在最小的接口上的.
Ø 接口理解成角色,一个接口就只是代表一个角色,每个角色都有它特定的一个接口,这里的这个原则可以叫做"角色隔离原则".
Ø OOD设计的时候,准确的划分角色以及角色对应的接口。

将没有关系的接口合并在一起,就会对接口和角色构成污染。

e) “组合/聚合复用”原则
Ø 要尽量使用合成/聚合达到复用,尽量少用继承。

Ø 将一个已经有的对象纳入新对象中,使之成为新对象的一部分,新对象可以调用引入的旧对象的方法和功能.
Ø 优势:
1. 新对象存取成分对象的唯一方法是通过成分对象的接口。

2. 这种对象的复用是黑箱复用,因为成分对象的内部实现细节对于新的对象是看不见的。

3. 这种复用支持包装。

4. 新对象可以在运行的时候动态的引用于成分对象类型相同的对象。

f) “组合/聚合复用”原则
Ø 继承复用的优势:
1. 新的实现较为容易,因为超类的大部分功能可以通过继承关系自动进入子类。

2. 修改或者扩展继承而来的实现比较容易。

Ø 继承复用的缺点:
1. 继承复用破坏包装。

将超类的实现细节暴露给子类。

超类的内部细节常常对子类是透明的,白箱复用。

2. 超类的实现发生了改变,子类的实现也不得不改变
3. 超类继承而来的是静态的,不可能在运行时间内发生改变。

因此没有足够的灵活性。

g) “迪米特”原则
Ø 又叫最少知识原则;
Ø 一个对象应当对其他对象有尽可能少的了解。

Ø 只与你的朋友们通信,不要和陌生人说话;
Ø 不相往来: 将被统治的对象隔离开来,使它们没有直接的通信,可以达到分化瓦解,继而分而治之的效果
Ø 迪米特法则能够减少耦合.类之间的耦合越小,越有利于复用。

Ø “定制服务”设计原则,只向客户端提供客户端需要的方法,其他的不需要的不提供,这也是符合迪米特法则的。

h) 单一职责原则
Ø 就一个类而言,应该仅有一个引起他变化的原因。

Ø 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。

这种耦合会导致脆弱的设计。

当变化发生的时候,设计会遭受意想不到的破坏。

Ø 对设计而言,就是发现职责并把这些职责分离。

B. 面向对象系统设计(OOD)
a) OOD的步骤:
Ø 细化重组类
Ø 细化和实现类之间的关系,明确其可见性.
Ø 增加属性,指定属性的类型和可见性.
Ø 分配职责,定义执行每个职责的方法.
Ø 对消息驱动的系统,明确消息传递的方式.
Ø 利用设计模式进行局部设计.
Ø 画出详细的类图和时序图。

相关主题