第2节 面向对象设计原则

一、面向对象设计

变化是复用的天敌,OOP设计的最大优势在于抵御变化!

二、重新认识面向对象

  1. 理解隔离化:宏观来讲,OOP方式能够将变化所带来的影响减为最小;
  2. 各司其职:微观上看,OOP更强调各个类的职责,由于需求的变化导致新增类型不改变原来的实现
  3. 对象是什么:
  • 语言层面:封装了代码和数据
  • 规格层面:对象是一系列可被使用的公共接口
  • 概念层面:对象是拥有某些责任或功能的抽象

三、面向对象设计原则

1. 依赖倒置原则(DIP) 非常重要,几乎贯穿所有设计模式

1.1  高层模块(稳定)应该应依赖底层实现(变化),二者都应该依赖于抽象;
1.2  抽象不应该依赖细节实现的变化,实现细节应该依赖于抽象;

2. 开放封闭原则(OCP)

2.1  对扩展开发,对更改封闭
2.2  类模块应该是可扩展的,但是不可修改;

3. 单一职责原则(SRP)

3.1 一个类应该仅有一个引起变化的原因;
3.2 变化的方向隐含着类的责任;                   *** 单个类不能太臃肿,这就隐含着多责

4. Liskov替换原则(LSP)

4.1  子类必须能够替代他们的基类 :父类能做的,子类都可实现
4.2  继承表达类型抽象:如果父类有很多方法子类没用,说明是组合关系而非继承关系

5. 接口隔离原则(ISP)

5.1  不应该强迫用户依赖不用的方法;
5.2  接口应该小而完备:子类用则protected,只自己用则private,必要时才使用public

6. 有限使用对象组合而非继承

6.1  类继承通常为"白箱复用",对象组合为"黑箱复用";
6.2  继承在某种程度上破坏了封装性,子类父类耦合度增加;
6.3  对象组合则要求对象具有良好的接口,耦合度低;

7. 封装变化原则

7.1  使用封装来创建对象的分阶层,设计者可以在分阶层一次进行修改,而不影响另一次

8. 面向接口编程而非面向实现编程

8.1  不将类型变量声明为具体类,而是某个接口;
8.2  客户程序无需获知对象的具体类型,而需知道对象接口;
8.3  减少系统中部分依赖关系,实现"高内聚、低耦合"的类型设计方案;

四、将设计原则提升为设计经验

  1. 设计习语:描述与特定编程语言相关的底层模式,技巧和惯用法;
  2. 设计模式:主要描述类与相互通信对象之间的组织关系,包括他们的角色、职责、写作方式等方面;
  3. 架构模式:描述系统中与基本结构组织关系密切的高层模式,包括子系统划分、职责,一级如何组织他们之间的关系规则;
#include <stdio.h>
int main()
{
    // some codes
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值