编程范式

98 阅读2分钟

编程范式

image.png

03编程范式

程序语言特性:

  • 是否允许副作用
  • 操作的执行顺序
  • 代码组织
  • 状态管理
  • 语法和词法
  • 常见编程范式
    • 命令式(面向过程:把操作用过程进行分组、面向对象:根据操作和对应状态进行分组):侧重于程序员如何操作机器改变状态
    • 声明式(函数式:通过一系列函数如何来声明逻辑、响应式:通过数据流和印证函数来得到结果)程序员声明想要的结果而进行一些操作

过程式编程

  • 自顶向下

image.png

  • 结构化编程:是过程式编程的最佳实现

image.png

面向过程式编程有什么缺点?

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

面向对象编程特点

  • 封装:把客观的事物封装成具体的类
  • 继承:无需重写的情况下进行功能扩充,可以让某个类型的对象可以获得另一个类型的对象的属性和方法,支持按级分类的概念
  • 多态:是指一个类持相同的方法在不同的情境下有不同的表现形式。不同的结构可以进行接口共享,进而达到函数复用
  • 依赖注入:去除代码耦合

面向对象编程——五大原则

  • 单一职责原则SRP(Single Responsibility Principle)
  • 开放封闭原则OCP(Open-Close Principle)
  • 里氏替换原则LSP(the Liskov Substitution Principle LSP)
  • 依赖倒置原则DIP(the Dependency Inversion Principle DIP)
  • 接口分离原则ISP(the Interface Segregation Principle ISP)

面向对象编程有什么缺点?

image.png

函数式编程_Pure Function

  • 优势
  • 可缓存
  • 可移植
  • 可测试
  • 可推理
  • 可并行

函数式编程_Functor

可以当作容器的类型,类型支持对容器内元素进行操作
常见的Functor:Array(Iterable).map,Promise.then

函数式编程_Monad

可以去除嵌套容器的容器类型
常见monad:Array.flatMap Promise.then

函数式编程_Applicative

对两个容器直接操作
一些规则: image.png

响应式编程

异步/离散的函数式编程(数据流、操作符:过滤、合并、转化、高阶)

响应式编程_Observable

  • 观察者模式(发布者)
  • 迭代器模式
  • Promise/EventTarget超集

image.png

响应式编程_操作符

响应式编程的“compose”

  • 合并
  • 过滤
  • 转化
  • 异常处理
  • 多播

响应式编程_Monad

去除嵌套的Observable
总结

image.png