编程范式 | 青训营笔记

95 阅读4分钟

编程语言

  • 机器语言
  • 汇编语言
  • 中级语言——面向过程代表——c
  • 高级语言
    • 面向对象代表:c++
    • 函数式:lisp
    • 多范式代表:JavaScript

C:

  • 可对位,字节,地址直接操作
  • 代码和数据分离倡导结构化编程
  • 功能齐全
  • 可移植性强

c++:

  • 继承
  • 权限控制
  • 虚函数
  • 多态

lisp:

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

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

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

编程范式

程序语言的特性

  1. 是否允许副作用
  2. 操作的执行顺序
  3. 代码组织
  4. 状态管理
  5. 语法和词法

编程范式:

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

过程式

自顶向下

结构化编程

js中的面向过程

面向对象

封装

关联数据与算法

作用:

  1. 提高程序安全性,保护数据;
  2. 隐藏代码的实现细节;
  3. 统一接口;
  4. 增加系统可维护性;

继承

本质是对某一批类的抽象

多态

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

依赖注入

去除代码耦合

五大原则

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

    一个类不应该依赖于它不需要的接口,一个类应该只依赖于它需要的接口。这个原则的目的是降低代码的耦合性,提高代码的灵活性和可扩展性。通过将接口进行分离,使得代码更加灵活、可维护和可扩展

函数式编程

优点:

  1. 可缓存
  2. 可移植
  3. 可测试
  4. 可推理
  5. 可并行

响应式编程

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

响应式编程的"compose"

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

总结

QQ截图20230418174835.png

领域特定语言

领域特定语言(Domain-Specific Language,简称DSL)是一种专门用于解决特定领域问题的编程语言

词法

语言运行

QQ截图20230418174645.png

lexer

SQL Token分类

  • 注释
  • 关键字
  • 操作符
  • 空格
  • 字符串
  • 变量

语法

Parser_语法规则

上下文无关语法规则

  • 推导式:表示非终结符到(非终结符或终结符)的关系。
  • 终结符:构成句子的实际内容。可以简单理解为词法分析中的token.
  • 非终结符:符号或变量的有限集合。它们表示在句子中不同类型的短语或子句。

Parser_LL

LL:从左到右检查,从左到右构建语法树

Parser_LR

LR:从左到右检查,从右到左构建语法树

工具

解释,编译

总结

QQ截图20230418174207.png