什么是面向对象
**面向对象编程(Object-Oriented Programming,OOP)是一种编程思维方式和编码架构**,是一种 **对现实世界理解和抽象的方法**,是计算机编程技术发展到一定阶段后的产物。
> **什么是对象**:对象是客观存在的事物,可以说任何客观存在的都是可以成为对象,一台电脑,一直钢笔,一个人,一辆轿车等等,都可以称为对象
面向对象的基本特点:
- **抽象**:对同一类型的对象的共同属性和行为进行概括,形成**类(class)** 。类是构造对象的模板或蓝图。由类构造(construct) 对象的过程称为创建类的**实例 (instance )**.
- **封装**:将抽象出的数据、代码封装在一起,隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性
- **继承**:在已有类的基础上,进行扩展形成新的类,提高代码复用性。继承是多态的前提
- **多态**:所谓多态就是同一函数名具有不同的功能实现方式
在面向对象之前,比如 C 语言就是**面向过程编程(Procedure-Oriented Programming,POP)**的,这两者的**区别**就在于:
- 面向过程是具体化的,流程化的,解决一个问题,你需要一步一步的分析,一步一步的实现。
<img src="https://cs-wiki.oss-cn-shanghai.aliyuncs.com/img/20210106130541.png" style="zoom:67%;" />
- 面向对象是模型化的,你只需抽象出一个类,这是一个**封闭的盒子**,拥有数据也拥有解决问题的方法。需要什么功能直接使用就可以了,不必去一步一步的实现。
<img src="https://cs-wiki.oss-cn-shanghai.aliyuncs.com/img/20210106143718.png" style="zoom:67%;" />
> 💬 举个形象的例子来区分 OOP 和 POP:有一天你想吃红烧牛肉了,你有两个选择
>
> - 面向过程:自己买材料,切菜切肉,炒菜炒肉,盛到盘子里
> - 面向对象:去饭店,跟老板说来一份红烧牛肉
>
> 但是如果你突然不想吃红烧牛肉了,想吃 xxxx,对于面向过程来说,你还需要重新买菜重新做。而面向对象只需要跟老板说把红烧牛肉换成 xxxx 就可以了。
>
> 这就是两者的区别了,**饭店/老板就是一个黑盒子**,我们要什么直接去拿就好了,不用我们自己一步一步的去实现它。
