编程范式 | 青训营笔记

68 阅读2分钟

课程重点

  • 编程语言(机器语言、汇编语言、中级语言、高级语言)
  • 编程范式(过程式、面向对象、函数式编程、响应式编程)
  • 构建领域特定语言(词法解析、语法分析、工具生成、解释与编译)

课程内容

编程语言

image.png 几个典型的高级语言: c/c++: image.png image.png Lisp:(同c语言平行出现的一个流派):函数语言代表

  • 与机器无关
  • 列表:代码即数据
  • 闭包

image.png JavaScript:基于原型和头等函数的多范式语言

  • 过程式
  • 面向对象
  • 函数式
  • 响应式

image.png 小结一下: image.png

编程范式

image.png 根据这些特性,我们可以对编程语言进行分类,比如: image.png

过程式编程

  • 自顶向下 image.png
  • 结构化编程 image.png

JS中的面向过程 image.png 面向过程式编程有什么缺点?
面向过程具有几个问题:

  • 数据与算法关联弱
  • 不利于修改和扩充
  • 不利于代码重用

为什么后面会出现面向对象? 因为以上几个缺点,所以我们后面有了面向对象编程。

面向对象编程

  • 封装

将一些客观事物封装成类。关联数据与算法 image.png

  • 继承

让我们某一个对象可以获得另一个对象的属性特点,无需重写的情况下进行功能扩充 image.png

  • 多态

类中相同的方法在不同情况下的不同使用。不同的结构可以进行接口共享,进而达到函数的复用 image.png

  • 依赖注入

去除代码耦合 image.png 面向对象有五大原则:

  • 单一职责原则
  • 开放封闭原则
  • 里式替换原则
  • 依赖倒置原则
  • 接口分离原则

面向对象虽然解决了很多问题,但现在,我们更多的是推荐函数式编程。
那面向对象编程有什么缺点?又为什么我们推荐函数式编程? image.png

函数式编程

image.png

image.png 纯函数: image.png

image.png 函数组合: image.png Functor: image.png Monad: image.png Applocative:
直接对两个容器直接操作 image.png

响应式编程

它其实是异步/离散的函数式编程 image.png observable: image.png 操作符: image.png Monad: image.png 小结一下: image.png

领域特定语言

image.png 语言运行: image.png lexer image.png image.png 切分完之后就可以进行语法分析
Parser_语法规则 image.png 具体的语法对应有两种模式: LL:从左到右检查,从左到右构建语法树。 image.png LR:从左到右检查,从右到左构建语法树 image.png tools image.png visitor image.png 总结: image.png