什么是面向对象编程
面向对象是一种设计思想,面向对象的核心是 类 (class)和 对象 (object),通过类来抽象现实世界,通过对象来模拟现实世界。 面向对象的难点在于抽象,抽象的好坏很大程度决定了整个程序设计的好坏。
面向对象的设计中会有很多的层次结构,然后现实世界很多时候并没有那么多层次结构, 这时,如果强行用面向对象的设计方式,反而会把问题复杂化,也会让应对变化没那么容易,所以产生了 设计模式 这种概念。 设计模式被很多人推崇,个人感觉设计模式进一步让设计远离现实世界,把对解决实际问题的关注变为对重构代码的关注。
当然,面向对象也有它明显的优势,在代码组织上结构清晰,有严格的访问控制,同时简单易懂,相对于函数式编程,更容易上手。
面向对象的核心概念
- 封装
- 继承
- 多态
什么是函数式编程
函数式编程其实是比面向对象更早的编程方式,但是由于其对使用者有更高的要求(主要在代码组织方面,将实际问题转换为函数方面), 所有面向对象设计方式出现之后,一度被忽略,成为一种小众的编程方式。
函数式的编程范式使得它更加适用于复杂数据处理,高并发的环境,这也是函数式编程最近又兴起的原因之一。
- 函数是一等公民,也就是函数和变量等其他数据类型一样使用
- 没有副作用,函数保持独立,和外部的交互仅限于 函数参数 和 返回值
函数式编程核心概念
- 不变性
- 纯函数
- 高阶函数
函数式 和 面向对象 比较
面向对象核心是状态,函数式核心是数据
所以面向对象更适合对业务(复杂的状态变化)的设计,而函数式适合对功能(复杂的数据变化)的设计, 我想,这也是面向对象应用广泛的原因之一,毕竟大部分人接触的都是业务开发。
随着面向对象设计方式的发展,理论是越来越完善,复杂度也越来越高,面向对象的设计方式很多时候不再把目光投向实际的问题, 而是追求所谓的设计技巧。 函数式编程则更加直接,将问题转化为对数据的处理,关注点更容易集中在问题本身。
函数式 和 AI
函数式编程能够再度火起来,和 AI 也有一定的关系,机器学习本身就是对大量数据的学习和处理,通过数据来训练出算法。 这种模式更加适合函数式编程,而面向对象面对这种未知结果的学习,抽象会非常困难。