《编程范式游记》读书笔记
2022-08-21 16:35:53 0 举报
AI智能生成
介绍一些常见的编程范式,提升对编程语言的理解深度
作者其他创作
大纲/内容
前言
编程语言的主要作用
屏蔽底层机器代码的实现,让程序员可以更为关注于业务逻辑
编程语言是机器代码和业务逻辑的粘合层
一门编程语言在设计时需要trade-off的问题
程序执行效率:让程序员可以控制更多底层的灵活性,保障代码执行效率
程序编码效率:屏蔽更多的底层细节,可以更简单快速的实现业务逻辑
不同的语言在设计上都会做相应的取舍
C语言偏向于让程序员可以控制更多的底层细节,并保障执行效率
Java 和 Python 则让程序员更多地关注业务功能的实现
C++ 是两者都想要,导致语言在设计上非常复杂
泛型编程范式
类型系统
编程语言一般会有两种类型
内建类型:如 int、float 和 char 等
抽象类型:如 struct、class 和 function 等
类型系统提供的主要功能
程序语言的安全性
使用类型可以让编译器侦测一些代码的错误
利于编译器的优化
代码的可读性
抽象化:让程序设计者以较高层次的方式思考
使用整型或是浮点型来取代底层的字节实现
将字符串设计成一个值,而不是底层的字节数组
将真实世界中的学生信息设计为student类,而不是一堆的内建类型:姓名(char[])、年龄(int)、....
......
每个语言都需要一个类型系统和类型检查
静态类型语言:编译期检查
动态类型语言:运行期检查
类型的本质
类型是对底层内存布局的一个抽象
不同的类型会有不同操作
内存的分配、释放和访问
比较操作,I/O 操作,复制操作,......
特有的一组操作
类型带来的问题
不同的类型需要不同的代码来实现一套相同的算法(逻辑)
泛型编程
屏蔽掉类型(数据和操作数据)的细节,让算法更为通用
让程序员更多地关注算法,而不是在算法中处理不同的类型
函数式编程范式
函数式编程的特点
Stateless(无状态):函数不维护任何状态
Immutable(不可变):输入数据是不可变的
函数式编程的优点
并发安全
可重入
函数式编程的缺点
数据复制比较严重
编程的抽象度更大,编程的思维方式很特别,实现方式上不容易理解
函数式编程的思维方式:do what
过程式编程范式叫做指令式编程(Imperative Programming)
关注点是:how to do
函数式编程范式叫做声明式编程(Declarative Programming)
关注点是:do what
函数式语言的三套件
Map、Reduce 和 Filter
函数式的 pipeline 模式
面向对象编程范式
面向对象的编程有三大特性:封装、继承、多态
对象作为程序的基本单元,将程序和数据封装其中
对象里的程序可以访问及修改对象相关联的数据
提高了软件的可重用性、灵活性和可扩展性
面向对象的两大核心理念
依赖“接口”,而不是“具体实现”
“Program to an ‘interface’, not an ‘implementation’.”
优先采用“组合”,而不是“继承”
“Favor ‘object composition’ over ‘class inheritance’.”
“继承”是为了“多态”,而不是“代码重用”
基于原型(Prototype)的编程范式
基本概念
没有class(类),只有实例(对象)
所以也被叫做:基于实例的编程
面向对象编程:构造实例是通过构造函数
原型编程范式:构造实例
复制已有的对象
扩展空对象
基于原型的系统提倡运行时进行原型的修改
该编程范式的主流语言是 JavaScript
逻辑编程范式
代表语言:Prolog
逻辑编程范式的特点
不需要关心程序的控制,也不需要关心具体的实现算法
只需要给出可以用于推导的规则和相关的事实
问题就可以被通过逻辑推导来解决掉
编程本质
Programs(程序) = Algorithms(算法) + Data Structures(数据结构)
Algorithm(算法) = Logic(业务逻辑) + Control(控制逻辑)
Program(程序) = Logic(业务逻辑) + Control(控制逻辑) + Data Structure(数据结构)
编程的本质
Logic(业务逻辑)才是真正有意义的解决问题(What)
Control(控制逻辑) 只是影响 Logic(业务逻辑) 的效率(How)
代码复杂度的原因
Logic(业务逻辑)的复杂度决定了代码的复杂度
Logic(业务逻辑)的复杂度 + Control(控制逻辑)的复杂度 ==> Programs(程序)的混乱不堪
绝大多数程序复杂混乱的根本原因:Logic(业务逻辑)与 Control(控制逻辑)的耦合
通过各种技术来解耦 Logic、Control 和 Data Structure, 是写出好程序的关键所在
编程范式
标准化协议
State Machine
DSL
......
0 条评论
下一页