封装, 抽象, 继承, 多态 是面向对象编程语言的四大特性. 而它们又分别承担什么职责呢. 实际编程中起什么作用呢.

封装 (Encapsulation)

封装也称信息隐藏或者数据访问保护. 通过对变量, 函数或类进行设置访问权限.控制它们的对外访问限制.从而保护它们不被随便修改.

作用

封装如同一把智能锁

  1. 隐藏信息
  2. 保护数据
  3. 提高易用性
  4. 防止恶意修改

抽象 (Abstraction)

抽象是指如何隐藏方法的具体实现, 让调用者只关心方法提供了哪些功能, 并不需要知道这些功能是如何实现的.

抽象并不需要非得依靠接口类或抽象类这些特殊语法机制来支持. 如类的方法是通过编程语言中的"函数"这一语法机制来实现的, 通过函数包裹具体的实现逻辑, 这本身就是一种抽象. 调用者在使用函数时,只需要了解函数命名, 注释或者文档, 不需要研究函数内部具体实现. 直接就可以使用.

作用

抽象无处不在

  1. 简化复杂逻辑
  2. 隐藏具体实现

Tip: 抽象是一个非常通用的设计思想, 并不单单用在面向对象编程中, 也可以用来指导架构设计等

继承 (Inheritance)

继承是用来表示类之间的is-a关系.

继承分两种模式:

  1. 单继承
    1. 一个子类只继承一个父类
  2. 多继承
    1. 一个子类可以继承多个父类

作用

继承并非一剂良药, 请勿过度使用. 更加推荐"多用组全少用继承"的思想.

  1. 代码复用

多态 (Polymorphism)

多态是指子类可以替换父类.

实现多态特性

  1. 继承+方法重写
  2. 接口类语法
  3. duck-typing
    1. 只有一些动态语言才支持, 如python, javascript

作用

多态会72变

  1. 提高扩展性
  2. 提高复用性

Tip: 多态也是很多设计模式,设计原则,编程技巧的代码实现基础, 如策略模式, 基于接口而非实现编程, 依赖倒置原则, 里式替换原则, 利用多态去掉冗长的if-else语句等等.

本文来自学习王争 «设计模式之美» 笔记