Understanding Object-Oriented Programming (OOP) in Go
Contents
Introduction to Object-Oriented Programming (OOP)
什么是 OOP
OOP 是一种编程范式,其核心思想是将任务抽象成对象,通过对象的交互完成任务。
面向对象和面向过程的区别
- 面向对象: 通过对象的抽象和交互来完成任务。
- 面向过程: 将任务分解成一个个步骤,然后逐步完成。
简单对比:
- OOP:
object1.doTask1 - Procedure:
task1.step1 -> task1.step2 -> task1.step3
面向对象的特征
如果语言支持以下特征,可以认为是面向对象的语言:
- 封装:
- 将数据和方法封装在一个对象中。
- 控制数据的访问权限。
- 继承: 对象可以继承其他对象的属性和方法。
- 多态: 同一个类型(接口)的对象可以有多种形态(实现的方法不一样)。
五大原则
五大原则指导我们写出更好的面向对象代码,这些原则同样适用于其他编程范式:
- 多复用: 减少重复代码。
- 容易拓展: 新增功能时,不需要大量修改原有代码。
- 容易进行单元测试: 可以很容易专门针对某块代码进行测试。
具体原则
- 单一职责原则: 一个类应该只有一个引起它变化的原因。
- 里氏替换原则: 子类可以替换父类,强调继承应该是同一类型的继承。
- 依赖倒置原则: 高层和底层模块都应该依赖抽象。
- 开闭原则: 对扩展开放,对修改关闭。
- 接口隔离原则: 不应该强迫客户端依赖他们不需要的接口。
Is Go an OOP Language?
go 是 OOP 吗
Go 是部分 OOP。判断一个语言是否是 OOP,主要看它是否实现了面向对象的三大特征。Go 放弃了继承,因此不是完全的面向对象。
Go 为什么放弃了继承?
Go 认为继承是一个不好的设计,因为:
- 代码复用可以通过组合实现。
- 继承会带来很多问题,如过度耦合等。
Implementing OOP in Go
go 如何实现 OOP
封装
- 使用
type和method。 - 通过大小写控制访问权限。
多态
通过 interface 实现多态。
Forrest's Blog