编程范式
函数式编程 就是把一些功能或者逻辑代码通过函数拼接方式来组织的玩法
代码当中还是需要处理状态的 函数式编程一般写出的 都是无状态的代码
对于状态和数据的处理 oop编程的三大特性: 封装、继承、多态
包含数据、属性、代码与方法 对象指的是类的实例
面向对象 设计模式:可复用面向对象软件的基础 23种设计模式
使用者不需要知道数据类型、结构、算法的细节
不需要知道实现细节 只需要知道提供的接口
利于抽象、封装、动态绑定、多态
符合面向对象的特质和理念
继承需要給子类暴漏一些父类的设计和实现细节
父类实现的改变会造成子类也需要改变
继承主要是为了代码重用 但是实际上在子类中需要重新实现很多父类的方法
继承更多的是为了多态 (继承是一种过度设计!!!)
拼装对象
拼装功能
资源管理
oop的优缺点
能和真实的世界交相辉映 符合人的直觉
面向对象和数据库模型设计类型 更多地关注对象间的模型设计
强调于名词而不是动词 更多地关注对象和接口间的接口
根据业务的特征 形成了一个高内聚的对象 有效地分离了抽象和具体实现 增强可重用性和可扩展性
拥有大量非常优秀的设计原则和设计模式
SOLID
单一功能
开闭原则
里氏替换
接口隔离以及依赖反转
缺点:
代码需要附着在一个类上 鼓励了类型
代码需要提供对象达到抽象的效果 导致了相当厚重的“代码粘合层”
太多的封装以及对状态的鼓励 导致了大量不透明并在并发下出现很多问题
基于原型的编程范式
主流的就是javascript
__proto__ 主要是安放在一个实际的对象中 用来产生一个链接 一个原型链 用于寻找方法名或者属性
prototype 是用new来创建一个对象时构造 __proto__ 用的
它是构造函数的一个属性
go语言的委托模式
声明一个struct 和C语言的很像
然后直接把这个struct类型放到另一个struct里面
编程的本质
任何算法 都有两部分 一个是logic部分 用来解决实际问题的
另一个是control部分 用什么策略来解决问题(影响解决这个问题的效率)
程序=算法+数据结构
算法=逻辑+控制
函数式编程 都是一种控制
undo是想要解决的问题 undo的流程是控制
接口是对逻辑的抽象 真正的逻辑放在不同的具体类中 通过依赖或者是依赖注入这样的控制来完成对数据在不同情况下的不同处理
- control 是可以被标准化的 遍历数据、查找数据、多线程、并发、异步等 都是可以标准化的
- 需要处理数据 泛型编程
- 处理用户的逻辑 标准化接口/协议来实现 适配于任何的logic
有效分离logic control data 是写好程序的关键所在!
有效分离logic control data 是写好程序的关键所在!
有效分离logic control data 是写好程序的关键所在!
prolog 逻辑编程范式