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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

面向对象设计原则

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的步骤:

Ø 细化重组类

Ø 细化和实现类之间的关系,明确其可见性.

Ø 增加属性,指定属性的类型和可见性.

Ø 分配职责,定义执行每个职责的方法.

Ø 对消息驱动的系统,明确消息传递的方式.

Ø 利用设计模式进行局部设计.

Ø 画出详细的类图和时序图

相关文档
最新文档