编程范式

138 阅读3分钟

02编程语言

  1. 机器语言:不同的机器有不同的语言
  2. 汇编语言:使用字母代替数字,具有一定的可移植性
  3. 高级语言:高级语言具有一定的逻辑性,先将高级语言转变为汇编语言,再转化为机器语言
  4. 回忆一些高级语言:c /c++
  5. javaScript: 基于原型和头等函数的多范式语言

03编程范式

定义

  1. 命令式:
    1. 面向过程
    2. 面向对象
  2. 声明式:
    1. 函数式
    2. 响应式

过程式编程

  1. 自顶向下

面向对象编程

  1. 依赖注入(DI) 这是一种设计模式,作用是去除类之间的依赖关系,实现松耦合,便于开发测试。 例如:A类要依赖B类,A类不再直接创建B类,而是把这种依赖关系配置在外部xml文件(或java config文件)中。

面向对象编程 五大原则

  1. 单一职责原则
  2. 开放封闭原则
  3. 里式替换原则
    • 如果S是T类的子类,对于S类的任意对象,如果将他们看做是T类型的对象,那么该对象的行为理应与期望中的一致。
    • 与期望一致的替换:不管是哪种派生类的实现,都与接口或者基类方法的期望行为一致;通俗来讲,就是他们遵守同一种规则,子类在父类的规则下实现方法。
    • 违反此规则带来的危害:反直觉,不可读,不可用
  4. 倒置原则 :
    • 在设计代码结构时,高层模块不应该依赖底层模块,二者都应该依赖其抽象。
    • 抽象不应该依赖细节,细节应该依赖抽象。通过依赖倒置,减少类与类之间的耦合性,提高系统稳定性,提高代码的可读性和可维护性,减少修改程序造成的风险。
  5. 接口分离原则 :将大接口按人类的逻辑拆分为一个一个小接口,客户端只使用自己需要的接口来实例化对象。

函数式编程

  1. 函数是第一等公民
  2. 纯函数无副作用
  3. 高阶函数(闭包)
  4. 优势(鼓励纯函数)
    • 不依赖外部环境,不改变外部环境
    • 可缓存,移植,测试,推理,并行
  5. Currying
    1. 解决参数重复传入问题
    2. 将一些重复的参数放入闭包中,在下次传参时直接传入新的参数
  6. 组合
    1. 利用一些规则,对代码进行优化简洁
  7. Functor
    1. 可以当做容器类的操作,支持对容器内元素进行操作
    2. 将一些操作封装到容器中,通过容器进行操作
  8. Monad
    1. 去除嵌套容器的容器类型
  9. Applicative
    1. 直接对两个容器直接操作

响应式编程

  1. Observeable
    1. 观察者模式
    2. 迭代器模式
    3. 超集
  2. 操作符
    1. 操作符构成数据管道,对数据进行转换,合并,过滤,异常处理,多播
  3. Monad
    1. 去除嵌套的Observeable

领域特定语言

应用于特定场景的语言

语言运行

  1. lexer
  2. Parser语法规则
    1. 上下文无关的语法规则
    2. Parser_LL:从右到左检查,从右到左构建语法树
    3. Parser_LR:从左到右检查,从右到左构建语法树
  3. tools
  4. visitor