# 面向对象(OOP)基本概念

**面向对象编程** —— `Object Oriented Programming` 简写 `OOP`

## 目标

* 了解 **面向对象** 基本概念

## 01. 面向对象基本概念

* 我们之前学习的编程方式就是 **面向过程** 的
* **面相过程** 和 **面相对象**，是两种不同的 **编程方式**
* 对比 **面向过程** 的特点，可以更好地了解什么是 **面向对象**

### 1.1 过程和函数（科普）

* **过程** 是早期的一个编程概念
* **过程** 类似于函数，只能执行，但是没有返回值
* **函数** 不仅能执行，还可以返回结果

### 1.2 面相过程 和 面相对象 基本概念

#### 1) **面相过程** —— **怎么做**？

1. 把完成某一个需求的 `所有步骤` `从头到尾` 逐步实现
2. 根据开发需求，将某些 **功能独立** 的代码 **封装** 成一个又一个 **函数**
3. 最后完成的代码，就是顺序地调用 **不同的函数**

**特点**

1. 注重 **步骤与过程**，不注重职责分工
2. 如果需求复杂，代码会变得很复杂
3. **开发复杂项目，没有固定的套路，开发难度很大！**

![](https://3602027465-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsFiZ1R75jCX4pIoBwrKa%2Fuploads%2FuTkhWA28ITc3D9ZUYmtV%2F001_%E9%9D%A2%E5%90%91%E8%BF%87%E7%A8%8B.png?alt=media\&token=0a072c43-7a37-411a-a7ef-ba4637b72a47)

#### 2) **面向对象** —— **谁来做**？

> 相比较函数，**面向对象** 是 **更大** 的 **封装**，根据 **职责** 在 **一个对象中 封装 多个方法**

1. 在完成某一个需求前，首先确定 **职责** —— **要做的事情（方法）**
2. 根据 **职责** 确定不同的 **对象**，在 **对象** 内部封装不同的 **方法**（多个）
3. 最后完成的代码，就是顺序地让 **不同的对象** 调用 **不同的方法**

**特点**

1. 注重 **对象和职责**，不同的对象承担不同的职责
2. 更加适合应对复杂的需求变化，**是专门应对复杂项目开发，提供的固定套路**
3. **需要在面向过程基础上，再学习一些面向对象的语法**

![](https://3602027465-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsFiZ1R75jCX4pIoBwrKa%2Fuploads%2FOjPvhlIKEHh4mCijPvyx%2F001_%E6%A4%8D%E7%89%A9%E5%A4%A7%E6%88%98%E5%83%B5%E5%B0%B8.png?alt=media\&token=1810377a-3bd1-48b2-b54f-c4b9b1823a54)

![](https://3602027465-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsFiZ1R75jCX4pIoBwrKa%2Fuploads%2FH2YEUlq5ewMtWDUHI99b%2F001_%E6%A4%8D%E7%89%A9%E5%A4%A7%E6%88%98%E5%83%B5%E5%B0%B8%E7%B1%BB%E5%9B%BE.png?alt=media\&token=14f0a43a-1d3a-40ed-9a30-7c9ce88cccf3)
