00:01
同学们,我们来看一下类与类之间的六种关系,分别是以赖泛化实现关联、聚合和组合,那么我们还是用代码的形式来给大家讲解。首先我们先来看它的第一种关系,叫。依赖关系,Dependence。那么什么叫做依赖关系呢?其实非常简单,就是一句话。如果在内中用到了对方。比如说A类。他用到了B类。那么我们就称之为A,依赖于B。也就他们之间存在依赖关系了,如果没有这个B类,你A类编译也通过不了,举个例子,大家看这里面有一个类叫person service b,他用到了person DAO是以。成员变量的形式使用的这个地方接收一个person,就说我是在方法参数这块呢,我要接收一个person实例。
01:01
还有ID card,大家发现没有ID card呢,这个地方它是。一个返回类型用到了ID card,还有这用到了department。这个department呢?它是以局部变量的方式用到了department这个类,只是这里它违反了我们前面讲过的迪米特法则。但是他仍然是有关联的啊,虽然他违反了这个规则,但是他仍然是相当于说我们这个person service病还是依赖department,这种依赖关系还是存在的,只是他用的不对而已。那么我们针对这段代码呢?我们来把这个类图待会画一下。好的,打开我们eclipse在U。要不要这个包下面呢,我们新建一个包。第一。Pen。但是对吧,Dependence。好的,那我这块把这几个类给大家见一下。
02:01
第一个是person person do。我们来看一下它们之间对应的类图哈。源码有了,我们看它那图应该怎么画?这一个person do。我们再来看第二一个ID card也是一个类,没问题吧?把它放进去。ID card。好的,我们接着再来看person,也是一个类person类。OK,然后呢,他还有用到什么呀,还用到department。也是一个类。没问题,把它放进去。那这些这些类被谁使用到了呢?就是被我们person service b用到了。或者说person service病依赖这四个类。我们把它放过来,怎么以来的呢?把代码拿过去。同学们,这些代码因为比较简单,所以说我就直接拿过来就可以了哈,就没写了。
03:04
那这里面呢,因为这块为什么报错啊,是因为你这没有返回对不对,我们return一个吧,从语法层面让它编译过去。好,同学们这就写完了,那写完以后源码有了,那对应这个源码,我们用类图来描述这五个类的关系,应该怎么描述呢?朋友们来给大家画下。我们新建一个类图。新建一个类图。来吧,首先呢,呃,这次我们就自己来写哈,我们就不拖拽了。嗯,大家看到这有个I ID card。ID card这个类。放这儿。好,我们再来看第二个类,第二个类是person,也是一个,也是一个类,Person类。第三个类,第三个类是我们的person DA。是不是也是一个类,然后呢,还有一个就是department也是一个类。
04:04
Department。那么这四个类之间,他们没有没有什么关系,但是他们都被谁使用到了呢?OK,他们都被我们的这一个person。Service。Service病这个类使用到了。那它是怎么使用的,我们来看一下。先保存一下。它是怎么使用的呢?第一个。有在这个层面是属性使用到的,对吧,我们把它放过来。它加一个属性。对,加个属性呢。呃,前面是类型啊,前面是变量,后面是类型,我们把这个顺序颠倒一下。颠倒一下没问题吧?好,把我们放这儿可以了。然后呢,他还在我们这个地方用到了。方法是不是save,这个方法我们也写过了。
05:02
放过来。把关系给他描述清楚。好,那这边返回值是一个VO。对吧,这边呢,先把变量的名称写在前面,把类型写在后边好了。这是这个方法,我们再看还有什么方法呢?Get,注意get这个地方返回的是ID card,所以说我们在这写的时候呢,要这样去写。那。放一个操作进去,放一个操作进去。好,把这个integer往后面移动。把这个integer呢放到最后面来。In。In。T。Get。呃,返回的类型。返回的,诶这个地方我粘一下啊。从这重新粘一下。粘一下,然后我们这修改一下就行了。
06:03
好,把这个往这边拿。就是按照我们这给出的源码给他做一个相应改变,那这边返回在一起是ID什么呀?Card。ID card就是这个类是吧,诶这就可以了。它还有一个什么方法呢,大家看到在这个modify里面呢,它以。局部变量的形式用到department。好,我们也把这个方法写进去。好,这边返回一个void。是吧,返回一个贸易的好同学们就写完,写完我们怎么描述。Personal service和这四个类的关系呢?好,非常简单,因为我依赖它,所以说我用这根线这样描述就可以了。我用到它了。当然有同学可能会说了,说老师,那你这一个person do。不是相当于是他的一个成员属性吗?我们能不能把这根线换成这根线呢?换成这样子行不行。
07:06
就是换成这种聚合的线呢也可以。也可以,就是这种关系,这样话也是OK的,只是我用的这种依赖dependence呢,更加能够普,就是能够用用一种用一种比较普遍的方式来描述他们的关联关系,因此这块呢,我们先还是用刚才老师讲的这种方式来描述,好吧,只是后面我们还有一个案例。再给大家讲这个聚合是在什么情况下。去画更合理,所以这个东这个地方person DAO和person service病呢,的确也也算是聚合的一种关系。只是我这呢,用这个依赖。以赖的方式来描述也是OK的,好,也是OK的。好,这个图我们就画完了,画完了好,我们这小结一下。
08:00
小结,依赖在什么时候可以呢?依赖总结的一句话就是说,在类中用到了对方,我们就称之为依赖关系成立。在当中用到了对方,我们就称之为依赖关系成立。第二个什么呢?就是如果。如果是。是累的。类的成员。成员属性是可以的,如果是方法的返回,返回类型也是可以的啊,可以是什么呢?是什么呢?A是方法。方法接收的参数类型也是可以的,还可以是什么呢?是在方法中用到了,在类的方法中,方法中使用到。使用到了。这个呢,这几种,这四种情况都可以构成依赖关系。好,以来我们就说完了,我们接着来看下面两种。
09:02
下面一个叫泛化的关系,首先给大家讲,泛化关系其实就是继承关系。那么它是依赖关系的一种特例。就说前面那个是依赖,而泛化呢,是依赖关系的一种特例,就是说依赖只要我用到你,我就可以说我依赖你,但是泛化关系呢,它是一种什么呢?是一种依赖关系的特例。啊,什么特例呢,就是我继承了你OK,那么我们来看还是以这个来说啊,我们再举一段代码来说明这个事儿。同样,我在这儿新建一个包包。新建一个包来走一个。然后呢,我这里面也有几一段代码,我们来验证一下,首先这有一个DAO support。它是一个抽象类。它的一个抽象类,我们来建起来啊。
10:04
D DA support。那这个类呢,根据我这边的设计,它是一个抽象类。它是一个抽象类,写完了。对吧,两个方法C方法,还有一个定义方法,我这里面呢,诶也把它写了一下。啊,你把它写一下,其实这个地方我们也可以写成抽象方法都可以,然后这又一个person service b。OK,那同学们看我是怎么写的?我让这个类。Service病呢,去继承。大家看,我去继承DA support。那这样他们就构成。这个继承关系如果构成继承关系,它们之间的类图应该怎么画呢?来,同学们画一个。好的,那大家看。因为你这个do。是它的父类,Person service4大子类,所以说我们画图的时候就可以这样画。
11:05
来,先画一个class。这个class就是DAO。对不对。好,然后这边呢,有一个service病好切过来。对。OK。那这个DAO里面是不是有两个方法呀,一个是C方法,一个是定义的方法,我们也可以把它从这描述一下,加两个数,一个是。一个是save方法。我就简写了,同学们还有个是顶立的方法。对不对,定立的方法或简写,然后这两个类之间是什么关系呢?也是依赖,只是它是依赖的一种特性,叫什么呢?叫泛化,即继承,用哪根线呢?用这根线这样画。啊,这个就叫person service,并继承了DA support,好,说完了。
12:01
我们再来看D,那么这小结一下,小结一下什么叫做泛化关系呢?就这写的泛化关系就是继承关系,一句话就讲清楚了,对不对,一句话就讲清了,就说就说什么呢?我们可以这样总结句话,如果A类。如果A类,它继承了B类。壁垒,我们就说我们就。就说什么呢,就说这个。哎,就说A和BA和BA存在存在什么呢?泛化的关系。哎,泛化的关系。没问题。那下面我们接着再来看下一个题。那下一个呢,我们叫做实现关系,叫implement implementation这个叫实现关系,实现关系呢,其实也很简单,就是这样子的,如果我这有个接口。接口,那么这个接口呢,被一个类给实现了,我们就说person service实现了a person service,并实现了person service这个接口,它们之间呢,就存在实现的关系。
13:15
对实现关系也是依赖关系的一种特例。所以说依赖关系它是一个很大的范畴,就好像我可以这样说,我说。我说什么呢?我说我们人和人之间都存在关系,没有问题吧?同学们肯定是对的,你不管怎么说,人和人之间肯定都存在关系的,但是你是不存在父子关系,你是不是存在父母母女关系,这就是一种特例了。明白我的意思吧,就是说,呃,他们都可以称之为依赖关系,只是。只是我们这个时间关系呢,是依赖关系的一种特例,就是它的这个依赖,依赖性更强,就这样子的理解就可以好了,那现在呢,我们同样把这个代码翻译成我们的类图。
14:00
把这个代码呢,翻译成我们的类图,我们来看看应该。怎么整啊怎么整。同样。我们新建一个包。我们新建一个包。来新建一个包走底。叫implementation implementation把它。建起来。加起来过后呢,我们知道这里面有两个类对不对,一个呃,一个是接口。一个是接口,我们把它写出来,接口创建的时候是interface,没问题。那这个接口里边呢,我们。根据这边提示有一个顶立的方法。是吧,有个顶立的方法,我就写到这了。诶,第六方把这个地方改一下。对的方法。保存。呃。这个地方in in。好,这就没问题了,然后呢,同学们,我写一个类。
15:03
来实现这个接口。这个类刚才同学们也看到了,就是person service什么呀,病。是吧,Person service病他去实现这个接口,怎么实现employment。把person service实现。那这个时候呢,里面要实现这个方法,其实就顶力的方法。我写一个。对吧,定力方法是一个叫定力。好,写完,那现在我们来看这两个类之间的关系,是一个什么关系呢?把它写到这儿来。一个类图有两种方式来看出他们的关系,你看,如果我快一点,直接把它一拖拽,你们发现他其实已经把这个关系描述出来了。对吧,就说这有一个service person service,那么。呃,这是个接口I嘛,表示接口这边是个内,实际上它也就这根线。
16:04
是哪哪哪条线呢,就这条线,我把它先删掉,就是用这条线来画的,怎么画你不要这样画啊,这样画你看就不对了,应该这样画是由他。指向接口,这表明我们这个service并实现了service这个接口。好,这是我们关于接口的这个题的一个讲解。好,那关于依赖,关于依赖的这么前三种就是依赖关系。即呃,泛化关系和时间关系,先给大家讲到这儿。
我来说两句