【一Go到底】第三十四天---面向对象编程入门案例

135 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第34天,点击查看活动详情

一、入门案例

1.1 猫的信息案例

张老太养了两只猫猫:一只名字叫小白,今年3岁,白色。还有一只叫小花,今年10岁,花色。请编写-一个程序,当用户输入小猫的名字时,就显示该猫的名字,年龄,颜色。如果用户输入的小猫名错误,则显示张老太没有这只猫猫。

package main

func main() {
	// 面向对象编程

	// 用变量存储解决

	catName1 := "小白"
	catAge1 := 3
	catColor1 := "白色"

	catName1 :="小花"
	catAge1 := 100
	catColor1 := "花色"
	

	catNames := []string{"小白","小花"}
	catAges := []int{3,10}
	catColors := []string{"白色","花色"}
}

1.2 为何需要面向对象编程

  1. 使用变量或者数组来解决上述问题,不利于数据的管理和维护,因为名字,年龄,颜色属于同一只猫,不适合分开保存
  2. 希望对一只猫的属性(名字,年龄,颜色)进行操作(绑定方法)不易操作

二、结构体struct

2.1 golang面向对象编程说明

  1. Golang也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言。所以我们说Golang支持面向对象编程特性是比较准确的。
  2. Golang没有类(class),Go语 言的结构体(struct)和其它编程语言的类(class)有同等的地位,你可以理解Golang是基于struct来实现0OP特性的。
  3. Golang面向对象编程非常简洁,去掉了传统0OP语言的继承、方法重载、构造函数和析构函数、隐藏的this指针等等
  4. Golang仍然有面向对象编程的继承,封装和多态的特性,只是实现的方式和其它OOP语言不-样,比如继承: Golang没有extends关键字,继承是通过匿名字段来实现。
  5. Golang面向对象(OOP)很优雅,0OP本身 就是语言类型系统(type system)的一部分,通过接口(interface)关联,耦合性低,也非常灵活。后面同学们会充分体会到这个特点。也就是说在Golang中面向接口编程是非常重要的特性。

2.2 struct

使用struct结构体来代替类似Java中的class

  1. 将一类事物的特性提取出来,形成新的数据类型,就是结构体(类似之前的student案例)
  2. 通过结构体可以创建多个变量(实例/对象)

2.2.1 案例

package main

import "fmt"

// 定义Cat结构体
type Cat struct {
	Name  string
	Age   int
	Color string
}

func main() {
	// 使用struct

	// 创建Cat变量
	var cat1 Cat
	var cat2 Cat
	//cat1 = { 0 }
	fmt.Printf("cat1 = %v\n", cat1)

	// 对变量赋值
	cat1.Name = "小白"
	cat1.Age = 3
	cat1.Color = "白色"
	cat2.Name = "小白"
	cat2.Age = 3
	cat2.Color = "花色"

	// cat1的名字是=小白, 年龄=3岁,颜色=白色
	// cat2的名字是=小白, 年龄=3岁,颜色=花色
	fmt.Printf("cat1的名字是=%v, 年龄=%v岁,颜色=%v\n", cat1.Name, cat1.Age, cat1.Color)
	fmt.Printf("cat2的名字是=%v, 年龄=%v岁,颜色=%v\n", cat2.Name, cat2.Age, cat2.Color)

	//

}