00:00
大家好,我们接着给大家讲go语言核心编程的面象对象编程这一块,那么我们说go语言的面向对象编程呢?跟传统的面向对象编程,比如比如说像Java。比如说像donut这些语言呢,还是有很大区别的,因此呢,传统音乐说我们应该把这个面向对象这个地方最好引起来,对的,也就是说在go语言的面向对象呢,其实它不是一种我们那种传统意义上的面向对象编程,因为在构语言里面没有这个类的概念。没有这个类的概念,那么它用什么来替代这个类呢?它是一个叫做结构体的东西来。替代了这个类的概念,也就是说在结构体呢,它的地位在面向对象里边,类似于class,好,所以说呢,大家在听这个go语言面向对象编程的时候,要注意它跟传统的面向对象里面的相似的地方和不相同的地方,OK,所老师呢,先开篇名义把这个点出来好吧,所以说如果你曾经学过别的面向对象变成语言,那你要注意在构语言里面有很多。
01:14
跟你们以前学的面向对象是不太一样的,注意这个特性,OK,那么现在呢,我们先来看第一个。看一个结构体的引出。我们为什么需要结构体?或者说我们为什么需要这个面向对象编程呢?我们先来看一个问题说。有这么一回事儿,说张老太太呢养了两只猫猫,有一只呢叫小白,有一只,有一只叫小白,今年三岁,白色,还有一只叫小花,今年100岁了,这是一只老猫哦,OK,花色,请编写一个程序,当用户输入小猫名字时,就显示猫猫的名字、年龄、颜色,如果输入小喵小猫名错误,则提示没有养这只猫。各位同学,这个题对于我们来说,大家觉得如果我教给你,你会怎么去完成?
02:08
你会有什么思路没有?你有没有思路,大家先想一想。好,我先把这个先板书一下,好吧,先把它板书一下。好,先板述一下,我们这讲的是。什么呀,就是。我们说的面向对象。编程上。对不对?上好,你们先想一下刚才老师提出的那一个问题。哟,这个是怎么回事。好,这样就没问题了。我们现在讲的是第一个话题对不对,第一个话题就是看一个猫结构体的引出对不对,结构体的引出我们叫结构体。
03:02
好,这个给他来一个标题二吧。当然,先让大家看了一个问题。对不对,这个问题呢,我们其实这块已经把它引出来了。问题,具体来说就是一个张老太太养猫的问题。好,同学们现在有思路了没有?我问大家,现在你们知道这个怎么解决了吗?好,我们来这样做啊,我们还是老规矩,我们先用现有的技术来解决,就说我们现在不是已经学了一段时间,够浪了吗?那如果这个问题交给你来解决,我相信同学们可能有两个思路,第一种呢,就是用单独的变定,单独的定义变量来解决,就是我用变量来记录前面的一个猫的各个信息。这是一种方式,第二种呢,我用数组来解决。我把这个猫的信息呢,放在数组里边去,对不对,你只有这两个思路嘛,当然有同学说老师我还可以用map,好,你你用map你试试看,你看看好不好解决。
04:08
这是我为什么要用传统方法来解决呢?就是因为让大家感受到如果使用传统方法解决的时候,它有什么缺点,从而引出我们结构体,你就一下秒懂。结构体跟别的数据类型有什么不一样的地方,以及结构体有什么好处对不对?那不管怎么样,我现在呢,已然有了思路了,我的思路是这样子的。使用现有技术解决,第一种呢,就是用单独的变量解决。好,第二种呢,用数组解决来,我们分别走一下代码。走一下代码来代码演示。下面呢,我们也用代码演示对不对。来吧,打开我们的这个chapter。那这块呢,我们新建一个文件夹叫chapter。
05:06
零几啊幺零这是第十章了,然后呢,我们写一个文件夹,比如说这个叫我们叫做,因为是讲结构体嘛,是不是,呃,STRUCTURE01没问题吧。我在这新建一个文件叫main顶购。来吧。现在呢,我们从这边粘一部分这个通用的代码。放过来。写一个主函数。我们就先用传统的方法来解决猫猫的问题,好吧,同学们,我先把这个要求给同学们粘贴复制到我们的代码里面去,来,我们一起走一走。对吧。张老太太养猫。张老太太养猫的问题。来给他一个注释。同学们来看一下第一个方案,使用变量。变量来解决来处理或者要处理都可以啊,那大家想,因为你有两只猫猫。
06:06
那也就是说一只猫,每一只猫都有三个属性。名字。年龄和颜色,那这个时候大家想,你为了记录两只猫的信息,请问你需要定义几个变量?是不是你需要定义六个变量啊,来第一只猫。VR。CAT1NAME肯定是个是类型的,是不是好?他的名字叫小白。没问题吧,紧接着还有第二个变量,还是K1。他呢,有个年龄是个特吧,它是三岁,还有一个呢,就是第一只猫的什么呀,颜色color。也是石柱类型,我们给他写上它是什么白色?白色。这个好,写完第一只猫写完了,那同样如果你要记录第二只猫,是不是你就这样写二。
07:06
二二,然后这边是小花。大家有没有考虑心态是不是已经有点问题了呀?年龄颜色是花色。好,同学们。你们看看现在的问题是不是已经出现了?如果我现在养的张老太太,她是一个养猫比较着迷的老太太,她养的不是两只猫猫,她养的是。20只猫,你想你要定义多少个变量?这还不算。一个猫,它现在只有名字、年龄和颜色,假设我还要记录这个猫的爱好,它喜欢吃的食物,或者说这只猫它的其他特性,你是不是还在变化呀?所以说你用这个变量来处理的时候,其实先旁的不说,你已经发现定义变量就已经很吃力了是不是,所以你看这个代码下面已经没办法写了都。
08:05
确实已经没办法写了,你即使找到这个猫,你要把它信息取出来也是很困难的,因为你没有办法通过一个变量来把所有的它的属性或者说特征取出来,根本就做不到很难。所以说我们通过这个已经看出来他的问题了。好,那有些同学说,老师我用数组来解决。可以啊,你用数组解决,你想一想这个怎么解,解决使用。宿主解决。大家想,如果用数组来解决。怎么记录呀?你旁的不说一只猫猫,它的属性的类型都不一样,你看它的名字是寸,它的年龄是int,它的颜色又是时,寸说你用数组来解决,你可能只能这样去写了,周老师。我都要写,我先呢有一个数组记录猫猫的名字,然后呢,这个数组有两个,而且呢是最类型的,可以你这样写,然后你这写个A点点是准是吧,然后你说这里面有几个属性啊,两个值,一个是小白。
09:17
一个是小花。是这样写吧。小花,然后呢,你又觉得说,诶老师我还有两个一两,还有个数,还有数组记录年龄的。Ages,那么age呢?因为它是保存int,所以说你只能写一个,因为你不可能把年龄写到这里面去。对不对,那你就只有这样写了,又定义一个数组。然后这边小白的年龄是三岁,好,小花的年龄是100岁,然后这儿还有它的颜色,你看这样子好处理吗?Colors。好,这边你说诶一个是白色。白色。
10:00
对不对,这个是花色,好,我就不用下面写了吧,各位同学你们琢磨琢磨,现在代码还能写下去吗?是不是你看你找到小白这个名字,你要找到他的年龄,其实很难找到,因为他都不在同一个数组里边去,所以说很困难。同样你们要用map来解决,也会出现这个问题,因为大家都知道map它虽然可以记录map,虽然说你可以写个名字,然后再写一个字,问题是他的map呢,也有类型的问题,比如说你你把这个名名字保存了,就不能保存这个年龄,他数据类型也要一致,所以说我们发现不管是通过变量还是通过数组来解决,其实方案都不太好,为什么不好呢?原因主要有两点,第一点呢,就是我们发现用变量也好,用数字也好,他们并不利于。数据的管理遵循这句话,他们并不利于数据的管理,因为一个包包它有很多属性,但是这些属性呢,又同时属于一个对象。
11:07
是不是呀,你把它分散记录,本身它就很难管理,这是第一点,就数据不好管理,不好维护。第二点,假设我们这个猫猫还有一些行为,你比如说说这个猫猫通过学习可以做算术题,你怎么体现出来?也就是说,这个数据有了,我们还想有一种方式去操作这些数据,你又怎么做?你写一个方法,但是这个方法呢,又主要是给猫用,不能给其他用,你又怎么处理,因此我们看到用这种方式其实很困难,好,不管怎么样吧,先把这个代码放过来,我们整理一下,然后呢,我们来分析一下传统方案的不好的地方。好,我们保存一下,保存一下这个都会报错啊,他会说这些都没使用过。是吧?你看应该会变成红色,诶为什么没变成红色呢。
12:03
这按理说这些都没有用,他应该报错呀。我切一下啊。好,这个编译器可能是有点小问题,我们运行一下它就会报错了。CD点点。CD。点点CD到CHAPTER10。对不对?CD到我们的structure DEMO,好go wrong命顶go跑起来,这个肯定会报错,大家看。它是一个包uf。这个地方为什么呢?诶,我把这个先注销了。对吧,我整体注销,我打一句话。Print打一个OK。再来。咆哮。是不是是OK了。那我现在把这个注销。把这个地方再打开。
13:00
保存。你看这方现在是不是报错了,他说这个没有用吧,好,这个没有用,Form might print nn,好,我们打出一个OK再保存,它就会告诉告诉我们这些变量没有使用过,你看是吧,声明的没有用,声明的没有用,声明了也没有用,这个也是,这个也是,这个也是,这个也是,对吧?好,这块呢不是重点,这块不是重点啊,就是我告诉大家这些没用,肯定会报错的,好现在呢,我们把这块代码放到这。诶,我们用的是两个方案,一个呢,就是用我们的数组这个方案啊,用变量这个方案,我们发现。这种方案呢,也是。呃,比较麻烦的。好,这是用单独的变量来解决,是不是紧接着呢,我们用了第二种方法,用什么呀,用数组来解决。那我们发现刚才老师已经提到这个概念了,先把它整理一下再说。放到这里来。
14:00
没问题吧?好,我现在呢,就要给大家分析一下这两种方法的缺点,那在这里我这做了一个说明,就是现有技术有什么缺陷呢。来,我们一起走一下。好的,给他整理一下笔记。来标题三。这儿啊,我下来一行。标题上,那么我们发现现有技术的解决方案呢?至少有这么几点,第一个。使用变量或者数组来解决,来解决这个养猫猫的问题,养猫的问题都不利于,不利于什么呢?不利于数据的管理和维护。我为什么这么说,你看刚才已经讲过了,你一只猫它有三个属性,但是呢,你把它分开记录了,对吧,数组也是一样的,为什么?因为因为是这样说的啊,说名字。
15:01
名字,还有年龄。还有什么呢?还有它的这一个颜色,其实啊,颜色颜色。颜色都是属于属于一只猫的。都是属于一只猫的,但是你却,但是呢,这里是分开,分开保存的。保存它本身是一个是一个整体,但是你分开保存,这样显然不利于数据的管理和维护,这是第一个问题,第二个呢,如果说我们将来需要对这个猫的属性进行操作,也就是说我们要绑定一个方法,这个地方也很难做到。在第二个问题就是如果我们希望对一只猫。一只猫,这写错了,一只猫的属性,什么叫属性呢?就是刚才所说的这个名字对吧,还有他的年龄,还有他的颜色,颜色。
16:02
进行什么呢,进行操作。进行操作。进行操作也很难处理,因为你你想想他们数据都已经分分散开来了,你要去操作是不是很困难啊,对不对,所以操作其实就是写绑定方法。这个地方就是我们所说的绑定。绑定方法。绑定方法好,也很困难。啊,也非常的困难,也非常不好处理,也不好处理,不好处理。不好处理,OK,也不要处理,那既然我们现在通过传统方法说出了这个。用传统方法去解决。这种。这种有共同属性,共有多个属性,属于一个对象的这种,这种情况的话呢,我们发现用单独变量和数组不好处理的时候,我们就自然引出了第三个问题就引出。
17:07
引出我们要讲解的,讲解的一个知识点,或者要技术什么东西呢,结构体。好结构体就在这里应运而生了。那到底结构体是个什么东西,它又有什么特点,我们呢就在我们呢就在下面这个章节为大家详细的介绍,那在这里呢,我们就把结构体的引出问题给大家。讲完了,大家先看一下为什么需要结构体理解了吧。为什么需要结构体?因为传统的,现在传统的技术很难解决,即使你用map也不好处理啊。我刚才讲了,为什么我这没写map,因为map也同样存在这个问题,它的数据类型也是单一的,不能混着用,如果你用的话,你会发现名字、年龄,还有其他信息也得分开记录,数据仍然是分开的。对不对?说传统方法不好,不好的问题是不利于管理和维护,维护同时呢,我们要对它属性进行操作,也不好处理,因此我们就引出了结构体这个概念,OK,好,那关于结构体为什么需要,我们就先阐述到这里。
我来说两句