00:00
我们来看一个面向对象编程封装的快速入门案例,我们来看一个案例,大家看啊,这边有这么一个要求,请大家看一个程序叫person点购,那么person点购呢,他要求去创建一个人的这么一个结构体,但是呢,他这有要求,不能随便查看人的年龄、工资等隐私,并对输入的年龄进行合理的判断。校验啊呃,大家看到我们来举这么一个封装的案例啊呃,就是关于这个人对这个人的一个封装,那我们现在来一起来完成这个案例。快速入门案例来走一个。跟上老师思路。好,我再写到下边吧。快速入门儿。好,看一个案例。走一个啊,来看这个具体的要求吧。嗯,写一个person点够,不能随便查看人的年龄、工资等隐私。好,那么呃,我们就这样设计,我们创建两个包啊,一个叫model包,一个叫面包,在面包里面去调用这个person,我们现在这样设计这个案例啊,设计就是有两个包,Model包。
01:13
Model model这个包,这个包里边呢,咱们有一个person go,好吧,还有一个包面包,面包就是我们这个主包了,主包里面呢,有个me。Main点构他要去使用啊调用啊调用什么呢?Person这个结构体。好,大致就这么一设计,那么我们一起来完成这个案例。我们要用封装的思想来完成这个案例,大家注意注意看一下我怎么完成啊,那既然如此的话呢,我就新建一个文件夹叫。In cup啊in cap,好,这个很长啊,好,现在呢,我们来给它建一个,建这里面建两个包啊建建包不要建文件。建包啊。一个包包毛豆。
02:01
Model再来一个包,叫面包。因为这样我才能体现这个,我才能演示一个封装的效果,在model里面呢,我们新建一个文件叫person。问吧。好,我们package。包的名字叫model。OK,然后in model,然后呢,我们呃写一个type type,这叫person,注意听啊person因为我想封装,因此呢,我就把它小写的,因为我这里我这里就是想把它封装起来,所以说我故意把这个手字母小写的,当然在实际开发中不一定不一定就是这个小写的。人家就是写成这个大写的,让别人可以访问也是可以的啊,也是可以的,好structure。那么这里面呢,有有这个三个信息我都想封装起来那。Name是个寸类型的好edge edge是个什么类型呢?Edge呢,我们认为是一个这样的啊,他说名字,名字我们公开吧,好吧,名字认为是可以公开的age。
03:04
年龄,然后呢,我们还有一个薪水salary salary呢FLOAT64。好,大家看我故意把这个写成小写的,那说明这个呢是不可导出的啊,这个是相当于是不可导出。啊,这个是。不可导出。就是其他包不可访问吧,这样写其他包无法访问。不能,不能直接访问。好,下面也是一样,写完这个过后呢,大家都知道,此时此刻一你这个面包里面肯定是用不了它的。肯定是创建不了一个person结构体变量的,那怎么办?各位是不是咱们写一个写一个这个工厂模式的。工厂模式的一个函数啊啊,相当于。相当于什么呢?构造函数。对吧,相当于构造函数。构造函数好,那么来写一下前面是不是已经写过了function。
04:01
方式呢,我们就叫new。你有一个什么呀,大写。有一个person没问题吧,然后这个地方呢,你给我传一个名字过来,我给你创建,就说你给我一个名字就行,因为名字呢,他说是公开的嘛,那我就写个名字name。是准,那我返回一个什么呀,同学们,是不是我返回一个这样的指针。前面是刚刚学过的,那你拿到这个过后,我就直接return。我就构建它啊,构建它叫person。Person里面呢,我们要传这么几个字段信息,一个是name。把这个值写进去,这样是不是就可以了?是不是这样就构建了一个person结构体啊啊,然后呢,把这个指针给他返回去了,返回去过后同学们注意,因为你这做了完了过后呢,这个name它是对外公开的,可以直接访问,但是age和S不能用。那这个时候怎么办呢?好,我们再提供为了说为了访问age和这个塞。
05:03
啊,我们提供我们编写一对啊啊一段什么呢?Set。这个。擦擦擦的方法。叉叉的方法和get。Get他的方法对不对,这样子呢,我们就比较方便,那我们来起写一写,对年龄,对薪水,我们都写一组function。走,那这里面呢,我们先来给他绑定一个值,比如叫P啊P新person没问题吧,然后呢,我们就提供一对set age。年龄我们是通过这个函数设置进去的,那你给我传一个年龄进来,对不对,年龄进来。好,这个时候呢,我要做一个必要的判断,因为我觉得年龄呢,它是在一个范围的,比如说我加一个判断,比如说如果年龄它它需要这个啊,如果它小于等于零,我们就不玩了。
06:02
我们认为在这个范围吧,比如说。H它它只能大于零,并且。H小于150啊,我们认为这个是合理的,如果这个合理的情况下呢,我们就把这个年龄给它放进去了。这个能理解吧,就给他,否则else。我们就干什么呢,我们就提示一句话。我们就提示一句话,说年龄范围不对。年龄范围不正确。不正确好,那不正确,这值就不操作,就不做任何操作,不给他值,那你不给他指这个PH呢,默认就是零对吧,那你也可以给个默认值,就看你自己一个喜好,就说,呃,就看你自己觉得这个能不能给个默认值,有些程序员的是给一个默认值。有程序员啊,程序员给一个默认值。再看你啊,默认值。啊,就看你的需求了,那我这就保留他原子,那就写完了对不对,提示他,那既然有这个set,那我肯定要提供一堆get对不对,要给他一个get方法。
07:11
那get什么呢?Get年龄,Get年龄的时候不需要传任何参数,但是有返回值哦,那返回一个什么,返回一个int。对吧,返回一个int。这个就是在隐私封装,那这里呢,我就直接return return一个什么呢?p.H完事。啊,这个就是关于对edge的一对set和get方法,同样我们还应该有一对对薪水的操作,比如说我们要设置薪水。比如说set salary。那你给我一个薪水吧。那薪水类型是float。什么呀,六四没问题吧,那这个时候我对薪水就一个判断,就是假设我们认为一个人的薪水呢,至少是在3000到到这个3万之间,假设啊,这是我的我们一个诉求,比如说薪水大于只有在大于。
08:04
3000大于等于3000。就说你不能太低对吧,太低就呃没人来这工作了,并且呢,要小于等于一个范围,比如说你设置的薪水呢,在3万。就不能太高对吧,假设就是这种范围,在这个情况下呢,我把这个薪水给你设置进去。啊,就成功了,否则我们就说薪水的范围不对。薪水。啊,薪水范围不对,那这个时候呢,我们就不返回任何东西啊,就不给它设置啊,就保留它原来的值就行了,好,这个就写完了,看到没有,写完过后呢,再写一段给他提供一个什么呢?盖啊就是get的方法,获取薪水的方法,Get子。那get的时候呢,我们要返回一个FLOAT64。对吧。FLOAT64,那这个FLOAT64呢,我们直接return。
09:01
所以他。然后呢,就p.S完事对吧,Return回去,好大家看,这就是给我们的年龄还有薪水,分别给了一对set方法和get方法,那这样呢,我们就可以通过这个方法来操作我们这个私有的或者不可导出的啊,这个不能叫私有的,就是不可导出的这种字段,对不对?好,那我在主函数里面我们就来用一用了。主要说我们写一个文件叫main,点勾,我们来用它一下,看看能否顺利成功。Package。Me,那这个地方呢,我们引一下包包import,好,没问题吧,然后我们写一个函数叫me。Function,那现在呢,我们要因为要引,要使用到person这个结构体,我们要引包的,怎么引,从这个src这个地方开始,所以说先写go。Go_cold。
10:00
对不对,然后呢,咱们在引的时候,注意这个斜杠是这样子的啊,正斜杠。是这些杠,然后呢,Chapter。CHAPTER11,然后我们写的是in in couple。Show in capture。Incaptulate应该这个单词写错了,应该是名词啊,这写成写成这个封装这个动词了,那就incaptulate吧。先这么用一下,然后呢,Model包写完了,好,当我们把这个用完过后,我们就可以用person的那一个,呃,工厂模式来创建了,对吧?好,我创建一个P。这个没问题吧,然后我们六调它的方法用什么呢?用model点这个包包里面的六六的哪个方法呢?就是它的那个我们叫new person。对吧。后面我们装完这个插件过后,它会自动提示,现在因为没有装插件,所以它不会提示啊,那我传一个名字进去,比如说这个人的名字叫史密斯,这个人好就创建完了,创建完了过后呢,我给他设置一些值大家看啊,此时此刻我们来查一下。
11:11
年龄,这些都是默认的。来走一个P,我们输出来跑一下。好,同学们跟着老师思路,我们来运行一下啊。我们来听一下。允许他啊,允许它运行。LCD点点,那么进入到我们的incaulate,我们看哪里有错误。呃,整个全部保存。保存过后,我们看到这里面有些地方可能会有错误啊,我们再调一调。诶,好像没错了。嘿。这个怎么老这样子啊。可能它底层有一个程序在去更新,而360呢,认为它是一个什么呀,是是一个病毒,是一个病毒,所以他就阻止它了,好,那现在我们切换到这里面去,我们go一下go run。
12:01
拿了闷顶沟跑起来,我们看这位有没有问题。A Di没有进入到里面还有一个包包,闷包,Go run main.go跑起来。我们看效果。呃,他说onde for,我们看哪里没有底气哈。Format。呃,我们是在这个包包里面对吧,我买。F mt.pert这没错啊,看它提示的错误在哪里哪一行。他说是在person go啊person go21行和三十五行,那就点这。21行。哦,是不是在我这有输出,但是我没有引包啊,好,没问题,我引一下包包。好,引进去过后我们再来跑。我们可以看到。嗨,怎么回事儿,这个。
13:02
好,我们看到史密斯零零就出来了,看到没有史密斯零零就出来了,呃,但是呢,现在你你会发现你这个时候直接去取他的年龄,这些都是取不到的,比如说说老师我想给他付一个年龄,大家看你如果这样付,他肯定会直接给你报错,比如说age。等于18岁。那这个时候。这个时候大家想能操作成功吗?看他引力报错了。为什么他直接告诉你can refer to就不可以引用到一个不可导出的字段,对吧?那怎么办?怎么怎么复制呢?非常的简单,我们调用我们刚才写的那个方法,Set age,你给他来个18岁。这样就可以了,同样道理,我们设置薪水也是一样的,三、给他设置一个薪水,比如说这个人一个月挣5000块啊,5000块钱。好5000块钱,设置完了过后,我们这个地方就可以把信息给他打印出来了。那你看啊,这样是不是就可以打印了,那我们跑一下。
14:01
好,我们可以看到现在嗨,这个程序老这样子,为什么呀。好,你看18和5000就进去了,当然这个时候你要取得这个各个的值啊,可以这样去取,比如说P点内这个是可以直接操作的,大家知道为什么,因为name呢,它本身就是一个,相当于说是在别的其他在其他包可以使用,因为它首字母大写嘛,对吧,但是年龄年龄注意看啊,年龄你也不能这样去去。对吧,你这样取它也会报错,怎么办呢?Get,因为我们写了一个方法嘛。Get age。好,同样我们这个薪水。我们这个薪水的值呢,也需要用p.get s来完成,代码写完我们来跑一下吧。跑起来。希望不要再提示什么乱七八糟的啊,还,还来。怎么这样,老是这样子。
15:00
就讨厌这个。不行,我先暂时关一下啊,这个很讨厌。这个没啥问题,大家看啊,史密斯年龄18,薪水5000。正确正确啊好,这个呢,就是我们一个封装的一个快速入门案例,大家体验一下对吧,包括我们这写的这个set get方法这些都有了。那么我把这个代码呢,给大家板述一下,OK。代码体现,代码实现。那么这样实现呢?我给大家整理一下这个思路啊。呃,我们写了哪些东西呢?首先呢,我们写了一个person订购。对吧,Person点购是在哪个包下面说明一下,在这个包包下面,在model这个下面,我们写这个person点购对不对?好。然后呢,我把这段代码给大家拿过来用一用。没问题吧,大家看一下。好,从这开始截取到23行。
16:03
对不对,23号把它整理一下。OK,当然我们接着往下走,23号完了过后我们接着往下继续啊,23。这个先把它关掉啊,23。23行到最后一行。那23到这儿,到我们的43完事。好,第一个我们这个person.go呢,就截取完毕,那么后面呢,我们还在这个main包里边,Main这边写了一个main.go。对吧,面点构,那么面点构我们是怎么写的呢?怎么去用的呢?我们是这样用的。这边最主要的就是要体现出哪里啊,体现出我们引了这么一个包包。这个包是怎么引的,具体用的时候呢,是这样用的,对不对,这样用的p.get edge,还有p.get salary啊这样去使用大家看清楚啊,OK。保存一下。
17:01
好。那么这就是我们关于封装的一个快速入门,大家可以敲敲代码啊,敲敲代码,把这个案例把它写进去啊,写进去就可以了,那么我给大家一个任务啊,待会儿我们还有这个这个地方会做一些扩展,也要求同学们在这个基础上呢,把我们这个代码写的更完善一点,大家先把这个这个代码看一看,走一走。
我来说两句