1 min read
浅谈编程范式

编程范式

结构化编程

结构化编程对程序控制权的直接转移进行了限制和规范

结构化编程第一次出现于 1960 年,当时的计算机科学家 Edsger W. Dijkstra 提出了结构化编程的概念。

核心思想

  • 使用基本控制结构
    • 顺序(按照代码的书写顺序执行)
    • 选择(使用 if-else 或 switch-case 进行条件判断)
    • 循环(使用 for、while、do-while 等循环控制代码重复执行)
  • 避免使用 goto 语句
  • 避免使用可变数据

在结构化出现之前,由于使用 goto 语句,代码的书写顺序和执行顺序不一致,代码的可读性和可维护性很容易被破坏。结构化编程的范式出现后,可以通过选择和循环代替 goto 语句。

面向对象编程

面向对象编程对程序控制权的间接转移进行了限制和规范

1966 年由 Ole Johan Dahl 和 Kriste Nygaard 在论文中总结归纳出来的程序设计方法。

核心思想

  • 封装
  • 继承
  • 多态
  • 抽象

函数调用堆栈(call stack frame)可以被挪到堆内存区域里,这样函数定义的本地变量就可以在函数返回之后继续存在。这个函数就成为了一个类(class)的构造函数,而它所定义的本地变量就是类的成员变量,构造函数定义的嵌套函数就成为了成员方法(method)

函数式编程

函数式编程对程序的状态和数据的不可变性进行了限制和规范

1960 年,数学家和数学家的朋友 Haskell Curry 提出了函数式编程的概念。

核心思想

  • 函数是一等公民
  • 纯函数
  • 不可变性
  • 递归

总结

它们都从某一方面限制和规范了程序员的能力。没有一个范式是增加新能力的。也就是说,每个编程范式的目的都是设置限制。这些范式主要是为了告诉我们不能做什么,而不是可以做什么。这三个编程范式分别限制了 goto 语句、函数指针和赋值语句的使用。

多态是我们跨越架构边界的手段,函数式编程是我们规范和限制数据存放位置与访问权限的手段,结构化编程则是各模块的算法实现基础。 这和软件架构的三大关注重点不谋而合:功能性、组件独立性以及数据管理

思考

对于古早的程序员们来说,他们缺少高级的编程语言,对软硬件的操作能力更加强大,没有限制的能力反而阻碍了软件规模的扩张。在增加各种限制后反而增加了软件规模的可能性。人在没有节制的下可以毫无顾忌的熬夜、饮酒、刷短视频,看起来好像比自律的人更加自由,实际却被欲望控制,无法持续做长远的事情。