00:01
那我们讲完这个Vs code的一些使用技巧过后呢,对不对,那现在呢,按理说我们应该给大家讲面向对象的三大特性,比如说我们所说的这个在go语言里面,它的继承封装和多态,它是怎么样实现的,对吧,它怎么样实现的,当然go语言的面向对象的这三大特性呢,跟我们传统的op语言它是不太一样的,它有自己的一些特性啊,它有自己的一特性,那么我们按理说应该讲这三大特性,但是在讲这三大特性之前呢,我要先给大家介绍一个东西叫抽象,我为什么说先要介绍这个抽象呢?原因是这样子的,就说抽象这个呢,抽象这种思思想啊,它是贯穿在面向对象编程。这个过程的,所以说我们有必要把抽象这个东西先给大家。提一下,或者先给大家介绍一下,嗯,那么我们首先来看一下何为抽象。什么叫抽象呢?对不对?那大家看这里,我们在前面定义一个结构体的时候,实际上就是把一类事物共有的属性和行为提取出来,对不对?你的属性体现到我们这个程序里面,它实际就是字段能理解吗?它的行为体现到我们的这个结构体,它就是什么呢?其实就是方法能理解吧,那么这个时候呢,当我们把一类事物共有的属性和行为提取出来,形成一个物理模板。
01:31
这个模板其实就是我们所说的这个结构体,那么这种研究问题的方法我们称之为抽象,也就是说抽象这个东西,准确的讲,它是一种研究问题的方法。或者说我们的一种编程的一种思维方式,哎,这个就叫抽象。那这个抽象呢,它始终是贯穿在我们面向对象编程的这个过程里面的,所以说我们来看看抽象是一个什么样的过程,那我举一个时代的例子,同学们看,现在呢,有一个案例摆在我们的面前,说有很多的银行账号。
02:09
1234N。那么这个银行账号呢,大家都知道银行有很多种,对不对,有民生银行,有建行,有工行等等,那么大家想一想,不管是哪个银行的账号,你。你是不是先要把它抽象出来,它有哪些共有的属性?对不对,这个就是一种思维,思维方式嘛,首先要把属性或者叫字段把它提取出来,那大家想一想,所有的。银行账号你们认为有哪些属性?我我们分析一下,第一首先应该有个账号名。得有账号吧,你没有账号,这个显然这个银行卡它是不存在的,第二个。有密码吧。周老师,我这个银行账号没有密码是空的,那我告诉你空密码就是你的密码对不对,说密码这个属性它是客观存在的,第三点,我相信所有的这个账号都应该有余额。
03:12
对吧,他有余额,呃,那有些同学老师,我这个没有余额,我的余额是零零就是你的余额。就算你欠欠人家的钱,付多少钱,比如说你付1万,付1万就是你的余额,那么有了这个属性字段过后呢,下面我们就来抽象出他有哪些行为。行为,那也就是说我们这一个卡号能做哪些事情,大家分析一下,行为体现到我们编程里面,其实就是方法对不对。大家想一想,一个银行卡它能做哪些事情呢?或者说它有哪些功能呢?大家想作为一个银行账号,肯定它有,它有这个存款的功能。没有哪一个银行卡是不能存款的,如果不能存款对不对,那除非他是临时冻结了,还差不多。
04:02
但是存款应该是他的一种功能,第二种呢,至少有一个取款功能。你把钱存进去,如果你取不出来,那还了得是吧,有些同学说那有些账号就是只能存不能取。那只是取的人不是你而已,那可能是别的人,比如说银行或者是其他某个机构,对吧,取款这个功能肯定是要有的,第三一个是不是还有一个功能,至少查询余额你都不能查询,那肯定跑不起来吧。所以说通过这个分析呢,当然还有很多其他的啊,我就不能不分析那么多了。肯定他还有一些其他的行为,这是跑不了的。很肯定,还有很多其他行为,还有其他属性,我就不分析那么多,但是呢,我分析出来的就是银行卡号,银行账号必须的一些功能。那么大家看到我把这个抽象过来的一个过程,分析的这个思路,其实就是抽象,那么当你把一个账,把一类事物的属性。
05:02
和他的行为已经抽取出来过后呢,下一步你要做的事情就是把他代码给我体现出来,那这个时候我们就可以把账号的结构体的名字确定下来,我们叫account,那既然有了account,有了属性,有了行为,是不是你就可以写代码了?来,我们来试一把,好吧,我们来试一把,同学们,来,我们来写一下这个东西,刚才老师讲的是编程思想。对不对,面向对象。编程。编程思想什么呢叫抽象?对不对,叫抽象,好,我把它先整理一把。给他一个标题二。然后这里面呢,我们来对抽象做了一个介绍。对,抽象。抽象的介绍。对不对,我对抽象做了一个介绍,好,那给他一个标题三吧,那抽象介绍我是怎么介绍的呢?大家看到我是这么介绍的,对不对。
06:04
我说了一段话,然后呢,我举了一个案例,我把这个案例呢,给大家截取一下我们的笔记里边去,然后下面我们就要走代码了,光有分析还不行,我们现在还有一个步骤。要干什么呀,形成这个物理模板。来把它放过去,大家不要忘了,我们还有一个过程,你把这些属性注意听,或者叫字段。行为和方法提取出来过后,下一步就要形成一个物理模板,这个物理模板其实到我们这儿,其实准确讲就是一个结构体,能理解吗?对不对,那现在我们要做的事情就是物理模板,物理模型,那这个物理模型呢,我们就开始来写,走代码,代码实现啊来代码实现。来走一个代码实现,给他来一个标题三。那现在呢,我们就来开始做这个工作,那既然做这个工作,我们先建一个文件夹,这个文件夹我叫chapter。
07:00
CHAPTER0几啊,幺幺了,是不是幺幺了?Chapter,那现在呢,我们新建一个文件,下面我们现在讲的是叫做抽象。啊,Obstract就是抽象的意思,抽象方法。抽象一个说明,好,现在呢,我们新建一个文件叫main.go大家看老师怎么把它实现啊。好,我们先来打一个包包。对吧,我们现在打一个包,把这一块共用的部分拿过来为我所用。Time一时半半会用不了,我先把它删掉。那写一个主函数,每。妹。OK。那既然有了,有了这个命过后呢,我们想一想,我们来怎么做这个事情啊,来根据这个思路一步步的走,我们首先看名称是不是有了。Account,那我就定义一个结构体。定义。一个结构体。对吧,这个结构体呢,我们就叫account来吧,那现在开始写了。
08:04
Type account。然后structure。搞起来。那现在大家想一想,这个account里面有哪些属性,我们一个个说,首先刚才我们讲到它应该有账号。Account,诶OT account number对吧,是一个时寸,这是第一个,我们认为呢,它应该有密码,密码诶应该是个十寸,我们再来说一个应该还有什么呀,他应该有余额balance。Balance呢?Balance?Bye。余额对不对,那这个呢,我们一个FLOAT64没问题吧,这是属性就全部抽取出来了,那同时呢,我们要给他进一些方法,那我们想想有哪些方法,第一个方法我们就要做什么呢,可以存款。存款这个方法,那既然你要写个存存款方法,就要开始给他绑定东西了,那么我写个account走他的这一个类型就叫他是不是,然后呢,我们这写个名字叫save money存款吗。
09:10
Save money。或者叫deposit deposit对吧,Deposit就是存款的意思,我我为了让他都能访问到,我把它写成大写的,那你在存款的时候,大家想你至少给我传几个信息进去,你在存,你在存款的时候,是不是你要告诉我你要存多少钱?对吧,首先应该有个money。Money它的类型是不是应该是六四,同时它应该有一个密码,存款的时候是不是我们需要,诶存款的时候也是需要密码的,对吧?比如说你打开一个ATM机,你存款,你存款之前其实你是需要密码的,所以说我们把密码呢,也要给它写进去,密码OK,那密码呢,我们是个尺寸类型。好,有没有返回值存款的话呢,我们干脆就不返回了,我们就直接在里面提示它显示一个存款的信息,好吧,那现在开始来做这个工作,首先既然你要存款,先要看密码,先比对密码。
10:08
看看。我们这样写啊。看看输入,看下输入的密码。Me?密码是否正确?没问题吧,那怎么样来判断呢?那就if语句。输入的密码等不等于这个account里面本身的这个密码。没问题吧,你密码如果不正确,我们不走了,所以说如果他不相等提示一句话什么话呢。就说你输入的密码不正确。你输入的密码不正确。那如果不正确,好,我就退出了,直接return过完了对吧,那现在呢,首先这个出完了过,我们再看你的要存的钱,如果你存的钱都不大于零,你给我输了一个负数,肯定我是不让不让你走的是吧?检测就是看看看看这个存款,存款金额是否正确。
11:07
存款金额。金额是否正确?那至少你不能小于零吧,所以说我要判断一下,比如说你的money如果都还小于等于零了,好,那不玩了,接着往下走,输入一句话,你输入的金额不正确。你输入的金额。对吧,金额不正确。不正确,好也退出了,那么紧接着当这两个都通过的时候呢,我就要把它存进去,那存进去其实就是在他这个基础上增加,是不是在他的基础上余额增加就可以存款了点。把他的这个balance取出来,这不是你的余额吗?好,我加一下加多少,加上他要输入这个money。这个余额就存进去了。没吧,你看我做了检测,密码要正确,而且金额要正确,我才去存,否则我就退出。
12:04
好,那么最后你你刚保存完了功能应该提示一下存款成功。对不对,说存款成功。OK。这是存款成功,那这个存款写完了过后呢,我们再来写第二个,我们刚才分析出来,除了有保存款之外,它还有取款功能,对吧,你不能只能存不能取,那就取款。那取款这个方法其实跟这个方法是不是很像啊,是不是我们可以照这个上面稍微改一下来,把它复制下来,复制下来过后我们先把名字改一下为做。With做是取款的意思,能明白吗?好,取款with做,那取款是不是你也要输入一个money,你要取多少钱,你要输入密码,是这意思吧,是这意思吧,好,所以说呢,这个地方应该有这个东西,那现在呢,当然这这个地方你返回一个取款成没成功,你可以返回不值,就看你怎么设计了好吗?我这就不去返回值了哈,那首先我们也看密码。
13:04
你要取款的时候,密码如果不正确,好不玩了。对吧,看金额,但是这个时候是取款金额了。各位同学,请思考什么情况下取款金额不正确?如果你取取的这个钱比你的余额还要多,是不是就不正确啊?但你你也不能取小于零的啊,你说我要取多少钱,我要取零元,那取得出来吗?说我要取多少钱,我要取负1万,那取得出来吗?肯定取不出来,那你这个还要加一个功能,就是或者或者什么呀,就说你这个money,你要取的这个钱大于了。当然等于是可以的,对吧?大于了多少?大于了它的余额,这就不行了,Balance。你你这个取的钱大于余额,那肯定不行,输入的金额不正确,不玩了,退出好,当这个做完之后,你是不是应该减掉这个钱。减掉这个钱过后就是取款成功,能写完了吗?
14:00
是不是这个道理啊?是这个道理吧,好,这个写完了过后呢,我们再来写第三个,还有最后一个叫查询余额,你除了这个是不是还有查询功能呢?来写一个叫查询。查询。余额。查询余额,那查询余额这个方法,当然我们这要改个名叫query。那同学们想想,查询余额只要输什么就可以了,是不是只要输一个密码就可以了呀?是这意思吧?输个密码,如果你输入的密码不正确,那肯定不让你查,否则我就提示这句话,把余额给打出来就行了。那其实啊,你卡上还有多少钱。大家看到这是不是就是一种分析的过程,有点面向对象的感觉了,对吧,我们这个对象其实就是什么呀,银行卡账号好说你的你的账号为。这样我们把它格式化输出一下好不好。你的帐号。账号为多少呢?把它输出来。
15:00
对不对,余额为。余额。余额,余额等于多少呢?给他输出来,大家看输出完过后,我们应该有个换行再来,那你这个账号为多少,那是不是就可以把它自身的这个账号信息给他输出来看一下。是这意思吧,点点多少呢?他的这个账号叫account number。好,然后他的这个余额,他的余额是不是就是account点什么呢?Balance。Balance。An写完了。那余额也就输出来,好大家看这段代码呢,就是把我们刚才的整个抽象的这个东西怎么样形成了代码。诶,大家是不是感觉到这是一种思路了,对吧,首先是属性行为,然后名字,然后写代码,最后我们要测试一下来玩一把。玩一把。我们来玩一把。开发一个啊,就是来。
16:00
来这个测试一下,看对不对,测试一把。那大大家想一想,此时此刻,因为你这块这个是大写的,所以说我们不用这个工厂模式都可以实现,对吧,那我就直接这样玩了啊,同学们注意听。来了,走一个。那我就account a,直接来一个A。给他一个啊,那当然这个时候呢,大家看到它本身是指针。这个它是跟指针绑定的,那么我们干脆怎么样,是不是这样返回一个指针更好一点。就把这个指针直接放给它,那么这个account就是个指针,当然你你要说老师我不让不让直接给他一个这个结构体也可以,因为大家知道你用它去直接调这个方法也是可以调成功的,是不是,是这意思吧,好,我就输入,首先呢,我们来确定几个值,第一个把这几个字段我们粘过来,好吧,字段粘过来,如果现在我们这个工具能够,呃装了插件,它会自动提示的。那这块呢,我们先做的比较初级一点啊,就是还是用的我们熟悉的方式走,那这个账号呢,比如说我们写写个叫工商银行的工商。
17:08
我们的卡号是111111,假设这样子的啊,密码你在开号的时候密码呢,默认为六个六。可以吧,余额那就看你开开账号的时候,你有没有存一些钱,一般来讲呢,呃,银行该在开这个银行卡的时候,一般会让你存100块钱,那么我们就存一个100没问题吧,我存一个100,好写完了,写完过后我们就来看看,我们来查一下现在我们银行有多少钱点query。那你在查的时候,你是不是如果你在ATM机上上上查的时候,你需要输一个密码对不对,好这样就可以了,写完了过后同学们我们来跑一下,看看能否运行起来。看代码啊同学们,诶,我们看证明有问题是吧,哪个地方写诶这是不是少了逗号啊。说逗号,把逗号给它加进去。好,打开我们的这个。
18:02
Project。进入到我们的这个项目里边去。11。有个abstract,然后呢,我输入CMD。Go。Run。是命点歌跑起来,请看代码。那这个时候呢,我们发现他这边有一个问题啊,就是我这可能写写错了哪个地方这。Fmt。他说什么呀,Print?LN,好,这个我就统一统一改哈,注注意同学这样可以统一改。好,怎么改呢?更改所有匹配的。好,我们来改一下,诶这为什么。不然我就要选中呢,好是不是就这一个呀。看一下是不是就这一个。诶,这地方还有啊,这方还有。
19:01
还有吗?好像没有了是吧,好像没有了。看还有没有错误,再跑一个吧,现在。告提取出来。跑起来不看效果。那我们可以看到现在呢,我查了一下,他说输入的密码不正确,为什么不正确看一下。哦,我这输了五个六。走,再跑一下。那这个时候它提示什么呢?你的账号为这个工商余额为110,呃一百一百,好,现在呢,我们再来测试一下,比如说。当然这个时候你就可以给他设一个for循环,让他不停的输入东西嘛,对吧,比如说现在呢,我们再来给他存点钱。比如说现在我们保存保存起啊来走save money对吧,我一个save money mon,那密码先输进去,我们要存200块钱进去。对吧,存入存进预购我再查一下。
20:01
对吧,查询查询完后我们先保存成功再查询,然后我们再取一点钱再查一次。注意啊,这个地方完全可以用控制台来输入,就是用个for循环,让它不停的选项,这样也可以,你们可以把这个功能加进去,好,这地方我做。为做梦。为做。叫我要取多少钱呢?D。好,我取多少钱,我要取150块钱。好吧,150块钱,好,每次呢,我都把密码写清楚了,来我们跑一下,看看运行有没有问题。诶,这方有问题,Save money。Save money,他说什么呀?饭。他说没有。哦,我不是用的save money,我的这个函数名叫deposit。Poit对吧,Deposit存款再来跑一下。我们看这边输出信息对不对。
21:00
我们来简单的看一下,嗯,刚开账号的时候余额为100块,存款成功,存款完了过后我们存了200块嘛。那存了200块过后呢,余额就变成300块,然后取款成功,取款我取了150块钱,还余150块钱,完全正确。好,那有些同学老师这样子看起来很不舒服,如果你不舒服,你可以这样写一个负循环。你用一个for循环,让他不停的来选,对吧,来选就是让他输入密码来玩一把不就完了吗?For循环说,诶,请输入,呃,你要你要进行存款。你要存款还是什么啊,就是说这里可以做的更灵活,做的更加灵活,怎么灵活呢。灵活。就是让。就是让用户通过。让这个用户通过。通过什么呢?通过这个控制台来输入,输入命令啊,输入命令。这个我想同学们自己能不能完成一下。
22:01
对吧,就说让他输一个选项,就说呃,你如果输入查询。输一菜单,给他做一个菜单选项嘛,给他做一个菜单就行了,后面我们还会讲这种项目啊,比如输一代表要查询,输入二代表要存款,如果输入二存款的话呢,就让他输入,再让他输入什么呀,让他输入要存的金额以及这个密码。这样就有互动了嘛,代码就这个,密码就不用写死在这了,对不对,好进行菜单选择就行了,做的更加灵活啊,这个呢,请同学们自己去做一下,并不难。用一个用一个for循环,再加一个Switch就可以搞定了。OK,这个请同学们自己完成,好同学们,那关于这一块我们就给大家演示一个,呃,用编,用面向对象编程抽思想叫抽象这种方式呢,完成的一个案例,通过这个案例,大家能能不能体会一下我们面向对象开发的一个流程啊,包括他的一个过程,大家更深入的理解一下,好吧,好同学们,这段代码呢,我说了啊,课后有个练习题,课后练习题就是你们自己要做的什么呢?就是把这个做的更加灵活。
23:09
可以增加一个互动性。好,我这先把它去掉啊,去掉过后我把这个要求呢,写在我们笔记里面去,大家可以自己把它加进去,好我把它反述一下。板书一下,嗯,因为这个代码比较多,我就直接性的把源代码整个拷贝过来好吧。我就不一个一个的粘了,那代码比较多。好的,给它插入一个表格。一行对吧,然后粘一下。可以了,那么这里呢,我做一些要求说明,对上面啊。对。上面代码的说要求。对上面代码的一个要求,我呢给他一个标题三增加一些功能吧,就简单简单阐述一下就行了。呃,要求什么功能呢,就是第一个。第一个就是同学们自己啊。
24:02
同学们自己可以独立完成。这是第一个要说的,第二个呢,希望同学们去增加一个互动性,让增加一个菜单。增加一个终端的菜单,控制台的一个菜单。增加一个控制的菜单,干什么事情呢?可以让用户,让用户动态的。动态的输入。输入命令和选项。啊,输入命令和选项。啊,这样做的就比较灵活了,灵活一点。好,这个是同学们自己在后边给我加进去的,好,那关于面向对象。编程思想抽象这个这个这个概念呢,包括他的一个实际的案例呢,我们就先给大家介绍到这里。
我来说两句