00:00
那接着呢,我们来讲面向对象,嗯,这里呢,提到一个概念叫面向过程与面向对象的一个对比,嗯这呢,咱们讲这个高级语言的时候提到过,说高级语言呢,又分成两个阶段,第一个呢叫泌向过程的阶段,第二呢叫面向对象的阶段啊那这里呢,我们要对比一下二者呢有什么区别啊?呃,这里说面向过程它强调的呢是叫功能和行为啊,以函数呢为最小的单位考虑呢,怎么去做?那面向对象呢,主要呢,强调是将功能的封装进对象,强调的是具备了功能的对象,以类和对象呢作为最小的单位考虑呢?谁来做?嗯,这句话的话呢,就是懂的人看了以后呢就会懂,不懂的人看了以后呢,还是不懂,基本上就这种现实是吧,那我们这块呢,来举例子说明。那比较经典的这个例子呢,这个都啊,常常都爱说这个事儿啊,就是人把大象装冰箱这个事儿。
01:06
装进冰箱啊,没有后边分几步的事啊,呃,就是这样的一个过程,我们来描述一下,这是咱们这个小品当中说的这个问题啊,那我们这儿呢,用面向过程和面向对象的这样两种不同的思想呢,去来刻画一下这个问题该怎么去实现啊,第一个呢,就是叫面向过程,哎面向过程呢,刚才咱们说了啊,说它呢强调的是功能行为,以函数呢为最小单位考虑呢,怎么做?诶来看一下,那么遇到这样的问题,说人把大象呢,得装到冰箱里边了,我们怎么做呢?这里边儿就主要呢,就是体现的是叫函数了,函数,比如说第一个函数怎么办呢?诶我们考虑呢,就是把人啊这个不不能强调这个人了,就直接呢强调这个功能了哈,就是把冰箱门打开。
02:08
哎,这是第一个过程,然后第二过程啊,这叫抬起大象,嗯,然后呢,塞进冰箱,哎,这是第二个过程啊,第三个过程,对,把冰箱门关闭。诶,这就是这样的三步,就这里边的每一个步骤呢,其实都是一个功能和行为啊,其实我们都是用函数呢来进行刻画的啊,这样的三个步骤就搞定了。行,那这是面向过程了哈,然后呢,如果我们用面向对象的思想去设计,刚才呢,我们看到了说面向对象呢,它强调是具备了功能的对象啊,以类或者是对象为最小单位,然后考虑呢,谁来做?他更多的呢,是考虑谁来做,就是一开始的时候呢,从一个比较高的一个高度上去看这个问题啊,就像是比如我们这个人每天其实都在做这个事情,其实更更多的人平时每天做事呢,像是一个面向过程的,就每天我做了这个事,做那个事儿,然后做这个事,做那个事,那么对于比如这个天上的人来讲,他看到我们这个芸芸众生呢,就是啊,这些人是好人,这些人是坏人,就是怎么怎么着的,他呢看到的都是我们的一个一个的对象,哎,是这样的一个过程是吧,就有点像他们有点像这个面向对象的一个概念一样啊,我们这块呢,主要来关注一下要做这个事儿里边主体都有哪些。
03:38
啊,关注的是这个主体了,那很显然人是一个主体,对大象呢是一个主体,冰箱呢也是一个主体。找名词就行是吧,哎,这个名词呢,都是一个基本上都是一个实在的一个东西了啊,那找到这个主体以后,我们要想完成这样一个功能,那就是关注一下这个主体我需要具备什么样的功能了,把这个功能呢,我们封装到这个对象当中,或者要封装到这个主体当中啊行,首先呢,我们提到一个人。
04:11
这个人的话呢,我们就可以用一个类来进行刻画啊,咱们写个类呢,都有一个大括号了啊,那人需要具备什么功能才能做这个事儿呢?首先它是不是得能够打开冰箱门啊,开冰箱门的功能也得有打开,打开的呢,不是汽车门,不是别的门,不是银行这个仓库的门是吧?嗯,这个是这个冰箱门诶所以打开的是冰箱,你不能开别的啊,那打开冰箱那里边呢,也会掉一下这个相应这个冰箱的一个,比如开开的一个功能不能呢,你试试着去打开冰箱,结果冰箱就没有门,冰箱呢得有门,它也能开啊,所以呢,冰箱得有一个功能,这就提到了另外一个主体叫冰箱,哎,冰箱呢,它这个功能呢,叫做开开。
05:02
这个开开,这个这个是咱们这个中文的是吧,中文的一种说法,这个外国人可能还看不懂,开开是什么,Open open是吧,哎,就是打开的意思啊,诶就是这个它打开的话呢,就涉及到这个冰箱里边,比如它的那个转轴啊,怎么转呀,多少度啊,怎么着的一些细节问题啊行,这呢是我们第一个功能,其次的话呢,开了冰箱门了,人呢还这个功能,这个大象呢,虽然比较重,但是呢一定能抬起来。哎,所以呢,我们得能够抬起,哎抬起的呢,不是一个大熊猫,也不是一个人,抬起的呢,是大象,所以呢,你抬的这个主体是谁呢?也得明明确出来台阶大象,那这里边大象呢,哎,我们就可以去进入,进入的不是别的地儿,进入的是冰箱。哎,这是一个功能,那这里边儿呢,就提到了另外一个主体叫做大象。
06:02
诶,大象大象的话呢,人能抬起来,那大象呢,必须得能够钻到这个冰箱里才行,这个事儿才能完成,所以大象呢,得具有这样的功能,对,它得能够进入到冰箱里,哎,进的呢,也不是别的地儿,刚才说了这呢,就是进入的这个细节,比如说这个先先鼻子进去啊,还是先腿进去啊,还是哪先进去啊,这就这些细节了,你在这里边呢,去刻画。诶是这样,然后我们这儿呢,只是通过人呢掉这个大象,然后呢,诶自然而然的让这个大象呢就进去了。哎,这是第二个过程啊,第三个呢啊,你也得收尾一下,这个呢,我们叫关闭,哎关闭的呢,也不是其他的一些结构啊,编辑的关闭的是冰箱,哎冰箱呢,哎得有一个操作,哎这个不不不能叫关,关了这个没这个词是吧,要比如说闭合诶这样诶然后冰箱的话呢,这块你得有一个操作,哎不能,这个门呢是单向的能打开关不了啊冰箱呢,得有这个闭合的操作了。
07:11
啊,里边又涉及到比如说这个转轴或者荷叶是吧,它得转多少度啊,怎么密封,密封完以后呢,里边冰箱那个灯可能得得得灭掉是吧,一些细节的操作呢,在这个闭合里边去实现好,那完成这样的一个过程的话呢,我们这里边儿涉及到这个主体呢,呃,以及相关的功能呢,咱们就算设计好了。哎,这就设计好了啊,涉及到这样的几个结构,一个叫人人呢具有这样的三个功能,然后冰箱呢具有两个功能啊,大象呢具有这一个功能。哎,这呢,我们就要类的一个设计。这个一旦设计完以后,我们要想做这个事儿,我们呢,就是创建一个真实的一个实实在在存在的一个人,比如说是小红啊小明啊啥的是吧,诶造了一个真实的人,然后呢,他就具体的呃,再拿到一个真实的冰箱,再看到一样一个真实的大象啊,开始去把这个事儿呢完成啊,这就是一个真实类,然后真实的冰箱,大象和人呢,都是对象。
08:15
哎,我们让他呢去调,我们设计这个类当中的这些功能,哎,然后他就可以做这个事儿了啊,然后回过来我们再看这句话,我们刚才这个过程呢,说主要呢,是强调具备了功能的对象啊,那这个对象呢,得是由类派生的,所以咱们先是去设计的类。啊,所以重点呢,咱们关注的就是这个类了,那就是由谁来做这个事儿,做的这个主体,哎,是我们面向对象关注的重点,而这个面向过程呢,它更多关注的是叫功能和行为啊,以函数呢为最小单位,上来呢,就直接奔着这个事儿去了啊,他没有对它进行进一步的这个抽离啊,没有关注说怎么去把这个再分一分,这个具体的这种实现的这个主体啊,而是直接呢就开始去做这个事儿了,好,那下边呢,我们来这个首先呢,大家能够通过我们刚才写的代码,能够稍微体会一下这个这里边两句话哈,那接下来的话呢,我们对比一下,咱们说面向过程比这个面向对象呢,好像要低一级别是吧,似乎呢,从这个写的这个过程来看呢。
09:25
这就三行,这呢好像写的有点多,似乎好像面向对象更复杂是吧,其实不是啊,这里边呢,这里边细节咱们只是没有展开而已,展开以后的话呢,你会发现它代码量不比这边少多少,没有展开细节嘛,啊这是第一个点啊,另外的话呢,诶,当咱们关注于这个主体以后,其实呢,很多事情呢,就更容易理清楚了。啊,就比如说回头这个功能呢,我们又想进行拓展了,那你这块呢,又去加很多的函数啊,里边代码其实不比这个少多少啊,那我们要是那这个功能要拓展了,那我们呢,只需要在现有的这几个结构基础之上,我们给他去加几个相关的,你看加到谁那合适加一些功能就可以了,然后调的时候呢,仍然是拿这个人的主体,或者说这个大象冰箱的主体呢,来去完成这个功能啊,就是结构呢更加的清晰。
10:23
诶,尤其是当我们的这个项目的代码量比较大的时候。啊,你假设呢,就几十行的代码,几百行甚至上千行的代码,这个时候呢,其实可能体现面向过程和面向对象呢,还不很明显,但是当我们一个做的一个系统做的一个项目,比如像12306呀,像淘宝京东啊,呃,这个天猫啊这样的后台,这个代码量极其庞大,我们需要设计各种各样的子系统,各种各样的子模块的时候,那么我们面向对象的这个设计就体现出它的优势来了,呃,就是工作量极大,代码量极大的时候呢,我们更多的通过主体的方式来体现这个代码的一个功能,呃,这个结构更清晰,包括后续呢,咱们还会讲啊,面向对象的这三个特征。
11:12
啊,封装继承多肽,尤其像继承性啊,我们又想进行功能扩展了,我们直接让一个类一继承它那个类呢,就具有了,这里边儿的功能拓展性大大提高啊,包括再通过多肽的方式呢,去这个呃。又可以省略很多的代码啊,实现一些结偶性啊呃,重复利用啊等等啊,这个呢,有大量的一些好处就过来了,所以呢,哎,我们认为面向对象呢,要高于这个面向过程。啊,从这个思想设计的思想上来讲要高一档啊,再举一个生活中的例子啊,比如说哈,就是面向过程呢,跟面向对象呢,其实更像一个企业啊,从一开始创业开始,到他呢,成长为一个成熟的企业这个过程啊,那么最初的时候,这个企业可能创创业的这几个人都很少,他更像是一个面向过程的一个阶段啊,就这时候呢,比如说一开始创业的就只有五六个人,其实最初的时候不会说把这几个人非得分成说你是这个市场部的啊,你是这个咨询部的啊,你是这个运营部的,就那么几个人,通常都不会去分,那基本上这几个人呢,都是奔着事儿来的,遇到什么事了啊,几个人窜和窜和,然后就整成了是吧,下个事来了,再接着这样整一下啊,然后或者你你这个整一半,然后我这个就接手,就是这个人少的时候呢,看着比较高效一些,但是当你这个企业的话呢,比如已经变变成这个500人的一个队伍了。
12:42
就相当于这个代码量大了,那这个时候呢,你像这一堆人都在这待着,你要是不给大家画一画部门分分部门的职责的话呢,那就很乱了,大家天天过来以后好有事来了,轰隆一下都都上去了,这个又来了,又又又又都跑这边去了,就是你就会显得很乱。
13:00
啊,那此时呢,我们就得考虑这500个人,我们得分成啊,你们这些五个人,十个人是市场部的啊,那几个人呢,是这个运营部的啊,那个是网络部的,这个是开发组的,呃,分好以后,我们接下来给每一个部门呢,去定他们的这个部门职责,呃,规章制度,那就相当于我们在设计每一个类中的内部的功能,哎,这都定义好,定义好以后,现在突然来了一个事儿了,那我们得看哦,得先得由这个,诶比如说市场部先发起是吧,因为他有这样的功能,他先呢做这个这个这个这个事儿,他做完以后呢,再交给下一个部门啊,再做这个这个事儿,然后再交给下一个部门,这个时候呢,你整个这个就看着非常的,这叫什么流程化啊,而不是像一开始的感觉乱糟糟的这种情况。啊,那如果说呃,又又有一些新的这个随着市场的变化哈,需要做一些调整啊,这个运营部呢,需要具备一些比如自媒体的功能,哎,你就给它加功能就可以了,哎所以呢,哎会显得我们整个这个设计呢,就非常的干净,这个这个好是吧,哎就是这个意思啊,哎就相当于刚才我说的这样一个过程,体会一个面向过程和面向对象的这样一个不同的这个情况啊行,哎通过刚才的举例呢,包括我们这个大象这个事儿呢,大家去体会一下后边写的这个各自的两句话啊。
14:22
呃,面向对象呢,后边呢还提到有三个特征啊,封装继承和多态,那对应的在代码上怎么体现啊,这个我们讲到的时候呢,再说啊,哎,大家呢,一开始也不用说把这个面向对象呢,看着就感觉很恐怖一样啊,说马上跟要跑一个马拉松一样啊,就是感觉非常的紧张啊,就怕自己坚持不下来,这个没必要啊,其实呢,跟前面呢也没有太大区别,就是每天的代码该敲的就敲就可以了。啊,这个你只要相信一点,这个呢,正常你就跟着我这样听去,该做的做了,那最后呢,一定不会有问题的啊,就可以啊,然后呢,这块呢,又提到了,相当于是个总结式的了啊嗯,由面向过程转向面向对象,相当于呢,我们这个成员这个角色呢也有了变化,我们呢是从面向对象的面向过程的这种叫执行者转化了,转化为叫面向对象的一个指挥者,对原来呢,你就是光是去做事的,奔着事一个一个来,现在的话呢,你停下来想一想,这些事的话呢,到底该由谁来做,谁去指挥,谁具备什么样功能啊,相当于是一个指挥者一样啊,那么真实遇到问题的话呢,我们该怎么去解决,这涉及到一个思路和步骤啊,首先呢,根据问题的需要,哎,我们选择问题所针对的现实世界中的实体。
15:44
哎,就大家呢看这块儿呢,就看就想咱们刚才说人把大象装冰箱这个事儿啊,现实世界中呢,那就是人大象和冰箱,那接下来呢,要想解决这个问题,我们呢,给他得抽象出来,概念当中世界,呃,概念世界中的类,那就是人这个类。
16:02
冰箱这个类和大象这个类,嗯,那形成这种概念上的这样的一个类啊,说人得有什么功能,哎,大象冰箱得有什么功能啊,接下来呢,我们得看用计算机语言怎么去给它描述,那这里边儿就提到了,咱们用的是Java语言。啊,那当然像这个Python语言啊,乃至像JS语言,Go语言,哎,都是面向对象的,那第二个过程跟第一个过程这块呢,大家都一样,第三个过程呢,得看你到底是用什么语言来实现这个类啊,咱们是用的Java,那你就得关注Java怎么去来定义这些结构。啊,那定义好以后,我们真正去操作的话呢,都是用的对象。哎,那就需要通过类呢造一个对象,哎,然后接着做你想做的,哎,人把大象装冰箱这个事儿就可以了。哎,大家体会一下说的这个过程。嗯,后边的话呢,有两个举例子。
17:03
啊,举例子啊,嗯,说我要开车去丽江,这句话里边包含的类有哪些?我我代表的是一个人是吧?啊那你需要造一个就是人这样的一个类,然后呢,啊有车,哎车的话呢,就是你开的是一辆实实在在的一个车,实际上是个对象了,这个对象呢,是由一个抽象概念上的那个车的那个类所派生出来的啊啊还有吗?啊丽江啊,这个丽江呢,那就看具体的问题了啊你要说关于丽江这块呢,你你想描述的信息非常丰富,那你就封装成一个类,如果呢,你只是说调用了一下它,你就把它当成是一个普通的字符串也可以,诶就是诶我去丽江了是吧,我我去这个九寨沟了等等,啊行,就是车呢,跟我是明确的一个类,这个呢,看情况下边体会以下几个经典的案例。涉及到的类。
18:02
举个例子吧,比如说第三个。嗯,收货员统计收货小票的金额,这里边呢等有哪些类,收货员对小票金额还算不?哎这就不算,哎这个大家很厉害啊,这就是一个硬的型,或者一个大型的一个变量就可以了,对吧?嗯,售货员呢,是一个专门售货员这样的一个角色了,嗯,它具有这个卖票啊,收票啊,查票啊,诶这样的一些功能啊,诶然后小票这也是一个类,诶这个类里边呢,它记录着说你这个可能车牌号是多少啊,始发站终点站是哪到哪啊,金额是多少啊诶等等一些信息。诶,这呢是在小票当中记录的行,诶其他的就不看了啊,这个呢稍微复杂一点,这呢算是咱的一个旅行社的一个订票系统,那这个系统当中呢,我们都有哪些类。
19:05
这是一个大的一个项目了,其实啊,抽离出来了其中的核心的几个部分,旅行社算吧,哎对旅行社呢,算是一个类了,然后航班目录,哎这个也也算一个啊,机票哎,记录着你这个票是从哪儿到哪儿,多少钱,什么时间等等,包括这个订票这个人的一些信息啊,都在机票里有,还有记账文,记账文件,呃,这个记账文件呢,就记录了你很多的这个,这个也是一些他记录的这个从哪到哪,谁谁谁等等一些信息,需要呢,给他保存下来的啊呃,接着哎,旅客哎,旅客谁谁谁什么名字什么姓啊,他的一些基本信息,哎都存储在这样的一个类当中啊,记账这是一个完成的操作了啊,准备机票这也是一个操作啊,一个过程哎就行了啊。
20:04
行,哎,就是这样的一些结构啊,哎,基本上大家也能够理出来,就是看到这个名词的时候呢,你需要关注一下它是不是应该设置,设置成一个类,然后像这种冻死呢,是不是就是我们相应的这些类应该具备的一些功能啊,哎,对的啊,就像我们说人把大象诶装进冰箱,你这个装的这个过程啊,抬的这个过程啊,打开的过程啊,这些都是一些操作,这些操作呢,我们都是用这个类当中的方法来进行刻画。哎,是这样的,行,这是我们说的这个事儿。
我来说两句