编程范式|青训营笔记

71 阅读2分钟

这是我参与【第六届青训营】笔记创作活动的第4天~学习的内容是【编程范式】。

本节内容为编程范式Programming paradigm,即模范、典范之意,范式即模式、方法。是一类典型的编程风格,是指从事软件工程的一类典型的风格。

本次课程分为课程介绍、编程语言、编程范式和领域特定语言4个部分展开。

1 课程介绍

前端的主要编程语言为Java Script,JS融合了多种编程范式,前端开发人员需要根据场景在不同范式之间自如切换,所以掌握好不同范式(特别是函数式编程范式)的使用是很有必要的。

2 编程语言

截屏2023-05-13 下午10.22.44.png

编程语言包括机器语言、汇编语言、中级语言和高级语言4种,其中中级语言是面向过程的代表,如C语言,高级语言中,面向对象的代表如C++、Python,函数式代表lisp和多范式代表Java Scirpt。

3 编程范式

3.1 什么是编程范式

程序语言特性包括:是否允许副作用、操作的执行顺序、代码组织、状态管理、语法和词法5个部分。

3.2 常见编程范式

截屏2023-05-13 下午10.32.25.png

3.2.1 过程式编程

1.自顶向下

截屏2023-05-13 下午10.33.32.png

2.结构化编程

截屏2023-05-13 下午10.34.00.png

3.面向过程的问题 (1)数据与算法关联弱; (2)不利于修改和扩充; (3)不利于代码重用。

3.2.2 面向对象编程

分为封装、继承、多态和依赖注入4个部分。

1.封装:关联数据与算法

class Car{

  meter = 100
  speed = 100

  advance(meter){
 
    while (this.meter < meter){
      this.meter += this.speed;
    }
  }
  
  
  getSpec(){
    return `meter: ${this.meter}; speed: ${this.speed};`
  }
}

2.继承:无需重写的情况下进行功能扩充

class FlyCar extends Car {

  height = 100
  
  fly(height){
    while (this.height < height){
      this.height += this.speed
    }
  }

}

3.多态:不同的结构可以进行接口共享,进而达到函数复用

class FlyCar extends Car {

  height = 100
  
  fly(height) {
    while (this.height < height){
      this.height += this.speed;
    }
  }
  
  getSpec(){
    return super.getSpec() + `height:${this.height};`;
  }
}

4.依赖注入

截屏2023-05-13 下午10.48.40.png

5.面向对象编程的五大原则 (1)单一职责原则SRP
(2)开放封闭原则OCP
(3)里式替换原则LSP
(4)依赖倒置原则DIP
(5)接口分离原则ISP

6.面向对象的问题:

面向对象编程语言的问题在于,它总是附带着所有它需要的隐含环境。你想要一个香蕉,但得到的却是一个大猩猩拿着香蕉,而且还有整个丛林。

(1)运行效率低; (2)类库庞大; (3)类库可靠性。

3.2.3 函数式编程

函数类编程主要包括First Class Function、Pure F unction、Currying、Composition、Functor、Monad和Applicative。

截屏2023-05-13 下午11.01.12.png

3.2.4 响应式编程

截屏2023-05-13 下午11.03.16.png

4 领域特定语言

领域特定语言,即应用于特定领域的语言,如HTML、SQL等。

截屏2023-05-13 下午11.10.13.png

5 个人总结

通过今天的学习,我了解了不同编程范式的起源和使用场景,对不同编程范式的使用有了简要的了解。因为自己之前学Python,所以一直只觉得面向对象是好的,真的是有点井底之蛙的感觉了,当然今天学后面几种编程范式的时候因为之前没有接触过,所以主要还是第一遍了解为主,希望可以尽快掌握相关工具和模式~