00:00
我们来一起看一下面向对象编程的三大特征,大家都知道传统的面向对象编程语言呢,都会有三个特性,一个呢我们叫继承,一个叫封装,一个叫多肽,对吧?这是面向对象编程的最主要的三大特征,那么go浪里边它也有这三大特征的特性,就是说它还是有封装、继承、多态特性,只是它的实现方式呢,跟传统的op还是不太一样。这点要跟大家说一下,因为go的设计者对这些呢做了一些简化。所以说我们在学这个go面向对象编程的时候呢,不要老是参照别的这种。传统的这个op op的语言去对照啊,说比如说Java,诶,它有那个,它有那个方法的重载,对吧?呃,那你这个功能里面它就没有这些,而且呢,它对这些概念做了一些弱化,因为它本身就要体现出它的简洁性,所以大家呢在听这个。Go浪面向对象编程的时候呢,大家不要刻意的去跟一些传统语言进行比较,说诶为什么他他有这个,而go浪没有,他就是没有明白这意思吧,好,所以说这个基本介绍先给大家开篇名义大家做一个心理准备,就说学的时候你会发现有很多不一样的地方,甚至他有些他有些地方就说你理解前,你就你就觉得别的编程语言是不是更合理,但是他就。
01:19
没有这么去设计啊,因为他要体现出它的特点。嗯,那我们就来看一下啊,我们就来看一下它的面向对象三大特征的一些具体的说明,那我们还是板书一下。OK,面向对象三大特性。那第一个呢,我们刚才做了一个基本介绍。基本介绍对不对,做了一个基本介绍给大家来一个标题三版出一个标题三,那刚才我我已经把这个基本介绍呢,做了一个简简短的说明。好,我们放到这里。
02:00
没问题吧,好,我们来接着往下看吧,同学们,我们接着往下看,我们首先看一下封装,那封装这个特性呢,它英文叫inca,什么意思呢?它就是把抽象出来的字段和对字段的操作封装在一起,这个就叫封装。比如说你有一个字段叫name,或者叫salary薪水。但是这个薪水呢,你不希望。是公开的,所以说呢,你就把这个字段做成一个私有的。对不对,你把那个首字母小写。然后呢,手中的消息过后呢,你就对这个字段呢,提供一个公开的方法,让别人去操作,这个呢,我们就叫做封装,就是把字段和对字段的操作封装在一起,数据被保护在内部,程序的其他包,就说程序的其他包只有通过被授权的。操作,也就是说我们所说的方法才能对字段进行操作。这点呢,这个概念就是封装这个概念,它是和别的编程语言是一样的啊,总体来说就是这样一句核心的话,就是字段和对字段的操作封装在一起啊,这个就叫封装的特性。
03:07
那么这个封装呢,就举一个通俗易懂的例子,就好比哎,我们对电视机的操作一样,大家都知道电视机的操作呢,我们要把音量调大,诶,我们只要通过遥控器按下那个按钮,把它调大就行了,对不对?但是里面的内部的操作就是电视机内部的结构,其实并不需要我们去管理。就好比我们将来对字段的操作呢,只需要对什么呀,只需要对字段的对,对字段的个方法,就是调查这个方法就可以完成啊,就这么一个简单的概念啊,说我们对外提供一个操作的方法,那么具体来说呢,就有方法去帮我们完成就可以了,当然方法也是我们自己去写的。好,就好比这个计算机的操,呃,电电视机的操作是一个道理,好,那么先把这个封装的概念给大家放一下,这个是封装的基本介绍。
04:02
对吧,那我这儿呢,有一个小案例给大家也阐述一下。对比计算机的操作,诶,这就是一个典型的封装。Ready吧,好,我们接着往下看,那既然说了封装的介绍,那么现在我们就来说封装的如何去理解一个封装和它的好处。封装它的一个好处是隐藏时间的细节。隐藏时间的细节,并且呢,它可以对数据进行一个验证,保证安全合理,我举个例子,比如打个比方啊,我们说有个年龄对吧,有个age这个字段大家都知道age,比如说我有一个结构体叫person person呢,它有个字段叫age,比如说是。假如是这样一个结构,比如说这有个tap。Type有个person。Person person呢有个。对吧,Structure里面呢,有个age,有个int,明白,那假设我们要对这个年龄设置一个年龄,大家都知道年龄呢,肯定我们人的年龄总是在一个范围的,一般来讲我们是最大呢,也不会超过,现在世界上最大年龄的人也应该在一百一百三十岁左右,是吧,不会超过130。
05:19
说的撑实点,不会超过一百五吧,那假设有人给在编程的时候,他给这个年龄设置,设置的一个年龄是多少岁呢?假设是200岁,这就不合理了,对不对?那我怎么样去控制这个事事情呢?我就可以啊,我就可以通过一个方法来对这个数据进行一个验证,只有在数据合理的情况下,我们才把这个纸设置进去,或者修改成功。那这个时候呢,我们这个封装它就会起起到一定的作用,比如说我们前面这个地方,大家还还记得我们写了一段代码,就这。大家看到其实这个地方也能体现出它的封装,你比如说我们在取钱的时候。比如说以前取钱,我们要取钱,其实最终就是要改变这个就是它的余额,对不对?如果说你没有这个函数,把这个字段封,把这个操作封装起来,那么你就直接把这个balance进行一个减,那肯定就不合理。
06:15
是这意思吧,比如说别人要去取钱,他明明余额只有一块钱,结果他要取一,他要取1万块钱,你就给他要取了,肯定是不合理,那怎么办呢?我加一段代码,对它进行一个校验。看看你的数据到底合理还是不合理,其实这一段代码也体现出封装的一个好处,对不对?那对别的用户来说,他只要输入一个要取的钱的数目金额,然后呢,把密码一输进去,最后我们就告诉你取款成功还是取款没有成功,是这意思吧,所以说这个封装呢,它其实就是有这么一些作用,对吧,它可以隐藏实现的细节,对,对程序员,对调用者来说,具体你怎么实现,我并不关心。只要你给我实现就行,第二个呢,我在里面可以对数据进行一个校验,只有在合理的情况下我才去操作,如果不合理怎么样,我就不给你操作了,比如说这是吧,我就直接你输入的金额不正确,你输入的密码不正确,我就退出了。
07:14
对吧,就这么一个意思,那么如何体现封装呢?就说在。高浪里边它的。封装的实现。它主要是。对结构体的属性进行一个封装,比如说我把属性小写打个比方啊,比如说我们针对这一点,假设我们想把余额封装起来,我们写个小写的B,因为你写一个小写的B,别的包就不能访问了。啊,当然了,本包还是可以访问啊,本包还是可以访问,呃,所以说我说了go浪的封装呢,它并并并没有像我们其他编其他的op里面那么的,呃,那么的强调这个封装,它更是强调强调的是一种简洁性,好吧,好,那么还可以通过方法包实现封装,对不对,我通过方法就说你你要去操作这个属性,你就必须通过方法。
08:04
再比如,我通过这个包来实现封装。怎么样呢,我让你的包,别的包用不了本包的一些方法和属性,这也能体现出封装好,这点呢,请大家做一个基本的一个认识好。那下面呢,我们就把这个板述一下,同学们放一下啊,这个我们讲了一下对封装封装的理解和好处,我们给他一个标题三没没问题吧。诶,它的好处,第一个呢,它可以隐藏这个细节,就是让我们的调用者呢,不用去关心细节,还可以对数据进行校验。对吧,这些都是它的好处,还有就是如何体现封装,我们来个标题三走一。好,没问题吧,通过方法,通过方法那么包也可以实现封装的效果好了,那么这块呢,就是封装的理解和好处,下面我们来看在勾浪里边封装实现的具体步骤,那么在勾浪里面它封装是怎么实现的呢?其实也这点还是比较简单哈,主要是这样一个方式将结构体。
09:16
字段属性的首字母小写。哎,就说我把结构体的那个名称首字母小写,把结构体里面里面的字段的属性首字母也小写。那当你把这些小写以后,大家都知道这个时候它就不能导出了,其他包就不能使用,对吧,但是本包还是可以使用。所以说我再讲一遍啊,就是说嗯,因为这个勾浪里面它对它进行简化,所以他你不要去想,诶,那我那我这个本包里面不是也可以直接访问这些属性吗?是的。那那你不能跟Java比,说Java我有一个私有的,连本包都不能访问,对吧,本包的这个除了在里面给他授权才能访问,别的地方用不了,但是go浪他就是弱化了这种封装,对吧?它它的封装的程度并不并不像Java或者其他语言那么那么高,明白我的意思吧,啊,他没有那个private,那它封装度是比较低的,还有一个呢,就是这是第一,这是第一步啊,第二步给结构体所在的包提供一个工厂模式的函数。
10:19
就是我们前面写的那个,因为你想让别别的包来用嘛,那你只能给他一个工厂,工厂模式写这个函数,首字母大写类似一个构造函数。啊,第第二步第三步提供一提供一个首字母大写的set方法,那你为什么要大写set呢?就是因为你希,你如果是希望,呃,希望别的包来使用它。那你只能提供一个set这样的方法,对他的字段进行一个设置,比如说下面这段这段代码看吧,这个类似于其他语言的public,因为你手字母大写嘛,对吧,对属性进行判断并复制啊,比如说我要在别的包来操作什么呀,这种私这种这个首字母小写的字段,那我就给它提绑定一个什么呀,给这个结构体绑定一个set方法。
11:05
完事,那这里面我通过它来设置,当然你在设置的时候呢,这边可以加入你的业务逻辑。明白我的意思吧,比如说假设我们就给这个字段叫age这个字段设置一个edge,设置一个呃,设置一个值,那你这前面就可以加一些业务逻辑进行判断,比如说if,你进来的这一个设置的年龄必须在一到一百五之间,我才给你设置,否则我就拒绝复拒绝给你设置这个值,对吧?诶,这这不就是风筝的体现吗?对不对,这就必须通过我授权的这个函数才能操作,我私有的这个age是这意思吧,诶,你理解这意思吗?啊,就这样子,我还把它撤回去字段。好,那么你既然有设置的这种方法,那你一般就会提供一对,呃,提供一个那个get的方法,Get方法呢,也是让这个既大写首字母大写,然后这个时候呢,我们怎么办呢?诶,我们直接把这个你要需要返回的这个字段返回,比如说我要获取到呃,首字母小写的age,我就这样写吗?Age。
12:13
对吧,但是呢,我要是通过这个get方法来返回的啊,这样子,因为你这个get它跟这个结构体绑定的,同时呢,首字母又是大写,那我当然就可以去使用它,对不对。好了,这边我要特别给同学们强调一下啊,尤其是呃,这点我要特别说明一点,就是关于封装,这个勾浪里边的封装的特性是在勾浪开发中并没有特别强调封装。就说就说go的go浪,它的面向对象里边,它本身就是做了很多简化的,所以它并不是特别强调这个风动的概念,这一点呢,并不像Java,它并不像JA啊Java,你看Java里边它所有的字段一般来讲都会做成私有的,是这意思吧,如果学过Java的都知道,它的字段一般都是私有属性,然后每一个属性都设置一对get set方法。
13:01
对不对,但是勾浪里面他并没有特别强调封装,他认为什么呢?他认为没这个必要。为什么他认为没这个必要呢?因为他觉得你作为一个程序员,开发程序员,你就应该保证你的代码是准准确的,对吧,你设置一个年龄,你你为什么要设置一个200岁的年龄。他认为你这些事情在编程的时候,程序员就应该去控制,理解我的意思吧。啊,当然你可以加if判断了,你也可以加if判断啊,他认为你你这样才是合理的一种行为,当然了,你适当的用这个set方法,Get方法,他也不反对。他也不反对,因为他还是要还是要靠这个方式来进行这个封装的体现嘛,但是他并不是特别强调这个东西,好吧,所以说我要提特别提醒学过Java的朋友,不要总是用Java的语法特征来看待勾浪,因为勾浪本身对面向对象特性它做了简化的,你比如说学到后面你会发现它,它连构造函数都没有。它连构造函数都没有,它连ten就没有,对不对。
14:01
他连这个方法的重载都没有,所以它是做了很多简化的,好,OK,这点请大家一定要特别的注意啊,好,那么我把这个封装的实现步骤呢给大家整理一下。封装的实验步骤,给大家整理一下。OK,大致的步骤应该是这样子,第一步。对吧,第一步这样。第二步。第三步OK,那我把这个呢,也稍微的往后面挪一下诶。这个。好,然后这边挪一下。然后这是第四步对吧,第四步。第四步呢,我这边也挪一下,诶,它有一个,它也可以设置一个get方法。然后这边有一个特别说明,我也给他强调一下吧,强调一下大家注意一下,就特别说明。就是尤其是我们有些同学是学过Java的,那么这一点他是有有点不太好理解哈,就是觉得诶为什么Java有勾勒没有啊,勾了就是没有没办法。
15:03
OK,好,关于这个封装的,呃,实现的步骤呢,我们就说到这了,那关于封装的一个基本介绍,老师就先介绍到这里。下面呢,我们就来做一些封装的一些具体的演示和案例,好这块呢先说到这里啊。
我来说两句