编程范式笔记 | 青训营笔记

105 阅读5分钟

编程语言

机器语言

机器语言是**用二进制代码表示的计算机能直接识别和执行的一种机器指指令系统令的集合。**计算机只能识别机器语言。

它具有计算机可以直接执行、简洁、运算速度快等优点,但它的直观性差,非常容易出错,程序的检查和调试都比较困难,此外对机器的依赖型也很强。

汇编语言

汇编语言是面向机器的程序设计语言,它是为了解决机器语言难以理解和记忆的缺点,用易于理解和记忆的名称和符号表示机器指令中的操作码,这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言;于是汇编语言亦称为符号语言。

使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编程序把汇编语言翻译成机器语言的过程称为汇编。

中级语言

面向过程代表——C语言

面向过程:给出计算机全部操作的具体过程.包含以下两方面内容:对数据的描述,在程序中要指定数据的类型和数据的组织形式,即数据结构;对操作的描述,即操作步骤,也就是算法

  • 可对位、字节、地址直接操作
  • 代码和数据分离倡导结构化编程
  • 功能齐全:数据类型和控制逻辑多样化
  • 可移植能力强

高级语言

C++:面向对象语言代表

面向过程编程强调的是完成既定目标需要完成哪些步骤。总结完步骤之后,把所有步骤走完也就达到了既定目标了,所以一个目标就是各个步骤的糅合的结果。常用的面向过程的语言有 C、Fortran、Basic、Pascal 等。。

  • C with Classes

  • 继承

    继承是面向对象程序设计中最重要的一个概念。继承允许依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行效率的效果。当创建一个类时,不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类,新建的类称为派生类。

  • 权限控制

    C++ 通过 publicprotectedprivate 三个关键字来控制成员变量和成员函数的访问权限(也称为可见性),分别表示:公有的、受保护的、私有的。当一个类派生自基类,该基类可以被继承为 publicprotectedprivate 几种类型。继承类型是通过访问修饰符来指定的。几乎不使用 protectedprivate 继承,通常使用 public 继承。派生类可以访问基类中所有的非私有成员。因此基类成员如果不想被派生类的成员函数访问,则应在基类中声明为 private

  • 虚函数

  • 多态

Lips:函数式语言代表

函数式编程是一种编程范式,它将电脑运算视为函数运算,并且避免使用程序状态以及易变对象。函数式语言具有较强的组织数据结构的能力,可以把某一数据结构(如数组)作为单一值处理;可以把函数作为参数,其结果也可为函数,这种定义的函数称为高阶函数。程序就是函数,程序作用在结构型数据上,产生结构型结果,从根本上改变了冯·诺伊曼式语言的“逐词”工作方式

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

JavaScript

基于原型和头等函数的多范式语言

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

编程范式

程序语言特性

  • 是否允许副作用
  • 操作的执行顺序
  • 代码组织
  • 状态管理
  • 语法和词法

编程范式分类

  • 命令式

    • 面向过程

      • 自顶向下
      • 结构化编程

      存在问题

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

      • 封装

        关联数据和与算法

      • 继承

        无需重写的情况下进行功能扩充

      • 多态

        不同结构可以进行接口共享,进而达到函数复用

      • 依赖注入*

        去除代码耦合

      五大原则

      • 单一职责原则SRP
      • 开放封闭原则OCP
      • 里氏替换原则LSP
      • 依赖倒置原则DIP
      • 接口分离原则ISP

      存在问题

      有很多隐含条件

  • 声明式

    • 函数式(推荐)

      • 函数是“第一等公民”
      • 纯函数/无副作用
      • 高阶函数/闭包

      特性

      • 聚合转发

      • 纯函数

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

        Currying 是函数式编程中的一个技巧,它是把多个参数的函数变换成单参数的函数,并返回一个新函数,这个新函数处理剩下的参数。这样做的目的是为了让函数更加灵活,可以部分求值、惰性求值、提前绑定等特性,能够在原有函数的基础之上创造出更多更灵活的用法

      • Composition

        • 手动组合
        • 自动组合规则
      • Functor

      • Monad

        可以去除嵌套容器的容器类型

      • Applicative

        直接对两个容器操作

    • 响应式(RxJs)

      • 异步/离散的函数式编程
        • 数据流
        • 操作符
          • 过滤
          • 合并
          • 转化
          • 高阶
      • Observable
        • 观察者模式
        • 迭代器模式
        • Promise/EventTarget超集*
      • 操作符,响应式编程的“compose”
        • 合并
        • 过滤
        • 转化
        • 异常处理
        • 多播
      • Monad
        • 去除嵌套的Observable

领域特定语言

应用于特定领域的语言

  • HTML
  • SQL