封装, 抽象, 继承, 多态 是面向对象编程语言的四大特性. 而它们又分别承担什么职责呢. 实际编程中起什么作用呢.
封装 (Encapsulation)
封装也称信息隐藏或者数据访问保护. 通过对变量, 函数或类进行设置访问权限.控制它们的对外访问限制.从而保护它们不被随便修改.
作用
封装如同一把智能锁
- 隐藏信息
- 保护数据
- 提高易用性
- 防止恶意修改
抽象 (Abstraction)
抽象是指如何隐藏方法的具体实现, 让调用者只关心方法提供了哪些功能, 并不需要知道这些功能是如何实现的.
抽象并不需要非得依靠接口类或抽象类这些特殊语法机制来支持. 如类的方法是通过编程语言中的"函数"这一语法机制来实现的, 通过函数包裹具体的实现逻辑, 这本身就是一种抽象. 调用者在使用函数时,只需要了解函数命名, 注释或者文档, 不需要研究函数内部具体实现. 直接就可以使用.
作用
抽象无处不在
- 简化复杂逻辑
- 隐藏具体实现
Tip: 抽象是一个非常通用的设计思想, 并不单单用在面向对象编程中, 也可以用来指导架构设计等
继承 (Inheritance)
继承是用来表示类之间的is-a关系.
继承分两种模式:
- 单继承
- 一个子类只继承一个父类
- 多继承
- 一个子类可以继承多个父类
作用
继承并非一剂良药, 请勿过度使用. 更加推荐"多用组全少用继承"的思想.
- 代码复用
多态 (Polymorphism)
多态是指子类可以替换父类.
实现多态特性
- 继承+方法重写
- 接口类语法
- duck-typing
- 只有一些动态语言才支持, 如python, javascript
作用
多态会72变
- 提高扩展性
- 提高复用性
Tip: 多态也是很多设计模式,设计原则,编程技巧的代码实现基础, 如策略模式, 基于接口而非实现编程, 依赖倒置原则, 里式替换原则, 利用多态去掉冗长的if-else语句等等.
本文来自学习王争 «设计模式之美» 笔记