Go面向对象设计

简介: Go面向对象设计

1 什么是面向对象?

如果有深入学习过Java的同学一定会知道,在Java中,“万物皆对象”,而对象又有各自的属性和方法,在Java中,对象按不同类型又可以分为实体类对象、业务类对象等等。

面向对象是一种传统的软件开发方法,一种编程范式,他区别与面向过程的程序设计语言,我们来打个比方:

针对事件:学生小明要去上学

面向过程的解决方式:小明->起床->做校车->上学

面向对象的解决方式:小明->去上学

因此,面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。

2 面向对象的三大特点

这是一个非常老生常谈的问题,但是Java的初学者可能会有很大一部分人没有深入理解这三个特性

  • 封装:封装是指将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内。
    比如Java中的private关键字和getter、setter方法就是一种封装,不可以单独访问对象的某个属性,而是把每个属性都放在对象来处理。
  • 继承:继承简单地说就是一种层次模型,这种层次模型能够被重用。
    继承会让人们想到父子关系,在Java面向对象的思想中也是如此,但不同的是在Java中子类拥有其父类的属性和方法,如果没有特殊关键字的约束,子类可以取代父类,并且一个父类能有多个子类。
  • 多态:多态是指不同事物在不同场景下具有不同表现形式的能力。
    多态的实际应用层面最多的就是接口和泛型,是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。

3 Go语言面向对象设计

3.1 封装

type Student struct {
   Peo    People
   Sid    int
   School string
}
func (stu Student) getName() string {
   return stu.Peo.Name
}
//setter方法要使用指针类型,确保set的值是同一个对象
func (stu *Student) setName(name string) {
   stu.Peo.Name = name
}
复制代码

3.2 继承

Go语言使用结构体嵌套来实现继承

type People struct {
  Id   int
  Name string
  Age  int
}
type Student struct {
   Peo    People
   Sid    int
   School string
}
复制代码

3.3 多态

同一个接口可以用不同的对象来实现,进而产生不同的状态。

type HelloService interface {
   sayHello(name string)
}
复制代码
type People struct {
   Id   int
   Name string
   Age  int
}
func (peo People) sayHello(name string) {
   fmt.Println("Hello " + name + ", I am " + peo.Name)
}
复制代码
type Student struct {
   Peo    People
   Sid    int
   School string
}
func (stu Student) sayHello(name string) {
   fmt.Println("Hello " + name + ", I am " + stu.Peo.Name)
}
复制代码

测试

import "fmt"
func main() {
   stu := Student{People{1, "zs", 12}, 1, "ZZJM"}
   stu.Peo.sayHello("Zs")
   stu.sayHello("Ls")
   fmt.Println(stu.getName())
   stu.setName("ww")
   fmt.Println(stu.getName())
}
复制代码

结果:

Hello Zs, I am zs
Hello Ls, I am zs
zs
ww


相关文章
|
2月前
|
Java Go C++
Go面向对象是如何实现的?
【2月更文挑战第23天】
31 0
|
7月前
|
Cloud Native Java 编译器
100天精通Golang(基础入门篇)——第21天:Go语言面向对象(OOP)核心概念解析
100天精通Golang(基础入门篇)——第21天:Go语言面向对象(OOP)核心概念解析
74 0
|
网络协议 Java 测试技术
Go 独树一帜的面向对象特点 | 学习笔记
快速学习 Go 独树一帜的面向对象特点
77 0
Go 语言入门很简单:Go 如何面向对象
我们一直学习的是 Go 不支持面向对象,取而代之的是组合的方式。Go 利用接口可以实现类似面对对象的功能,比如多态。虽然 Go 语言并非面向对象的语言,但它还是包含了一些特征可模拟面向对象的编程语言。
|
设计模式 存储 算法
Go设计模式(2)-面向对象分析与设计
本篇文章主要讲解遇到项目之后如何做面向对象分析与设计。
【GO】实现一个简单的案例:家庭记账功能,并使用面向对象的思想进行封装(2)
【GO】实现一个简单的案例:家庭记账功能,并使用面向对象的思想进行封装
86 0
【GO】实现一个简单的案例:家庭记账功能,并使用面向对象的思想进行封装(2)
【GO】实现一个简单的案例:家庭记账功能,并使用面向对象的思想进行封装(1)
【GO】实现一个简单的案例:家庭记账功能,并使用面向对象的思想进行封装
84 0
【GO】实现一个简单的案例:家庭记账功能,并使用面向对象的思想进行封装(1)
【GO】面向对象:多态之类型断言
【GO】面向对象:多态之类型断言
79 0
【GO】面向对象:多态之类型断言
【GO】面向对象:多态
【GO】面向对象:多态
86 0
【GO】面向对象:多态
|
Go PHP
【GO】面向对象:继承性
【GO】面向对象:继承性
89 0
【GO】面向对象:继承性