编程范式-面向对象编程
文章目录
面向对象编程
the underlying logic
- 这本书的 23 个经典的设计模式,基本上就是说了两个面向对象的核心理念:
- “Program to an ‘interface’, not an ‘implementation’.”
- 使用者不需要知道数据类型、结构、算法的细节。
- 使用者不需要知道实现细节,只需要知道提供的接口。
- 利于抽象、封装、动态绑定、多态。符合面向对象的特质和理念。
- “Favor ‘object composition’ over ‘class inheritance’.”
- 继承需要给子类暴露一些父类的设计和实现细节。
- 父类实现的改变会造成子类也需要改变。
- 我们以为继承主要是为了代码重用,但实际上在子类中需要重新实现很多父类的方法。
- “Program to an ‘interface’, not an ‘implementation’.”
代码需要通过对象来达到抽象的效果,导致了相当厚重的“代码粘合层”。 通过对象来达到抽象结果,把代码分散在不同的类里面,然后,要让它们执行起来,就需要把这些类粘合起来。
原型
基于原型(Prototype)的编程其实也是面向对象编程的一种方式。没有 class 化的,直接使用对象。又叫,基于实例的编程
| |
- 一种委托的方式。在使用委托的基于原型的语言中,运行时语言可以“仅仅通过序列的指针找到匹配”这样的方式来定位属性或者寻找正确的数据。所有这些创建行为、共享的行为需要的是委托指针;
- 这里就说明了委托的方式,跟golang的委托也差不多; 只不过一个是对象(实例)的委托,一个是类的委托。
| |
- 原型编程看起来提倡程序员关注一系列对象实例的行为,而之后才关心如何将这些对象划分到最近的使用方式相似的原型对象,而不是分成类;
- 这个要打一个问号,好像没有把它们分成类。
delegation/embed
go
- Go语中的委托和接口多态的编程方式,其实是:
- 面向对象和原型编程综合的玩法;
delegation + Polymorphism
| |
IoC
step one
| |
step two
- 泛型编程、函数式编程、IoC 等范式:
- 这是不是和最一开始的 C++ 的泛型编程很像?
- 也和 map、reduce、filter 这样的只关心控制流程,不关心业务逻辑的做法很像?
- 而且,一开始用一个UndoableIntSet来包装IntSet类,到反过来在IntSet里依赖Undo类,这就是控制反转IoC(inversion of control)
| |
Interface patterns
go

| |
example
这里的
IntSet的String method:func (set *IntSet) String() string {,就是很像前面的interface patterns
| |
附录
7 Easy functional programming techniques in Go
文章作者 zput
上次更新 2020-10-20