00:00
好了同学们,接下来我们接着看一看我们这上午的这个,呃,这个程序啊,我们上午是讲到哪呢?是讲到这个,嗯,咱们的接口在开发中的一个作用啊,这个作用呢,我只是想跟想给大家演示一个结耦合,就是耦合度低啊,就是面向接口编程,它耦合度比较低一些啊,比较低一些,那我们再来捋一下这个程序啊。呃,这个是一个接口,各位最左边的这个文件啊,是一个接口,然后呢,在这个位置上呢,我们写了一个什么呀,顾客,那顾客这块呢,哎,有一个什么呢?诶有一个这个菜单啊,有个菜单。大家呢,不要把接口特例化啊,接口也是类,你就这么理解啊,就是说我希望各位啊,就是因为今天上午有同学反映,就是老师我的接口这个东西反正还是有点别扭,呃,是这样的,大家接受一个新的事物的时候,都会觉得有点别扭啊,你把它当做什么,我觉得这样就可以了,你不用说觉得别扭,好吧,你把它当做一个类呗,一样。一样的啊,它也是一个引用类型,它也是引用数据类型啊,那么我们接下来呢,来看一看啊,就是顾客这块呢,有一个菜单,大家呢,可能这块你想不到。
01:11
啊,想不到,然后接下来我们这边呢,有一个中餐的一个厨师,然后呢,还有一个什么呀,叫西餐的厨师,是不是,那么现在大家思考一个问题,我为什么不在这儿写中餐厨师。或者说是西餐厨师,你假如说我在这个位置,我写的是一个西餐厨师啊,中餐啊,中餐厨师啊,我写上中餐厨师啊,比如说叫做China,嗯,Cooker叫CC。行吧,那么大家想,如果我这样写的话,是不是就相当于我这个顾客只能吃中餐啊?耦合度上去了吧。是只能吃中餐呀,这不就写死了吗?是不是啊,就写死了,或者说如果说我在这个位置上呢,我写什么呢?我写上这个西餐厨师,那西餐厨师是America cooker,那么这个时候呢,我写上AC,大家想一想,那如果你这样做,是不是就代表你只能吃中餐,如果你代表你,你要是在这个顾客里边写一个什么呀,和厨师直接产生关系,你看。
02:21
对吧,这样的话。他就只能吃西餐了,就写死了,对,就是如果啊,如果以下啊。以下这样写啊,如果以下这样写就表示什么呀啊,就表示写死了啊,写死了的意思就是焊接住了,焊接住了,焊接了。啊,没有可插拔了啊,没有可插拔了。明白吗?哎,没有可插拔了,那么我们的food menu这块呢,这是一个更抽象的一个副类型。因为我们的China cooker和cooker都已经实现了我们的food menu。
03:05
而这个就是一个接口,就说我们最好在这里是面向抽象编程。啊,你最好是这样写,你如果采用下面这种方式,那就表示你顾客只能吃什么呀,中餐。如果是这样写啊,你就只能吃西餐,扩展力就差了,为了增强扩展力,我们在这块呢,写了一个抽象的对吧,我们还是那块叫面向什么呀,哎,抽象编程对不对,哎,面向接口编程。那提高什么呀,就是降低程序的什么耦合度,提高什么呀?哎程序的什么,哎扩展力。啊,染力就是这样啊,那么我在此呢再声明一下,如果大家要是听不太明白这块的东西,你就先不要学了,因为这是偏思想方面的东西啊,那个没事儿,因为后期的时候,你慢慢这个思想就有了,因为我记得我当时在学这个时候啊,最初接触这个接口的时候,我也是觉得有点别扭,那我为什么要写个接口?
04:05
对吧,我为什么不写这个写那个。对吧,就是有的时候确实我理解大家啊,所以呢,你你放一放,你像我一样对吧,哎,我一放哎放个一两年,慢慢写项目,慢慢写东西没哦真是啊,这接口这个东西写上还是好是吧,写上这个China cooker和America,可能按这个扩展力还是不行啊,所以呢。在这里呢,大家看怎么学啊,怎么学,就说我这个笔记在哪儿呢,我看看啊,笔记我好像关了是吧,我再把这个笔记打开啊。来打开打开。笔记在什么地方?在这?来这个笔记这块啊,其实你要记得诶。什么情况?跑哪了啊,在这呢,在这个文件里边啊,Food menu在这个菜单里边,这有一个,那么你只要记得是这个接口,它基础语法就行了,至于接口在开发中的作用啊,其实你看我这写了很多,是不是我这写了很多啊?
05:13
就在这里啊,就最后啊,就总结一句话。就完事了啊。总结一句话。啊。就是说面向什么呀,接口编程可以降低程序的什么耦合度。提高程序的什么扩展力,对吧,符合OCP原则,这个开发原则。啊,符合OCP的开发原则,对吧,你只要是是说能把这句话记住。那我觉得就行了就行了,至于说这个他的思想方面的理解,我觉得可能有点难啊,有点难。那行,那这块呢,我再提一下,大家有没有发现啊,我点一下啊,大家有没有发现一个问题,就是我们接口这块离不开多肽。
06:08
就接口为什么离不开?为什么离不开多肽呢?啊,你可以思考一下啊,你看我们在使用接口的时候,是不是将来必然会在这个地方是出现什么呀,多肽就是你将来在等号的后边new的要么是一个什么呀,China cooker是不是,你要么new的是一个American cooker,总之呢,你这个对象得创建出来,因为大家都知道接口是抽象的,没法创建对象,还记不记得。对吧,所以说接口这个东西呢,它一定是跟多肽关联在一起的啊,我不知道大家有没有这种感觉啊,有没有这种感觉,因为接口是没法扭对象的,只能拗子类,那你要拗子类对象的话,那肯定是负类型引用指向了一个子类,子类对象是不是,哎子类对象啊,行,那么这块的话,嗯,咱们呢。
07:00
嗯,这句话我也想写一下,写到哪儿呢?我看看啊,嗯,其实我也可以给大家写到这个笔记里边啊,写这得了。呃,写到哪呢?写到这儿吧。呃,接口的使用啊,离不开什么呢?多肽机制啊,离不开多态机制。啊,这俩其实你看在一块儿的。对不对,哎,就是接口加上这个多肽。啊,才可以达到什么,达到这个呃,降低耦合度啊,这个效果啊,这个效果或者叫哎,才可以达到什么呀,结耦盒啊结耦盒行了,那咱们就接着把这个代码写一写吧,你看这是一个抽象的菜单是不是,那这个呢,就是我们的顾客呗,对吧,顾客手里有个菜单,而我这里说了啊,有个has a,各位啊has a的话,一般都可以往你这个类里边写这个属性。啊,如果是is a的话,一般就是继承了。啊,一般就是继承了各位啊,继承那行写这个啊,别写这个,也别写这个,如果你写这个或者是这个,那咱们就等于什么呀,哎,写死了,写上面这个可能更通用一些,更通用一些啊,那么属性私有化呗。
08:12
对吧,这个是肯定的吧,封装吧,你别忘了啊,别忘了封装啊,以后写代码都要封装的啊,都要养成什么呀,封装的好习惯,那么这块呢,咱们呢,直接呢,就加上什么呀,它的一个构造方法。是不是,然后呢,再加上什么呀,它的一个s and什么呀,哎,Get方法。那构造方法这块儿呢,你可以提供一个无餐的构造是不是,当你提供无餐构造的话,诶构建这个顾客的时候,这个顾客这块怎么着啊?哎,它是空的菜单啊,菜单这块是空的,那你也可以提供一个有参数的构造方法,可以提供一下customer是不是?哎,传一个什么过来呀?哎,传一个foot menu过来,你看见没有,你看把这个拿过来放在这是不是?哎,然后this.this是当前对象呗,当前对象的菜单呢?哎,等于这个局部变量菜单呗,对吧?哎,Food menu拿过来附上去就行了,你别多想啊,和基本数据类型是一样的,你比如说应对性age是不是,你怎么写的呀?哎,在这加什么呀?哎,什么setage啊,Getage啊,加构导方法等等啊,行了,那这块的话是一个无参数的构导方法,再来一个有参数的构导方法,那set和get方法这块来呗,就写呗,对吧,啊set什么呀。
09:26
你看这个单词叫foot menu,你拿过来把F变成大写是不是?哎,那参数什么类型啊,那就是foot menu喽,是不是?你把foot menu拿过来放到这儿,接下来在这里呢,我们就可以加上什么this点哎,Foot menu foot menu啊,来就是它,嗯,就是它来。好了,那这个set方法有了之后,它有get方法是不是,哎get方法啊,返回一个什么呀,哎叫food menu,然后叫get什么呀?哎,Food menu,然后接下来我们在这return谁就行了,哎return谁就行,Return这个啊叫这个这个这个food menu就可以了啊有同学老师我们为什么要写构造方法,老师我们为什么要写在get的方法没有,为什么。
10:06
王八的屁股规定。各位啊,就是你一旦属性私有化,你就一定要对外提供set方法和get方法,因为大家知道私有的东西只能在本类中访问,你明白吗?你如果说你这个属性想在外边访问的话,那你就得加set方法和get方法,你属性私有化,对外提供set get,你以后访问都养成一个好习惯,什么习惯就是说。想改就掉赛的对吧,你想去读这个数据,那你就掉盖的方法,以后你别老是在这点点点的,点点点的对吧,你点来点去的,记住了以后都是封装的,以后的属性都是私有法,你应该养成一个习惯,而不是说去掌握这个知识点,养成一个什么习惯呀,养成写在的方法,掉在的方法,养成写盖的方法,调盖的方法,你想读一读这个东西,你就掉盖它,你想改一改它你就掉它,你就养成这个好习惯就完事了啊,这是一种编程素养变成习惯啊,有的时候所以说前面东西学着学着到后边就变成习惯了。
11:02
你看我前面讲封装的时候讲了很长很长时间,对不对,哎,但最后呢,哎,发现这个代码啊,在idea里边直接一键就能生成,对吧,这是一种编程习惯,你把它变,哎变成一个编习惯就可以了啊就行就可以了,那行了,那我这样的话,我提供了无餐的,提供了有参数的方法,哎,我的顾客啊就可以构建出来了,是不是好,那我们再看这是个中餐是不是,然后这是西餐是不是好,那么接下来我们是不是还缺一个测试程序啊来我们就写个测试程序。来我们看一下啊。Public class我们叫test,然后接下来我们写上public static VO主方法加上去,然后呢,接下来我们在这个主方法当中干什么呢?首先第一个我们得先创建厨师对象吧。对吧,哎,然后再去创建什么呀,顾客对象吧,是不是,然后顾客怎么着点菜吧是不是,哦对了,同学们,咱们还有一个事儿。
12:02
顾客现在呀。他好像还没有点菜呀。对吧,我们是不是应该在顾客customer里边,除了给这个属性之外,我们是不是可以在这里提供一个点菜的方法。比如说我们就叫做order。行吗,点菜。是不是哎点菜,那么点菜这块的话怎么点呀。点菜你得先先干什么呀?先拿到什么菜单才能点菜吧?是不是怎么拿菜单呀?哎,This有吧,因为这是个不带static吧,对不对,所以说这个方法是一个实例方法,这里面有没this啊,那你要获取菜单,我问了你想拿这个菜单,你以后都要记,记得调盖的方法是不是就可以拿到菜单,你调S的方法是不是就可以给菜单赋值啊,所以这块你调get方法就可以拿到菜单,你看this.get复那这样的话它就可以拿到这个菜单。
13:07
你拿到这个菜单之后,大家想一想这个菜单是什么类型。对吧,它get方法调完是它呀,它是它呀,它是它呀,是不是它就是foot menu啊对不对,哎,Food menu啊。这就是菜单。对不对,那如果说你不愿意调这个钙的方法也行。你不愿意调的话,大家想这个私有的东西在本类里边能不能访问。你不愿意调钙的方法?你能不能直接访问可以吧,因为我们虽然是私有了,但是他没出类啊,这个定定菜的这个方法是不是还是在我们的顾客这个类当中,所以我们这个菜单可以直接拿来用啊。对吧,你不愿意这么写,你也可以对吧,哎,像这个就是调用什么呀,Get方法拿什么菜单。菜单是不是,那也可以这样,也可以不调用什么呀,哎,钙的方法因为什么呀,因为在本类中,在本类中私有的属性是可以访问的,那你直接写它呗,它这个变量就是谁就是它喽。
14:14
对吧,就是它你拿过来直接用呗,它前面其实是有个this点,而我曾经说过,这个this点是可以省略不写的嘛。对不对,哎,可以不写,可以不写啊,那你就直接附me点什么呀啊,你看那个菜单里边有啥,它就点上点什么呗,你看看它里边有啥有。柿子炒鸡蛋那行了,那他就点了呗,对吧,那点一个点一个那就点呗,它调接口的方法。对不对,哎,那么接下来他又去点这个菜单里边的菜点什么呀?诶还有个鱼香肉丝吧,是不是,哎叫鱼香肉丝,他就掉接口里边方法就行了啊鱼香肉丝。是不是,哎,柿子炒鸡蛋,鱼香肉丝,这都是food menu调这个方法就完事了,那么接下来呢,我们这个程序啊,你现在写不出来这个程序,各位啊,我先强调一下,这是具有很高层次的一个抽象,很高层次的一个思想层面,你才能写出来这个程序,我现在主要也不是说让大家看懂这个程序,我主要想跟你讲的是我们这个程序的扩展性很强,知道这个作用就行了,后期慢慢去培养啊,创建厨师对象怎么创建呀,那就这样创建呗,对吧,叫什么呀?叫做food menu FM或者是cooker。
15:28
对吧,哎,你一个什么呀,叫做China cooker。诶扭出来是吧,来,那么接下来我们创建我们顾客对象怎么创建来customer对吧?哎,Customer。哎,New一个什么呀?哎,Customer,那么大家都知道new这个customer就表示创建一个顾客对象,你调的是构造方法,那么我们回头看一看,这个构造方法我们是提供了两个,一个无参,一个有参,这个有参数的构造方法可以传一个菜单过来。
16:02
对吧,你看是啊,是不是可以往这传呀,那正好我这里就可以把一传过来。大家想一想,是不是这样的?就是我们new customer这个对象顾客的时候,我们可以把上面这个cooker传进来。创建一个厨师,对Java中有一个名言,对吧,想要什么你就拗什么,想要什么你就拗什么,拗完之后呢,哎,你把它传进去啊。对吧,然后接下来你就可以进行点菜了,你用一个厨师,有了你有顾客,有了你顾客就可以点菜呀,是不是,哎点什么呀,Order对吧,这个方法叫order啊,你看来回头看一下这个位置是不是有一个order方法是我们刚刚刚写的,这就是点菜呀。是不是啊,点菜了啊点菜那么大家看。这个地方扭一下,然后把它传进去,你不要多想,就跟那个int I等于十,你把I传进去是一个道理。
17:04
啊,你I只不过是基本数据类型,你这个cooker传进去对吧,哎,这多肽呀。是不是,哎多肽啊,类型引用指向一个什么此类型对象对吧?哎,那么接下来我们去编译,然后去运行啊new customer的时候,为什么可以把ER一传进去,那原因是你掉了这样的构造方法,这个构造方法是有的,你打开你看是不是有一个构造方法,这个构造方法支持不支持上面传一个菜单。支持啊,对吧,那你这块大家看看是不是传的就是个菜单啊。是吧,哎,菜单一吗,传进来了呀。传进去的目的是啥?大家可能想来想去想不明白,传进去的目的就是它附上它,他付给他的目的是什么?就是为了防止它是空,大家思考一下啊,如果说你这个变量是空的话,我问大家一个问题,将来我们在执行定菜点菜的这个方法的时候,空的引用去调方法会出现空指针异常,大家还记得吗?我们为了防止这个位置出现空指针异常,所以我们必须得给这个变量赋值,我们给这个变量赋值,我们是怎么赋的值,我们在这里是不是有一个构造方法,在new这个对象的时候,可以给他传一个参数,参数传过来附上去,这样的话它就不是空了,它不是一个空的,那么将来调这个方法它就可以去运行,如果你是空的,你去调这个方法就必然出现什么呀,空指针异常嘛。
18:34
对不对,哎,对不对,所以说你看啊,你如果把这个去掉,会不会出现控制异常,我们来看啊Java c形成Java编,然后呢,Java去运行test走回车,好大家看空指针异常在在customer.java这个文件38行。他STEM是谁呢?来就是他,他说在这个文件的第38行,在这个位置出现了空指针,那为什么出现空指针异常,因为它是空,它为什么是空,因为你调的是无参数构造方法,当你调无参构造方法的话,这个变量啊,它就是空的,那你没有办法给它附上值,所以在这里我们就是空值一常,如果在这块儿我们把顾客创建出来,给他传一个厨师过来,那么接下来我们这个厨师就会通过构造方法,哎,给我们的这个属性怎么着啊?哎,附上值,这样的话,这个属性就不是空了,就不是了,就指向一个对象了,我们去调用柿子炒鸡蛋和鱼香肉丝的时候,这样的话,这个厨师啊就会去帮我们做做这个东西,所以大家看我们Java c呢,去编译一下,我们Java去运行一下啊,去运行一下,好,大家看中餐师傅做的西红柿炒鸡蛋是吧,中餐师傅做的鱼香肉丝,这个很经典,那我们来。
19:54
大家,现在你想换厨师,程序需不需要改?除了这个测试程序啊,除了这个测试程序之外,我问大家问题,你别的程序需不需要动。
20:05
你思考一下这个问题。就你你这个顾客要不要改一下,这个地方要不要改。不需要改对吧,为什么不需要改,因为我这个是个接口。我是个接口,Food menu是个接口。听懂了吗?我这个接口这不是具体的,这不是你具体的中餐,也不是西餐,你要写死这个,对不起,那就可能只能点什么呀,中餐,如果你要是。写的这个你只能点西餐,就现在我想点中餐就点中餐,我想点西餐就点就点西餐,那如果说。这样的话,我们这边就应该写一个接口,写一个抽象的东西,而不是具体。啊,而不是具体各位啊,不是具体,所以呢这块呢,大家看一看啊,如果我想变成。西餐,我是不是只需要把这个改成什么?
21:02
啊。Me cooker,别的位置都不用动,你传过来这个厨师如果是一个西餐厨师,那行了,你看Java c去编译,Java去运行,程序就变了。大家看西餐师傅做的什么呀?西红柿炒鸡蛋,西餐师傅做的鱼香肉丝。对不对,所以说这个这个程序呢,就很经典,设计的很经典啊,很经典,等你等你以后做了项目之后,你回头再看杜老师写的这个代码的时候,你会感觉豁然开朗,可是现在呢,你可能还是没有办法啊去搞定这件事情,那么我觉得你可以设想一下,假如说您根本就没有写他,你写的是这个的话,那我问你,你这个变量上接收的是什么,是不是只能接收中餐厨师?你将来这个构造方法是不是也只能一个中餐厨师,你传一个西餐厨师过来不行报错,为什么?因为类型不兼容。那如果说你写一个food menu的话,我将来调这个构造方法的时候,我既可以把中餐师傅作为参数传进去,我也可以把西餐师傅作为参数传进去,因为我的中餐师傅和西餐师傅都是一个food menu,为什么你看到这里的代码,我的类是不是继承了food menu,我的西餐厨师是不是也继承了food menu?我的American cooker和我的China cooker是不是都已经是一个food menu了?
22:23
所以我们这样做,偶和都就降下去了,在我们将来改程序的时候,我们发现以及之前程序的之前程序的任何位置我们都不需要改动,我们只需要改改这个位置就行。改什么呀,测试程序好,大家思考一下,现在是不是有点像这个电脑的这个内存条坏了,各位你怎么办呀?你是不是应该把这个内存条给它拔下来,拔下来你得买个新的吧,买个新的你说你为什么可以插上去,你们想没想过这个问题?想没想过这个问题?各位你好好想一想,为什么?我们把厨师开除了,换了个西餐厨师八传进去,一切都发生了改变,这是为什么?
23:06
你好好想想,内存条拔下来,再换一个京东上买的新的内存条,再插上去,你思考一个问题。你思考一个问题,各位啊,那为什么可以更换,原因是内存条跟那个主板之间有一个插槽,那个插槽是不是一个一个一个一个接口啊。对吧,接口一样,京东上买的那个内存条,跟你电脑上的那个内存条的接口一样,所以你能插上去。明白吧,哎,所以能插上去好了,那么这就是接口的一个作用,各位啊,我们来讲到这种程度,大家呢,对这个有没有一定的印象啊,有没有一定的印象,那么接口这个东西还是非常非常重要,它呢其实就是面向接口编程,面向抽象编程,降低耦合度,提高我们程序的扩展力啊,提高程序的扩展力,符合OCP的开发原则啊,接口的使用是离不开多肽的啊,离不开多肽的,好,我们到处其实都是用的多肽,那现在呢,我们继续往下分析吧,各位大家分析一下我们现在定义的这个接口,诶跑哪了,跑这了啊来定义的这个接口,谁是这个接口的实现者,谁是这个接口的调用者,谁去调这个接口里边方法。
24:14
你们有没有注意到?就是一个接口是不是永远都有调用方跟实现方,你们通过我这个程序有没有感觉到,就是你看我的顾客,我在这里调这个方法,调柿子炒鸡蛋和调这个鱼香肉丝的时候,对于我顾客来说,我是不只知道这个菜单上有这个柿子炒鸡蛋和菜单上有这个鱼香肉丝,对吧?至于后台那个厨师张三还是李四还是王五做菜,他根本就不知道吧。是不是啊?好,大家看这个是不是customer,就是我们菜单的调用者,就是这个接口的一个调用者,对吧?好,那我问你这个接口是不是都有实现方。对吧,所以说解偶合解的是谁跟谁的耦合,你们能理解吗?来,同学给我最后一句话,接口可以解耦合,解开的是谁的耦合?
25:05
是谁和谁的偶合?任何一个接口。都有什么?调用者和实现者。接口。可以将调用者和实现者。接耦合。调用者面向接口调用,实现者面向接口编写实现,你好好想想是不是这样的。好。你看。对于厨师来说,厨师不管顾客是是那个,是皇帝,还是哪国的总统,是不是厨师,可不管这个厨师,他关心的是菜单。
26:01
明白吗,然后。大家看。我们的顾客关心的是你后厨是张三李四王五吗?不关心。是中餐还是餐,不关心顾客,只关心手里的这个菜单,这样的话两方就达到了耦合,呃,这个达到了解耦合,好,现在我问大家问题啊,假如说我现在。把厨师删掉,你觉得我剩下的程序能不能编译通过?来注意听啊,注意问,注意我是怎么问的啊,我把这个这个这个删掉,各位你告诉我。只剩下customer和food menu这两个能不能编译通过?思考一下。想一想。我的customer这个类里边是不是没有你这个America这个类,也没有China cooker这个类型的一个使用,对于我来说,我这个customer里面是不是只有一个food menu。
27:04
对不对啊。因为我customer是不是只关心这个呀。如果我把这三个全部删掉,光剩这两个能不能编译通过?可以各位啊,那这就是调用者是不是可以编译通过?好,那我再问大家一个问题,如果我把test和customer删掉,剩下这三个,光剩下这三个能不能编译通过?思考一下,给个回应各位啊,就是光剩下这三个能不能编译通过?是不是也可以编译通过呀,对吧,也可以变通,因为你的cooker和China cooker,它两个cooker关心的都是这个food menu。你明白吗?包括我们的customer,其实关心的也是me。所以这个接口就达到了分离,把谁呀,这个接口把它,还有它和它。对吧,分离开了,那么现在的我们说到实质上的一个问题,我问大家个问题啊,回答问题,好,各位告诉我。
28:03
我们在实际的开发中。有没有可能我们把这个customer这个类的编写交给一个项目组A去完成?听清楚啊,讲到关键了,各位讲到关键了啊,屏住呼吸啊,来,注意听啊。我们在实际的开发过程当中,我们可不可以让项目经理先把接口定好?思考一下,我们可不可以让项目经理把接口先定好,然后我们把这个是一个接口的调用者交给我们的项目组A去做这个,然后我们这个和这个能不能交给另外一个项目组去开发?因为我们的这个项目组写这个代码不需要关心他和他,我们写这个项目组的这个程序员也不需要关心customer,它两者实际上都是关心的foot me。那么这样说的话,我问大家是不是这两个项目组可以同时开工写代码?
29:00
思考一下。思考一下项目组,所有人都围绕这个接口去写代码。就说customer围绕接口,然后实践者也去围绕接口多人进行协同开发,请同学们告诉我项目组开发效率高不高?就关键了,到关键了,各位啊,项目组开发效率是不是就马上就提升上去了,提升上去,因为我们就相当于是说把这个项目切成一块一块的,你懂什么意思吧,就项目切成一块一块,那么一块和一块之间怎么将来怎么接上啊各位。啊,你搭过积木吗?积木搭玩过吗?小的时候玩没玩过积木?或者说或者说那个。就是拼图,拼图玩过吧。大家想是不是就相当于是说。对,都是通过接口接上去的。啊,都是通过接口接上去的,我们整个项目呢,可以切成一块一块一块一块,然后每一块和每一块之间啊,都都用都用接口进行衔接啊,都用接口进行衔接,就是说就以后的开发啊,以后进行大项目的开发啊,一般都是将项目都是将什么呀,将这个项目切割成什么呢?切呃分离,分离成。
30:23
一个模块一个模块的啊,模块和模块之间采用接口衔接啊,降低耦合度。啊,这里有活动。所以我问大家一个问题,知道谁最难吗?这个项目的开发谁最难?就是当时第一个人负责制定接口的这个人最难。你你懂什么意思吧,就整个项目组开发中最难的实际上是这个定接口的人。定接口的人是谁?架构师或者说是系统分析师,或者说是高级软件工程师,或者是我们的项目经理,总之他有丰富的开发经验,这个业务呢,他了解的很透彻,他可以把接口定出来,然后他交给程序员干什么?该写接口的实现写实现,该面向接口调用的面向接口调用,一拨人去写调用程序,一拨人去写什么呀?接口的实现程序,这样的话就可以代表分工协作,所以我问大家,你们出去之后第一项工作你们要干什么?是说去写这个接口,还是说去写接口的实现呀,你们主要干什么工作呀?
31:33
哎,你们呀,工资比较低,可能就1万块钱,或者是一万二一万三,你们这个级别的程序员,其实基本上哎就是干什么呀,哎去写这些实现去了啊接口这个东西你定不出来,为什么?因为你没有业务,没有没有没有没有接触过这个这个这个这个高层次的业务,对吧,你的抽象能力很差是不是,所以说咱们出去之后呢,不用着急,慢慢的以后啊,你就知道了,诶我们以后啊,诶就慢慢的就蜕变成什么呀,诶软件架构师。
32:03
啊,或者是系统分析师,或者是项目经理,他需要一个过程啊,需要一个过程行,那这里呢,写接口式脑力,那当然是啊当然是好了,那么这个呢,我就说到这儿,这是关于我们这个接口的一个啊作用啊下去之后呢啊好好去理解理解,那么这里呢,我们耗费了很长很长时间啊,一个是接口的基础语法,把这个哎测试一下啊,测试一下盘它啊盘它来这块呢,接口在开发中的作用,这块呢,你总结一句话,其实就三个字啊叫结耦合。解耦合啊,其实总结一句话就三个字,三个字啊,就是解耦合没了。完事了啊,接口的存在就是结合啊,理解一下这个思想好吧。
我来说两句