[go学习笔记.第十章.面向对象编程] 1.面向对象编程的必要性,特点,快速入门,以及在内存中的布局

1.问题引入

小明养了两只猫:小花:3岁,白色; 小白:20岁,黑色

编写程序:当用户输入小猫的名字时,显示猫猫的名字,年龄, 颜色.如果输入错误,显示没养这只猫

2.使用现有技术解决

(1).单独定义变量处理解决

    //1.使用变量处理
	cat1Name := "小花"
	cat1Age := 3
	cat1Color := "白色"

	cat2Name := "小白"
	cat2Age := 20
	cat2Color := "黑色"

(2).使用数组处理解决

	//2.使用数组处理
	var catNames [2]string = [...]string{"小白", "小花"}
	var catAges [2]int = [...]int{3, 20}
	var catColors [2]string = [...]string{"白色", "黑色"}

现有技术解决的缺点分析 

(1).使用变量或数组解决该问题,不利于数据的管理和维护,因为名字,年龄,颜色都是属于一只猫,但这里是分开保存的

(2).如果希望对一只猫的属性(名字,年龄,颜色)进行操作(绑定方法),也不好处理

(3).引出下面需要讲解的技术:结构体

一个程序就是一个世界,有很多对象(变量)

3.go语言面向对象编程说明

(1) .go也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言.所以准确的来说:go支持面向对象编程特性是比较准确的

(2).go没有类(Class),go语言的结构体(struct)和其它编程语言的类(Class)有同等的地位,可以理解为:go是基于struct来实现OOP特性的

(3).go面向对象编程非常简洁,去掉了传统语言的继承,方法重载,构造函数和析构函数,隐藏的this指针等

(4).go仍然有面向对象编程的继承,封装和多态的特性,只是实现方式和其它OOP语言不一样,比如:继承,go中没有extends关键字,继承是通过匿名函数字段来实现的

        go面向对象很优雅,OOP本身就是语言类型(type system)系统的一部分,通过接口interface关联,耦合性低,非常灵活,go中面向接口编程是非常重要的

4.结构体和结构体变量(实例/对象)的关系示意图

 对上图的说明:

(1).将一类事物的特性提取出来(比如猫类),形成一个新的数据类型,就是一个结构体

(2).通过这个结构体,可以创建多个变量(实例/对象)

(3).事物可以是猫类,还可以是Person,Fish,或某个工具类

注意:

        从猫类结构体到变量,就是创建一个Cat结构体变量,也可以说是定义一个Cat结构体变量,当然,上面的猫类也可以是人,鱼,猴子等

5.快速入门

package main

import (
    "fmt"
)

//定义一个Cat结构体,将Cat的各个字段/属性信息,放入到Cat结构体进行管理
type Cat struct {
    //大写表示public,可以在其他地方调用
    Name string //默认值为空
    Age int //默认值为0
    Color string    //默认值为空
    Hobby string    //默认值为空
}
func main(){
    //小明养了两只猫:小花:3岁,白色; 小白:20岁,黑色
    //编写程序:当用户输入小猫的名字时,显示猫猫的名字,年龄, 颜色.如果输入错误,显示没养这只猫
    
    // //1.使用变量处理
    // cat1Name := "小花"
    // cat1Age := 3
    // cat1Color := "白色"

    // cat2Name := "小白"
    // cat2Age := 20
    // cat2Color := "黑色"
    // //...
    // //2.使用数组处理
    // var catNames [2]string = [...]string{"小白", "小花"}
    // var catAges [2]int = [...]int{3, 20}
    // var catColors [2]string = [...]string{"白色", "黑色"}
    //...map[string]string

    //使用struct处理

    //创建一个Cat的变量
    var cat1 Cat    // var a int
    fmt.Println(cat1)   // { 0 }
    cat1.Name ="小白"
    cat1.Age =20
    cat1.Color ="黑色"
    cat1.Hobby ="吃鱼"
    fmt.Println(cat1)   //{小白 20 黑色}
    fmt.Println("猫的信息:")
    fmt.Println("名字:", cat1.Name)
    fmt.Println("年龄:", cat1.Age)
    fmt.Println("颜色:", cat1.Color)
}

 6.结构体和结构体变量的(实例)的区别和联系

通过上面案例可以知道:

(1).结构体是自定义的数据类型,代表一类事物

(2).结构体变量(实例)是具体的,实际的,代表一个具体变量

 [上一节][go学习笔记.第九章.map] 2.map的切片,排序以及注意事项

[下一节][go学习笔记.第十章.面向对象编程] 2.结构体的声明和使用,以及创建结构体实例的四种方式 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值