Contents

Understanding Object-Oriented Programming (OOP) in Go

Introduction to Object-Oriented Programming (OOP)

什么是 OOP

OOP 是一种编程范式,其核心思想是将任务抽象成对象,通过对象的交互完成任务。

面向对象和面向过程的区别

  • 面向对象: 通过对象的抽象和交互来完成任务。
  • 面向过程: 将任务分解成一个个步骤,然后逐步完成。

简单对比:

  • OOP: object1.doTask1
  • Procedure: task1.step1 -> task1.step2 -> task1.step3

面向对象的特征

如果语言支持以下特征,可以认为是面向对象的语言:

  1. 封装:
    • 将数据和方法封装在一个对象中。
    • 控制数据的访问权限。
  2. 继承: 对象可以继承其他对象的属性和方法。
  3. 多态: 同一个类型(接口)的对象可以有多种形态(实现的方法不一样)。

五大原则

五大原则指导我们写出更好的面向对象代码,这些原则同样适用于其他编程范式:

  1. 多复用: 减少重复代码。
  2. 容易拓展: 新增功能时,不需要大量修改原有代码。
  3. 容易进行单元测试: 可以很容易专门针对某块代码进行测试。

具体原则

  • 单一职责原则: 一个类应该只有一个引起它变化的原因。
  • 里氏替换原则: 子类可以替换父类,强调继承应该是同一类型的继承。
  • 依赖倒置原则: 高层和底层模块都应该依赖抽象。
  • 开闭原则: 对扩展开放,对修改关闭。
  • 接口隔离原则: 不应该强迫客户端依赖他们不需要的接口。

Is Go an OOP Language?

go 是 OOP 吗

Go 是部分 OOP。判断一个语言是否是 OOP,主要看它是否实现了面向对象的三大特征。Go 放弃了继承,因此不是完全的面向对象。

Go 为什么放弃了继承?

Go 认为继承是一个不好的设计,因为:

  1. 代码复用可以通过组合实现。
  2. 继承会带来很多问题,如过度耦合等。

Implementing OOP in Go

go 如何实现 OOP

封装

  1. 使用 typemethod
  2. 通过大小写控制访问权限。

多态

通过 interface 实现多态。