编程范式 | 青训营笔记

116 阅读4分钟

编程语言

  • 机器语言
  • 汇编语言
  • 中级语言(C语言,面向过程语言的代表)
  • 高级语言(
    • C++面向对象的代表,包括继承、虚函数、多态
    • lisp:函数式语言的代表、没有指针的操作(与机器无关),将数据构建为列表的格式,有闭包这个概率
    • JavaScript:基于原型和头等函数的多范式语言,过程式、面向对象、函数式、响应式

编程范式

什么是编程范式: 我们可以根据是否允许副作用、操作的执行顺序、代码组织、状态管理、语法和词法对程序语言进行分类。 比如可以把编程范式分为两大类

  • 命令式
    • 面向对象
    • 面向过程
  • 函数式
    • 声明式
    • 响应式

过程式编程为自顶向下的结构化编程 由于面向过程存在以下的问题:

  • 数据与算法关联弱
  • 不利于修改和扩充
  • 不利于代码重用 因此在此基础上诞生了面向对象编程(经典的三大特性:封装、继承、多态)以及依赖注入的特性。

面向对象编程

三大特性

封装:封装是把客观事物抽象成类,并且把自己的属性和方法让可信的类或对象操作,对不可性的隐藏。 继承:继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 多态:多态性(polymorphism)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。这就意味着虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。 实现多态,有二种方式,覆盖,重载。

  • 覆盖,是指子类重新定义父类的虚函数的做法。
  • 重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同 依赖注入:依赖注入(Dependency Injection, DI)是一种设计模式,其作用是去除类之间的依赖关系,实现松耦合,以便于开发测试。依赖注入是通过将依赖的对象从类内部移动到类的外部,在类的构造函数或者方法中注入依赖的对象。这样做的好处是,使得类与依赖的对象解耦合,使得代码更加灵活、可扩展和可维护。

五大原则:

单一职责原则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 lSP)

函数式编程

在js中,我们使用的是函数式编程,其优势在于可缓存、可移植、可测试、可推理、可并行。 其中的组合函数:组合(Compose)函数是在JavaScript开发过程中一种对函数的使用技巧、模式: (也就是函数的嵌套使用)

响应式编程

js中的响应式编程也是很重要的(例如Vue、react都是响应式)

响应式编程中的观察者模式:

它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象发生变化时,它的所有观察者都会收到通知并自动更新。 在观察者模式中,有两个核心角色:主题对象和观察者对象。主题对象维护一个观察者列表,并提供添加、删除和通知观察者的方法;观察者对象则定义了接收通知并进行更新的方法。

响应式编程中的迭代器模式:

迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象 的内部表示。迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即 使不关心对象的内部构造,也可以按顺序访问其中的每个元素。迭代器模式是一种相对简单的模式,简单到很多时候我们都不认为它是一种设计模式。目前的绝大部分语言都内置了迭代器(例如js中数组的forEach函数)