编程范式(programming paradigm),指的是计算机编程的基本风格或典范模式。其中paradigm意思为〔展示工作原理或制作方法的〕模型。
主要的编程范式有命令式编程,声明式编程。
命令式编程的主要思想是关注计算机执行的步骤,即一步一步告诉计算机先做什么再做什么。
声明式编程是以数据结构的形式来表达程序执行的逻辑。它的主要思想是告诉计算机应该做什么,但不指定具体要怎么做。
SQL 语句就是最明显的一种声明式编程的例子, 除了 SQL,网页编程中用到的 HTML 和 CSS 也都属于声明式编程。
通过观察我们可以发现声明式编程有一个特点是它不需要创建变量用来存储数据。 另一个特点是它不包含循环控制的代码,如 for, while。
最常用的范式有:过程式编程,面向对象编程(OOP),函数式编程(FP),响应式编程
面向过程编程(Procedural programming)的核心在于模块化,在实现过程中使用了状态,依赖了外部变量,导致很容易影响附近的代码,可读性较低,后期的维护成本也较高。
面向过程问题:
- 数据与算法关联弱
- 不利于修改和扩充
- 不利于代码重用
面向对象编程(Object-oriented programming)的核心在于抽象,提供清晰的对象边界。结合封装、集成、多态特性,降低了代码的耦合度,提升了系统的可维护性。C++ 和 之后的 Java 成为主流。
面向对象编程:
- 封装
- 继承
- 多态
- 依赖注入
面向对象编程五大原则:
- 单一职责原则
- 开放封闭原则
- 里式替换原则
- 依赖倒置原则
- 接口分离原则
函数式编程(Functional Programming)的核心在于“避免副作用”,不改变也不依赖当前函数外的数据。结合不可变数据、函数是第一等公民等特性,使函数带有自描述性,可读性较高。
函数式编程优势:
- 可缓存
- 可移植
- 可测试
- 可推理
- 可并行
响应式编程是一种基于异步数据流驱动、响应式、使用声明式范式的编程模型,需要遵循一定的响应式编程开发规范,并且有具体的类库实现。响应式编程基于数据流而不是控制流进行业务逻辑的推进。
电子表格软件是“响应式典范”。
如上图,“单价”和“数量”的任何变动,都会被引用(“监听”)它的单元格实时更新计算结果,如果还有图表或数据透视图引用了这块数据,那么也会相应变化,做到了实时响应。
编程语言的发展就是一个逐步远离计算机硬件,向着待解决的领域问题靠近的过程。所以,编程语言后续的发展方向就是探索怎么更好的解决领域问题,也就是领域驱动设计(Domain-driven Design、DDD)。