- 面向对象编程
- 面向切面编程
- 函数式编程
- 响应式编程
- 面向过程编程(指令、命令式编程)
面向对象编程
- 特征
- 类与对象
类:定义了数据的格式以及针对该数据进行处理的方法。
对象:对象就是根据类的定义来分配内存以及可以调用数据处理方法的实例。
- 消息传递
指对象通过接受消息、处理消息、传出消息所触发的一系列功能。
- 封装性
对外隐藏具体实现只暴露抽象接口以调用实现复杂的功能,内部实现通过调用各种子函数或描述逻辑实现具体功能。
- 继承
通过指定父类,可以继承父类允许继承的属性与方法,可以在父类的继承上进行重写或者添加以扩充。
- 多态
指通过继承的产生的不同子类,可以通过调用同一方法有不同的效果。
- 抽象性
将现实问题抽象简单化,然后用简单建模来表达运算问题。
- 类与对象
- 编程思想
面向对象编程,就是以对象为中心,然后将所有与对象相关的数据变量与数据处理相关的函数封装到对象里面,然后编程的时候就通过构建各对象,然后描述对象之间的消息传递关系来完成业务需求。
面向过程编程
- 编程思想
面向过程编程就是以过程问中心的编程思想,也就是遇到一个问题,我们就去分析问题,然后得出解决问题所需的一系列顺序操作,然后实现这些顺序的操作,从而实现目的。
在c语言编程中,主要使用的编程思想就是面向过程,所以我们解决问题的时候,总是先定义数据结构,然后根据最后的输出,设计一系列针对数据结构进行处理的函数,然后实现相应的功能。
- 与面相对象编程对比
简单的例子:汽车发送、汽车到站。
面向过程:以处理过程为中心,构建数据结构,把数据丢进汽车发送函数处理,得到汽车发送状态数据,再将数据丢进汽车到达的处理函数,得到最终结果。
面向对象:以汽车对象为中心,创建汽车对象,并实现汽车发送、汽车到站的共有方法,汽车对象调用发送方法然后再调用到站方法,完成需求,对象可输出最终结果。
响应式编程
- 编程思想
响应式编程是一种面向数据流和变化传播的编程范式。所以在编程中设计数据流的传播流向与流动节点中的处理才是最为核心的事务,其中Verilog也可以理解为响应式编程,以为verilog本质上就是设计数字电路的通道,通过通道的流向的改变而实现电路中的数字信号,从而实现功能。
响应式编程最初是为了简化交互用户界面的创建和实时系统动画的绘制而提出来的一种方法,但本质上是一种通用的编程范式。 - 特征
- 消息传递或事件传递
- 可灵活伸缩
- 容错可恢复
- 响应式
- 使用该思想设计的框架
- RX系列
- bacon.js
- RAC(ReactiveCocoa)
函数式编程
- 编程思想
属于“结构化编程”的一种,主要思想就是把运算过程尽量写成一系列嵌套的函数调用。such as:
- 特征
- 函数“”第一等公民“
函数与数据类型的地位一样,可以作为赋值给其它变量,也可以作为参数传给另一个函数,甚至作为函数的返回值。 - 只用“表达式”,不用“语句”
”表达式“式单纯的运算过程,有返回值,”语句“是执行某种操作,没有返回值。
”语句“属于对系统的读写操作。
函数式编程要求尽量使用表达式,而尽量减少对io的操作(限制在最少)。 - 没有“副作用”(side effect)
所谓“副作用”(side effect),指的就是函数内部与外部互动的请求(如,修改了全局变量),产生运算以外的结果。
函数式编程强调没有副作用,意味着保持函数独立,也就是所有功能都是返回一个新的值,没有其它行为,尤其不能修改外部变量的值。 - 不修改状态
只返回新的值,不修改系统变量。 - 引用透明
函数实现只依赖于输入的参数,不依赖于外部变量,所有无论何时,输入的变量相同则输出参数也相同。
- 函数“”第一等公民“
- 函数式编程的优点
- 代码简介:函数式编程大量使用函数,减少了代码的重复,因此程序比较短,开发速度较快。
- 接近自然语言:
add(1,2).multiply(3).subtract(4)
merge([1,2],[3,4]).sort().search("2”) - 更方便管理与测试:因为每个函数都是独立没依赖的
- 并发编程:因为每个函数都是独立的,所以一系列函数所构成的功能都是独立的,所以不涉及锁的功能,可以无限增加线程以处理,类似fpga的流水线以实现并发编程。
- 代码简介:函数式编程大量使用函数,减少了代码的重复,因此程序比较短,开发速度较快。
- 可以直接使用该编程思想的语言
- swift
- python
面向切面编程
- 编程思想
这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想,就是面向切面的编程。实际上就是在编程逻辑的时候只关注核心逻辑,将次要、相同的逻辑通过动态嵌入的方式添加到对应的函数中,从而实现即解耦而核心业务逻辑清晰的效果,是一种不错的编程范式。
并行编程
略。
参考文章: