一、What——什么是面向对象
从本质上来看,面向对象是一种编程思想,是程序员解决问题的一种思维方式,也就是我们所说的编程范式。
二、Where——面向对象的由来
我们的程序是为了解决现实世界中的问题而存在的,它是把现实中的世界通过建模的方式模拟到计算机中来运行。随着科技的进步,人们看待世界的方式会发生变化,程序员模拟世界的思维方式也会发生变化。
编程范式的发展
非结构化编程——>结构化编程——>面向对象编程——>多范式融合
编程范式的发展就是一个逐步远离计算机,向着待解决问题的领域靠近的过程,它存在的意义就在于解决领域问题。每种编程范式都各有优缺点,应用于不同的场景来解决问题。
面向对象就是以更小的颗粒度来对软件进行复用。它将数据与其紧密耦合的方法放在一个逻辑边界内,这个逻辑边界就是对象。用户只能访问对象的public方法,而看不到对象的内部。
以前面向过程的思想是 程序= 数据结构+算法,而现在面向对象的思想是 程序 = 对象 + 关系。
三、 How——面向对象的应用
面向对象的核心就是如何更好的建立对象,以及处理对象和对象的关系,从而能够使对象达到可复用、可扩展、可维护。也就是我们常说的解耦合,从而使我们的程序达到“高内聚、低耦合”。
类&对象
百度百科定义
“类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础。类是一种用户定义的引用数据类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。
类与对象是一个抽象与具体的概念,类是抽象的,而对象是具体的。可以用一个成语来进行解释:物以类聚。“物”是代表的是“对象”,“类”代表的是“类”,而“聚”代表的是“集合”。
关系
对象和对象之间的关系无非就两类:依赖 和 关联
- 临时关系——依赖(使用关系,例如:吃饭是使用筷子,这就是一个临时的关系。不吃饭的时候我们就不需要筷子)
- 持久关系——关联(继承、聚合、组合)
如何实现解耦合?
解耦合的方式就涉及到了面向对象的三大特性: 封装、继承、多态。而具体在关系中是如何进行体现的呢?
- 在依赖关系中(在方法中解耦合,由强变弱)
- 反射
- 代理
- 回调
- ……
- 在关联关系中(由内部关联变为注入关联)
- 集合
设计模式与面向对象的关系
设计模式就是面向对象思想应用的一种具体的体现,它是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。