00:00
同学们大家好,本小节将为大家讲解一下面向对象的第三大特征,也就是多肽。好了,那在这里边首先我们先建一个文本文件,我来记录一下多态的相关信息啊,文件叫做多肽。然后呢,给大家介绍一下多肽的概念啊,多肽的概念什么叫做多肽呢?其实就是非常简单的一个介绍,叫多种状态,那么其实所谓的多肽就是指我们同一个类和对象能够在不同的情况下产生不同的状态这么一种效果,来给大家举一个例子,行不行?画个图来给大家介绍一下多肽的一个简单的一个说明啊,让大家来更加方便的理解一下,到底多肽的意义是什么,或者多肽是什么意义,点开附件,点开画图。然后呢,给大家讲一下多肽,比如说我这里边有一个什么呢?有一个类啊,这是一个干什么事呢?叫计算,计算周长和面积啊,周长和积这么一个类啊,或者是一个功能类,那么我们可以这样来做,如果我们给这个类啊中传入一个三角形,就把三角形传到我们这个类当中,那么它最后计算出的结果。
01:19
则是什么呀?三角形的周长与面积啊,三角形的周长与面积。与面积,那么如果我们给它传入的不是一个三角形,而是一个正方形的话,那么这个时候啊,我们就可以计算出啊,通过这个类功能类计算出什么呢?计算出一个诶叫做正方形的周长与面积啊。这个正方形的周长与面积。周长与面积,这是我们的什么?第二个效果,如果说我们不传正方形,而传了一个什么呢?而传入一个圆形,而传入一个圆形,那么这个时候我们颜色换一换吧,好吧,我们如果传入一个圆形。
02:17
给这个类或者叫对象来使用的话,那么最后我们就会得到一个圆形的周长与面积。来,我们得到的是圆形的周长面积。圆形啊,写错了啊,叫圆形的周长与面积,那么大家来看啊,同样于对于计算面积和周长的这一个类啊,或者说它的对象而言啊,我们由于传入的内容不太一样,我们可以传入什么呀?我们传入三角形得到的是一个三角形的周长与面积的一个效果,对不对?我们穿一个正方形得到正方形周长与面积,我们传一个圆形得到圆形的是吧,周长与面积,那么这种情况下其实就已经是多态的一种概念了,什么意思呢?
03:07
注意我们的重点会让我们的着力点在哪呢?在于这个当前这个计算周长和面积的这么一个类,然后呢,由于你传入不同的内容,导致产生的结果不一样,或者叫产生了多种状态,那么这就是多肽的一个简单的演示,再比如说拿到计算机里边,我们也有同样的功能,在我们的计算机中啊,通常都会有一种东西的数据库,可能给没有计算机基础的学生讲数据库有点早啊,但是还是可以给大家介绍的,我们数据库所谓的数据库就是存储数据的,那么我们经常是不是可能会用到数据啊,那就需要把数据加进去啊,取出来各种各样的操作,那么数据库的操作主要分为四大类啊,叫做增删改查四大操作啊,增删改查。
04:00
改是这个改啊查的操作,那么这个时候这个类是一个什么呢?叫做数据库操作类啊,数据库操作类。那么我们注意看好了,数据库是存在于多种的,我们有什么呀?有microq数据库呀,Oracle数据库呀,Microsoft SQL server呀,生产DB two呀,Not a RA啊,果啊等各种各样的数据库,那么我们这个类或者它这个对象啊,最后产生的会是什么样的一个运行结果呢?现在是不知道的,但是如果我们传入一个MYSQ操作的对象啊,就是一个MY的一个对象啊,或者叫做操作,操作MY的这么一个对象,把这个对象。传入到我们的什么呀,这个数据库的操作类当中去,那么我们所得到的结果就是什么呀?操作MYSQL数据库啊,就是操作MYSQL数据库。
05:05
来,这就是。MYSQMYSQL数据库的增删改查操作,哎,然后呢,如果我们传入的不是MYQ数据库对象啊,而是传入了一个什么呢?而是传入了一个Oracle的数据库操作对象,比如说我们在这里边把Oracle对象啊放进去操作Oracle的对象,那么这个时候如果把这个对象啊传入到我们的数据库操作类当中,那么这个类的或者这个对象操作的结果就很明显,它一定会是一个MYQL数据库的操作结果吧,是不是MYQL数据库的操作结果来给大家,不不不是or or orle数据库的操作结果,咱又说错了啊。Oracle数据库的操作结果啊,然后呢,我们还可以传别的,比如说我这次不传Oracle了,而是传了一个什么呢,而是传了一个RA的什么呀,数据库对象啊,我们这块可以传一个另外一个数据库的操作对象,Re BIS操作对象。
06:16
操作对象。对象把它传到我们的增删改查这个类当中去的话,那么最后产生的结果则是什么呀?针对于我们的red数据库相关的操作啊,来我们记录一下。这就是。Red数据库的增删改查res数据库的操作啊结果,那么大家也看同样的一个什么呀,增删改查这么一个类和对象,它是不是可以产生不同的效果呀,这就是多肽啊,这就是多肽,但是大家需要注意,多肽不是语法,多肽不是语法,而是一种思想啊,而是一种设计思想。那么下面我就给大家用例子来讲解一下多肽的应用行不行?好了,把这个先关掉,或者我们新建一个文件啊,新建一个。
07:11
文件保存,然后呢,干什么事呢?用一个比较贴近现实的方式,让大家来了解多态,我现在干什么事呢?设置一个类啊,这一个类叫做行为类。就是或者叫行动类都行啊,叫行为类,或者叫做行动类,所以你变了行动类,然后干什么事呢?这个类里边我们给他设定一些操作啊,设定一些操作,比如说设定出三个操作吧,行不行,三个也行,两个也行,一个也行啊随便设定两个吧,设定两个操作好不好,两个操作吧。说哪两个操作呢?好,这个类里边的操作有这样,第一个操作我们设置为叫做叫啊叫。然后第二个行为我们设置为什么呢?跑行不行,跑就这一个东西,然后干什么事呢?注意看好了,这只是一个行为类,或者叫做行动类,它没有作用主体明白了吗?就是它有一些行为,但是没有告诉你谁做谁做,是人在做,是猪在做,是狗在做,是猫在做,我们不知道,所以这个时候可以什么呢?我可以把一个什么呀,能叫能跑的一个对象,或者叫一个实体传入到我们的行为链当中,然后让它产生作用,继而产生对应的结果,继而产生对应的结果,比如说我现在传一只小狗进去。
08:38
那么小狗是怎么叫的呢?叫的结果就是一个汪汪叫,对不对,汪汪叫,然后呢,它跑的结果就是什么呀,四条腿是不跑啊是不是,然后呢,传小狗是这样的,如果这次我不传小狗了,而是传一只什么呢?而是传一只小鸡进来,而是传一只小鸡进来。
09:02
小鸡啊。来,小鸡进来,那么小鸡传给行为类,它最后的产生结果会是什么样子的呢?那么这个时候大家应该知道啊,小鸡叫是咯咯叫,咯咯叫是不是?来,咯咯叫,来在这里边我们给它写一下,小鸡是咯咯叫啊。它的叫的结果是咯咯的叫啊咯咯叫,咯咯哒咯咯叫是不是,然后它是怎么跑的呢?它是两条腿,是不是两条腿跑两条腿。好跑,然后这次再再换一个,咱不再换什么呀,咱再不换不写小鸡了,再写一只小猫行不行,那么我如果把一个小猫啊小猫。传到我们这个行为对象当中去啊,小猫啊。小猫好,写错了啊,小猫传到我们的行为对象当中去,那么小猫产生的一个行为结果是另外一个状态,什么状态呢?那猫是喵喵叫对不对?猫应该是喵喵的叫,它的叫啊叫。
10:16
是喵喵叫,他怎么跑呢?也是叫做叫做叫撒腿就跑,行不行,撒腿就跑。好了,那这个时候就是一个动态的一个典型案例了啊,有一个行为类,然后你传入不同的主体对象,产生的结果是不一样啊动状态,然后这个时候大家会想,为什么你要穿小狗、小小鸡、小狗和小猫呢?你怎么不穿一条鱼,你怎么不传什么呀,你怎么不传一个这个这个我乌这个乌龟进来呢?很简单,因为我们这个行为类有规范,里边得能跑能叫,对不对?所以你传入的东西也必须具备跑和叫的功能,这就意味着你传入的什么呀,对象或者叫内容一定会有一个约束,那么什么来对它进行约束呢?从我们的分析中我们可以得知啊,由于我们要求的是传入的动物必须能跑能叫,所以我们就要制定一个规范啊,什么规范呢?就是这些传入动物必须能跑能跳,制定规范的东西,我们学过一个东西,什么呀,抽象类是不是可以制定规范,所以确实是。
11:28
你们可以在这里边使用抽象类啊来进行操作,这里边抽象类类定义啊,一个动物就可以了。这样的话,我们关于面向对象中多态的一个完整结构就给大家画出来了,那么怎么来实现呢?下面就通过代码来看好不好?来我们在这里边啊,实现一下多态,右键新建一个P文件MU啊。Met music,多的意思啊,好了,然后在里边点击OK,然后呢,根据我们这幅图来进行操作就可以了,结构已经写的很明白了,首先为了让我们能够使用这个多肽,一定要先定义好这个规则,对不对,就是这个动物的规则,所以我在最开始的时候设定抽象类啊,抽象类定义我们的动物规则。
12:24
海淘说规则,哪来的规则是根据行为类推导出来的,那在这里边啊,Class,我们的抽象类叫animal,叫a nine animal啊弹框,那么大家也知道啊,我们既然要做一个抽象类的话,自然就要进行抽象的设置,对不对?首先在这里边需要导入我们的抽象模块ABC模块,然后呢,在这里边动物设置的时候,需要让它设置一下me class。就是它的原类,我们是不是得指定一下,得是ABC模块当中的为ABC迈上才可以,然后呢,设置动物的一个共同规则,我们的动物要求非常简单得能叫能跑吧,是不是,所以在这里边啊,我们设置啊,设置设定啊,设定抽象方法。
13:13
什么呢叫啊抽象方法叫,然后还得设定抽象方法就是我们的好,其中叫的方法,咱给它叫做什么呢?C行不行,就说的意思,设定一个方法pass一下,要想让它变成一个抽象的,我们是不是得。写多线at ABC点我们的什么叫做abstract methodage就可以了,这样的话,这个方法是不是设定完了,设定完了之后再设定一下跑的方法啊,DF,我们写上r right,然后呢,Pass一下,它也得设置为抽象,所以在里边at ABC点我们的F好了,那这样一来的话,关于我们图中的。动物这个定义或者叫抽象类,是不是定义完了好,定义完了之后,我们需要根据这个规则生成不同的怎么样,或者制作不同的这个动物类啊,然后呢,在这里边我们干什么事呢?先叫声明一个小狗的类啊,声明小狗的类行啊。
14:19
我们在这里边的类。我们在里边class写上dog,然后呢冒号,然后呢,由于我们的dog要按照什么呀规则继承抽象类的是不是要求啊,是不是,所以我们在里边得继承一下animal啊,继承一下我们的animal n ni animal好,继承完了之后呢,干什么事,你需要把它的抽象方法是不是实现了才行啊,不然否则的话,你这个狗的这类是没法使用的,所以我们继承过来之后要实现这些方法,咱们比如说设这个叫的方法,我们就要在里边实现一下print,我们输出一下啊叫小狗汪汪叫,小狗汪汪叫。
15:00
汪汪叫,然后呢,怎么跑呢?把这个删掉啊,我们写上它的跑print,它上括号叫小狗四条腿跑,小狗四条腿好好搞定,那么狗的类是不是就制作完成了,因为它继承了animal,并且实现了animal中的所有抽象方法,然后记下来,我们还需要小猫啊,所以定义一个或者叫声明一个吧,声明小猫的类啊。小model类,好,然后我们再来class,我们写上片,然后超上括号,它也要符合我们的抽象类的定义要求,所以记成animal,实现一下我们的抽象方法。首先小猫是怎么叫的呢?它是print,我们写上小猫喵喵叫。啊,小猫喵喵叫,小猫喵喵,小猫喵喵叫。然后呢?跑的方法,我们也给它实现了print print靠山块我们写上小猫撒腿就跑,小猫撒腿就跑。
16:06
三脚猫是不是好了,然后呢,还有我们的小鸡是不是声明啊小鸡的类。小鸡的类,然后在这里边class,我们叫它啊,Check考上括号,也要继承我们的共同要求,Animal抽像类,然后呢,实现它的方法,那么鸡也要实现能叫能跑的方法,所以C的时候print一下啊,我们小鸡是咯咯叫,是不是小鸡咯咯叫啊咯咯叫。然后呢,它是怎么跑的呢?我们来实践一下,小鸡是两条腿跑,然后写上啊,小鸡两条腿好好搞定,现在我们完成了什么呢?抽象类写了,小狗的类写了,小鸡的类写了,小猫的类写了,但注意啊,这这里边传的不是类啊,这里边传的是对象的,这里边用的是小狗小猫,对象是不是,你想想对,你不可能把一个什么呀,你不可能把一个类给他拿来用啊,肯定是要在真正的某一只小猫叫,某一只小鸡叫嘛,是不是在这边是对象啊,好,然后呢,你可以在这里边啊,类都有了,实例画出这三个对象呗,实例画啊。
17:18
实例画小狗小猫和小鸡的对象没问题,小狗咱就拉小黑吧,你看小黑等于啊,多少个实例画一下就可以了,然后呢,这是小狗啊,这是小狗。小猫的话,咱叫他小花吧,小花。小不太好叫小花行,小花小花妈妈来cat画上括号啊,这样的话,小猫的对象是不是也有了?好,小猫的对象也有了,然后再来一个小鸡的对象,小鸡的对象咱叫它小飞行不行,等于啊。那这样一来的话,关于小鸡的对象也有了,小鸡的对象也有好,但是多肽还不能使用,为什么呢?因为你没有行为,所以我们在这里边需要把行为类声明出来啊。
18:12
声明行为类啊,这个类简单class action act ion,然后呢,不需要继承什么,但是我们知道的是行为类里边一定有两个方法,一个叫做什么呀,叫的方法。一个是叫的方法,一个是跑的方法啊跑的方法,那么叫的方法咱可以DEF定一下,比如说。叫他叫。答,你叫个别的没叫,你叫C也可以啊,然后pass一下,然后呢,跑的方法啊DF我们写一个跑考上括号也pass一下。然后这个时候呢,我们会发现啊,在这里边,我们这个行为类也是没有问题的,对不对,好接下来。那么我们现在要把小鸡小狗小猫对象传到行为类里边才能够使用啊,才能够使用,所以呢啊,你这个行为类可以直接用类,也可以用它的对象,就看你怎么设计了,那么按照正常情况下,我们是不是一般情况下比较喜欢用对象了,是不是特别这里面还带色,那咱就用对象来进行操作。
19:18
好在里边干什么事呢,实例化。行为类的对象啊,这个简单啊,比如说act action就等于act ion,这是不是对象就有了,那么在这里边我们从图中就可以看出,你小狗需要传进来,小鸡需要传进来,小猫也可能需要传进来的吧,是不是?所以我们就得考虑啊,我要把小鸡小猫小狗的对象传进去,好传进去没什么难度嘛,无非就是实例化的时候,在这里边传一下是不就可以了,比如说我们把这个小黑,就是小狗传进来行不行,那你这里传了。它这个类里边是不是得有人接收啊,所以我们在这里边加一个初始化方法啊,初始化方法用来接受一下我们这个小黑啊,那在里边DF我们下线下线init下线下线好长括号,然后你传进来的不是一个动物吗?所以我们写上in ni。
20:11
那这几个时候大家其实也能看得出来啊,什么东西呢?当我实例化这个行为对象的时候,小黑会传进来被animal接收,对不对,然后呢,接收了之后,我们未来是不是希望这个小狗叫小狗跑啊,是不是也就说这个动物下面两个方法还能用到,所以在这里边啊,将接收的动物,将接收的动物啊,动物保存到保存到。当前对象中这个导很简单直接什么呀cf.N。好等于al好搞定存进来了,那存进来是不是就可以用了,如果我们希望叫的时候,让这个动物叫,是不是在这里边啊,叫调用动物的叫方法啊调用。动物的叫的方法,首先动物在哪?动物是不是在你当前对象的animal里面,我们这里边通过SF.animal啊,点ML找到动物啊,这只是动物,那么这个动物就是小黑了,那小黑如果想叫的话,是不是应该调用小河里面的C方法,那么这个时候我们就在这里边啊,写上了这个。
21:23
踩哪去了,往下拉啊。我们就在这里边啊,就在这里边写上了animal self.animal小狗点C啊C看框这就可以了,很多学生会很奇怪,什么连着点啊,其实很简单,你这两个先结合一下,s.animal是不是就小A对象点C,不就小黑点C吗?是不是?所以这种叫做什么呀?叫做连续访问是可以使用的,然后呢,如果跑也是一样的道理,我们通过s.n ni ML找到这个动物,然后让它跑,就是RA方块。这样一来的话,右键运行程序啊,现在不会发生什么变化呀,但是你看好了,现在我是不是有了一个行为对象了,看好了哎,调用行为对象啊,调用行为对象的方法,比如说我们ACP这个行为对象里边有什么呀?有一个叫做叫的方法对不对?你会发现它叫的结果是小狗往汪叫,如果我们是望这个行为对象h action。
22:23
Action能够跑的话,我调用跑的方法,它会自动调用小狗跑的方法,看到没有小狗饲条就是跑很多人,这就多态了吗?没有,这只是实现了一种状态,如果你希望多肽的话,无非就是一个对象可以产生不同的结果呗,是不是好?那么我们可以在这里边修改动物啊。叫修改传入的动物,你原来传入的是不是小黑呀?我想改一下很难吗?并不难,你直接action。Action不就是我们的行为对象吗?它里边的animal animal是不是就动了,我设置为小花,看好了,这时我们把小猫穿进去了,是不是你再次调这种行为对象,你看它的结果啊,你看它的结果。
23:10
是不是小猫操作了,是不是小猫喵喵叫,小猫把得跑是不是,那么我可以再次修改啊,传入动物修改修改传入的动物啊,A action.aim ML,我等于这次等于什么呀?小C,那么再次调用我们这个对象的行为的话,你会发现它是小鸡的操作啊。是不想接操作,大家来看一下我这里边是不是得到了一个效果,什么效果呢?同一个对象因为传入的内容不同而产生了完全不同的一个效果呀,这就是多肽啊,知多肽在我们的生活开发中用的非常之多,只不过什么呢?你的开发越接近于底层用的越多啊,你如果只是表层的话,用的多ta还是比较少的啊,特别是接近于底层的时候,比如说我要做一个软件,这个软件可以支持十种或者20种数据库的话,那么这个时候多态在底层就显得非常有必要了,诶,我传入一个呃,什么MYSQL的数据库到对象,结果就是MYSQL。
24:15
呃,操作MYQ对不对?MYSQ增态改查,如果我传输的是一个Oracle的数据库,操作对象结果就是Oracle数据库增态改查,如果我传输是red,那出来就是red增加啥,我如果传输一个芒果DB数据库,出来就是芒果DB数据库的怎么样增删改查,所以这就是一个多肽,如果注意多肽是一种设计思想,而非这一种语法,在多肽的实现过程当中,我们用到了什么呀?我们是不是用到了这个抽象类来定义规则呀,是不是这也是比较常见的。多肽就到此结束,多肽对于初心者来说并不是那么容易理解的,大家要注意啊,对于面向对象刚开始学的兄弟们,他应该是一个不太理解,甚至你会觉得它是一个莫名其妙的东西,为什么呢?因为你没有在实战中用到它,当你用到它那一天,你才会恍然大悟,我们现在多肽毕竟是把思想和语法分给大家啊,真正实际操作还在后面才能遇到。好了,感谢大家收看本小节的内容,我们下一小节再见。
我来说两句