00:02
关联关系。Association,我们现在看类之间的一另外一种关系叫关联关系。何为关联关系?关联关系实际上是类与类之间的关系啊,这个联系。它其实是依赖关系的特例,也就是说关联关系仍然是依赖关系的一种特例,所以说我们可以看到,其实依赖关系它是一种很泛化的概念,对不对?那关联关系呢,它是有一种导航性的,什么叫导航性呢?就是说其它有双向关系或者是单向关系。关系还具有多重性,是一对一还是一对多,还是多对一还是多对多。我们内。类与类之间还存在这种关系。我这里举几个例子,同学们看。那。如果是单向一对一的关系,我举个案例,比如说你有一个类叫person,对不对?Person这个类,这个person这个类的类呢,里面有个ID card的身份证。
01:07
我们一个人。是不是只有一个身份证呢?一般来讲你只有一个身份证号码,不会说有一个人有两个身份证号。所以说。人和身份证是一对一的关系,因为反过来也是一样,我们一个身份证号对应一个人。对吧,对应一个人,那大家看,如果我的代码是这样写的。我的代码是这样写的,我在person这个类里面,我有一个成员变量叫ID card,那么这个就叫单向一对一,就说我的person里面呢有一个card,但是大家有没有发现我在ID card这个类里面,我并没有写person。所以这就是单向的,那如果说我在person这个类里面。我有写一个成员变量叫ID card的,同样我在ID卡的这个类里面,我又写了一个person这样的成员成员属性,那么这就是双向的了。
02:09
这就是双向的一对一的关系,好,那表示出来就是这边有个一,这边也有个一理解。好的,那这个关联关系这个类图呢,我这已经画了,我就不再画了,好吧,大家大致明白关联关系是什么就可以了,它是类与类之间的联系。它也是依赖关系的一种特例,大家记住有单向的,也有双向的,明白就OK。下面呢,我们再来看两个比较重要的。这个类与类之间的关系,一个叫聚合关系,叫aggregation。这个聚合关系它表明什么意思呢?它表示的是整体和部分的一种关系。而且呢,聚合关系表示整体和部分是可以分开的。那聚合关系是关联关系的一种特例。
03:03
因为刚才我讲过,关联关系往往是成员属性的这个层面的一种,呃,一种依赖。所以说呃,那么我们聚合关系呢,它是关联关系的特例,它也具有导航性。和这个多重性,我举个例子大家就明白了,也就是说这里面要所谓的导航性,就意味着就是说谁聚合谁的问题,比如说A和B。是把A聚合到我们A里面,把B聚合到A里面,还是把A聚合到B里面,这有一个导航的问题,还同样有一个多重性,就是我这个A里面聚合了多少个B这样的对象实例。如果我只聚合一个,那就是单聚合,如果我这个A里面我可以聚合多个B这样的对象实例,那就是多重聚合。那我举个例子,大家一看就明白了,比如说我这里有一台电脑叫computer。这个类。
04:03
那么这个类里边呢,我有两个成员变量,一个是Mo,就是鼠标,还有一个叫monitor,是显示器。显示器,那现在这个源码已经有了,我想请问大家。这段源码对应的这个类图应该怎么画呢?这个地方你先不要画,你先搞清楚。他认为,这。Computer,这里面包含了Mo和monitor是不是可以分开的关系?什么意思,就说他能否不要?如果说他们的关系是可以分开的,那么我们就是聚合的关系,如果他们的关系是不可以分开的,那就是组合的关系,听清楚没有?那这样子啊,我们假定。我们假定什么呢?我们假定。我们假定这个组成电脑的各个配件是可以从电脑上分离的。比如说。
05:03
鼠标,诶鼠标我可以插上,我也可以不插上嘛,可不可以,同学们这它是可以分离的嘛,可不可以分离我鼠标我我电脑没有鼠标,我还是一个电脑对不对。那同样道理,我们这个电脑上面的这个屏幕,就是它的显示器,能不能分开,和电脑分开呢?也是可以的,比如说有一种电脑,人家就是显示屏可以从电脑上剥离开的。直接拿开,比如说什么呢?台式机,那台式机它的显示器实际上是通过一个外接线把它接上的嘛,我没有,我没有这个显示器,其实我仍然是台电脑,我仍然可以做计算的,只是你不方便观察而已,所以说我们这个分析,我们发现貌似和monitor它是可以分开的,它既然可以和我们这个整体分开,那么我们认为鼠标这个类和显示器这个类和computer之间是什么关系呢?它们就构成聚合的关系,明白了吧,那我画一个图。
06:04
给大家聊一聊这个话题,我把这段代码的对应的类图给大家画一下来,朋友们看老师的演示。那现在呢,我建一个包。聚合这个包。对,聚合这个包。Aggregation。嗯,那现在呢,我们就按照这个来画一画吧,首先呢。我先写一个类,叫Mo鼠标类。没有问题吧,同学们。好,我再写一个类,这个类叫显示器,Monitor monitor monitor。Monitor,对,这是我们的显示屏,那还有一个电脑,来,同学们写到这里来。电脑computer。Computer。问题啊,没问题,那在这里呢,我们按照这个源码里面,它有两个set方法,那我就写了private。
07:03
写了啊,Private什么呢。MOUSE。貌似我们还有一个成员属性是什么呢?Monitor。Monitor。Monitor OK,好,我们把它的晒的方法,Get的方法给它生成一把,对不对?OK。我们生成一下它的这个方法。我们是用什么方法呢?哦,这样子。我们来一个二。对吧。那现在呢,我们只给他晒的方法。只给他一个set方法,各给一个set方法,我们现在分析出来是什么呢?就是可以分离,就是鼠标类啊,鼠标可以和computer分离。我们认为是可以分离的。同样我们认为显示器显示器。
08:02
可以和什么呢?Computer大写。Computer分离那。针对这样子的话,我们对应的这个类图就应该这样画了,来,朋友们。画一个类图。注意听。来一个,那怎么画呢?好,首先我画一个类,这个就是我们的computer。没问题哈,呃,Computer里面呢,我我这先把这两个画出来,一个是Mo。对,一个是什么呢?一个是monitor。Monitor,好,那这边有两个属性,我也可以把它写上,第一个属性就是我们的Mo。它的类型就是m mouse。同样它还有一个属性,对不对,还有一个什么属性呢,就是master。就是monitor类型,Monitor。
09:01
Monitor。好,刚才我们分析过了,就是这两者,鼠标和显示器是可以跟computer分离的,那么这个线就应该用聚合的关系来描述,谁聚合到谁去呢?是鼠标聚合到computer,应该这个这个这个空心菱形就指向我们这个整体部分,明白同样这边也这样画。可以了,好,这就是我们这一段代码对应的类图说完了。大家能否理解?啊,也就是说它对应的类图呢,就应该变成这个样子。对,就是这样的一个图。美地吧,同学们。好,我把它放在我们。这块。那紧接着我们再来看还有一种关系叫组合关系,怎么理解呢?就说如果我们认为鼠标和master和computer是不可分离的,则升级为组合关系。我举个例子。
10:00
你比如说同学们看。我们这个代码呢,变成这样子了。Mo。Monitor。对,Monitor。那么这个monitor,它这个一生成直接就是个六一个Mo,六一个monitor,那大家想这个时候只要computer这个对象创建起来了,那么Mo和这个Mo monitor这个对象也就创建起来了,是不是因为他直接就溜了。那同样的道理,如果这个computer这个对象实例销毁了,那他这里面的两个成员成员变量也就销毁了,因此他们是共生。共列,这样子他们的关系就升级为组合关系,好,我把这个呢写一下。好写一下啊,这个这个单词应该是个O啊,我就不改了,单词应该是O。好,我就不改了,同学们,那如果是如果他们关系变成这样子的话呢,就变成组合关系来,我写一个。
11:04
包包,好,我们来写一个组合,组合这个英文单词呢,就不是aggregation了,而是什么呢?而是。Composition composition,我在这儿写一个。好,我们把这个关系呢给他加强一下。我把这个computer这几个类先拿过来哈。哦,把computer拿过来。呃,我我把这几个拿过来吧。拿过来我稍微改一下就可以了,好吧,那怎么改呢?我在这儿溜一个。又一个貌。又一个MOS,没问题,现在鼠标和computer就不能分离了。为什么不能分离的同学们,因为你只要这个computer对实际创建了,我们这个也就创建了,你只要computer这个对象实力销毁了,我们这个貌似也就销毁了,是不是好这边一样的道理。六一个。
12:01
又一个monitor。那这个monitor这个英文单词这边是O哈,我就不去改了,同学们知道就可以好吧,这这帮也不可分离,不能分离,如果这两者不能分离,那同学们我们的类图呢,就要重新来画了,应该画成这样子的一个形式来。我把。我把这两个图,这这几几个。这几个图形我粘贴拷贝一份。我粘贴拷贝到这边来,我改一改哈。大家看我怎么改。首先。这个不要了。这个不要我们是不是在这有一个六的代码。有没有六一个Mo把它写进去是不是啊,同样我们在这边呢,也有一个六一个monitor。好,此时此刻他们的关系呢,就变成组合,怎么组合,貌似组合到computer里面,那我们要用这个图形来描述。
13:01
可以了。好,这就是组合组合,那同样我们关于组合呢,还有一个案例也给大家分享一下。组合,它是也是整体与部分的关系,但是同学们注意,但是整体和部分不可以分开。我再举个例子,大家就很形象的知道了,比如说我们定义一个person,还有身份证,还有一个头,大家想。人的头和person就是组合,为什么人不能没有头?你在大街上,你能看到有一个人没有手,没有腿,这是有可能的,但是你看到大街上有没有一个人没有脑袋呀?那不可能啊,这个人没有奶,他肯定就死了。对不对,那不那那只有在恐怖片里面才出现,因此同学们,我们这个人的hide呢,它跟person就是一个组合关系,明白。那身份证和person呢?我们认为是个聚合关系,为什么?
14:00
因为一个人身份证没有了,他还不一定就死啊。他可以去补办身份证,身份证掉了吗?我补办就可以了。是不是好,所以说这种这这个案例呢,就说的更清晰了,来,我们再把这个例题给他写道,好,这有个ID card,我们再来描述这么一个关系。也是组合。走一个ID card身份证。有了。我们再建一个类,叫害人头。对不对,这是人头。人的脑袋。人的脑袋。那现在呢,我再建一个person类。我再建一个person类,我们看看这时。我们这个图就应该怎么画了,Person。来,同学们看。代码因为这边有了,我就偷个懒把它粘过来就行了,好吧。来,同学们看。好,这边有个ID卡,就是人有身份证。这里是一个聚合的关系。
15:02
聚合关系,而这里就是一个组合的关系。就是我们这个人。人头和人这hi和person这两个类呢,他们是组合的关系,因为不可分开,身份证可以分开,那这时我们的类图就应该这样来画了,来,朋友们看一下。我再建一个新的类图,名字我就不改了,改成一个二就行,好吧,改成一个二,那同学们看我怎么画啊,嗯,首先呢,这有一个person。没问题。那。这边呢,还有一个hide人头。还有一个什么呢?ID card ID card。很简单是吧。那person这里面呢,它有个属性,第一个属性是ID card。ID card,他可能是通过晒的方法给他设置的。
16:00
我这里就不去写了,还有一个方法呢,诶还有一个属性是什么呀,是它的head头。类型就是害的,但是这个人头呢,是随着人的创建而产生,所以说我直接溜了。又一个hide。Had OK,好,那么我们来描述他们之间的关系。Hi和person是聚合的关系,也就是说头要啊组合,头要组合到人这个类里面去,那就用。这个符号来表示,而ID card呢,跟person是一个聚合的关系,那就用我们这个图标来表示,这样就可以了,大家看看懂了没有。好,同学们,那关于我们这一个组合。也就说到这里了。应该很好理解,但是我们要说一点啊,是不是还要强调一点,那么是不是一定这个ID card的,呃,如果没有六就一定不是一个组合的关系呢?也不一定。
17:04
他可能在其他地方体现,他们之间是不可,不可这个分开的,你比如说你看我这专门写了这么一句话。同学们,在做开发的时候,你有可能遇到这样一个情况,如果我们在程序中person实体类定义了对ID card的级联删除,大家听过什么叫级联删除吗?所以几点删除就是说当我删除一个人对象的时候,我就直接把ID card也删除,就是我删除一个对象,必须把另外一个对象也删除,这叫极点删除。如果我们删除一个person时,连同ID也同删除,那么ID card呢?和person又变成组合关系了。因为他们之间是一种。嗯,就说呃,同生共死的这么一种。这么一种关系,那就是组合了,你比如说我删除一个班级。我删这个班级,我把这个班级所有的人都删完,这个班级就没有存在的意义,那么这个班级也会删掉。
18:05
他同样会存在这种关系,比如说我就举这个例子,当如果我们删除一个人。这象事情我们把ID也一并删除,那这个时候他们就是几联删除,如果是集联删除的话呢,我们也把它认为是一种组合关系啊,当然这个极点参数肯定是在方法里面体现出来的,我就说一句啊,我就说一句大家知道有这么一个概念就行了。有这么一个概念就行了,OK,同学们,那关于我们这个类图的关联聚合,还有组合,我们就说到这儿,主要是把这搞懂哈。把这搞懂关联关系,关联关系就是说如果我有一个。类,在这个类里面有成员变量。由成员变量或者成员属性用到另外一个类,那么他们之间至少就已经构成关联了。啊,就构成关联,那么什么叫做聚合呢?所谓聚合就是说整体合部部分,首先它是一个整体和部分的关系。
19:02
它是一个整体和部分的关系,就是说我,你是我的一个成员属性,或者一个成员变量,但是如果他们可以分开,他们是可以分开的,我们就认为他们是呃聚合。呃,是聚合,如果他们不可以分开,就是整体和部分不可以分开,我们就认为是组合,我举的例子也很形象,比如像电脑,电脑跟我们的鼠标和这一个。显示器它就是可以分开的,那么我们就认为是聚合关系,我又举举了一个例子。比如说人人这个person和这个人头。啊,就人和人头的关系,肯定就是组合了,因为你看我上来个就六了是吧,就说如果这个人没有了,头也就没有了,而当我这个人创建,只要人这个对象实际创建起来,这个人头这个对象实也就创建起来,因此他们呢是不可以分开的,因此。同样是成员属性,但是他们的关系我们就把它升级为组合的关系,大家听懂了没有,而且呢,这边我也画了相应的图,大家应该可以理解好同学们关于这个关联。
20:12
聚合和组合,我们就先介绍到这里。
我来说两句