前言:
面向对象相比面向过程有哪些优势? 面向过程真的过时了吗?
大家熟知的编程范式有: 面向过程编程, 面向对象编程, 函数式编程
痛点:
普遍存在用面向对象编程语言, 编写面向过程风格的代码, 没有发挥出面向对象编程的优势. 相当于手握一把屠龙刀, 却当做一把普通的刀剑来使用
提出问题:
- 什么是面向过程编程与面向过程编程语言?
- 面向对象编程相比面向过程编程有哪些优势?
- 为什么说面向对象编程语言比面向过程编程语言更高级?
- 有哪些看似是面向对象实际是面向过程的代码?
- 在面向对象编程中, 为什么容易出现面向过程风格的代码?
- 面向过程编程和面向过程编程就真的无用武之地了吗?
一. 什么是面向过程编程与面向过程编程语言?
1.1 回顾
面向对象编程: 是一种编程范式或编程风格. 它以类或对象作为组织代码的基本单元, 并将封装, 抽象, 继承, 多态四大特性, 作为代码设计和实现的基石.
面向对象编程语言: 首先是一种编程语言, 支持类或对象的语法机制, 并利用此语法机制, 能方便的实现面向对象编程四大特性的编程语言.
1.2 定义
面向过程编程: 也是一种编程范式或风格. 它以过程(可理解为方法, 函数, 操作)作为组织代码的基本单元. 以数据(可理解为成员变量, 属性)与方法相分离为最主要的特点. 是一种流程化的编程风格, 通过拼接一组顺序执行的方法来操作数据完成一项功能.
面向过程编程语言: 首先也是一种编程语言, 最大的特点是不支持类和对象两个语法概念, 不支持丰富的面向对象特性.
二. 面向对象编程相比面向过程编程有哪些优势?
-
OOP更加能够应对复杂程序的开发
面向过程编程是流程化的, 一上来思考的是将流程拆解为一个个方法; 面向对象编程是网状的, 是以类为思考对象, 先考虑业务建模, 然后按照流程, 将类组织成程序. 也就是类分析(OOA) --> 类设计(OOD) --> 面向对象开发(OOP)
-
OOP风格的代码更易复用, 易扩展, 易维护 因为面向对象四大特性的存在, 让面向对象编程易复用, 易维护, 易扩展
封装: 以类为组织代码的方式, 将数据和方法绑定在一起, 通过访问权限, 提供有限的方法, 提高了代码的易维护性
抽象: 函数本身就是抽象, 当调用函数时, 我们不了解函数的具体实现, 只需要知道其功能即可. 面向对象和面向过程编程都支持抽象, 只不过面向过程不具备其它的特性, 如: 基于接口实现的抽象, 在不改变原有实现情况下, 轻松扩展出新的逻辑. 提高的代码的扩展性
继承: 如果2个类有相同的属性和方法, 我们就可以将共同的代码抽取到父类, 让2个子类继承父类. 提高了代码的复用性
多态: 当我们修改一个功能时, 可以通过实现一个新的子类方式, 在子类中重写原来的功能逻辑, 用子类替换父类. 遵从了对修改关闭, 对扩展开放的设计原则, 从而提高了代码的扩展性. 利用多态特性, 不同的类对象可以传递给相同的反复噶, 执行不同的代码逻辑, 提高了代码的复用性
- OOP语言更加人性化, 更加高级, 更加智能 总结: 面向对象语言更加智能, 让用户更加专注于业务本身, 而较少的去考虑计算机的实现
三. 课堂讨论
3.1 讨论一
文章中提到面向对象编程更容易应对大规模复杂程序的开发, 但像Unix, Linux这些复杂的系统, 是基于C语言这种面向过程的编程语言开发的, 你如何看待这种现象, 与上面讲的相矛盾吗?
答:
- 首先面向过程编程语言不代表不能实现面向对象思想
- 操作系统的复杂度相对业务系统的快速迭代是另一个维度, 系统更加注重性能和稳定, 而业务系统更加看重维护, 复用, 拓展
- 操作系统频繁跟硬件打交道, "低级"的语言更快更简洁