UML类关系简述

UML中,描述类与类,类与接口之间的关系,有以下几个描述来表示:
Composition -- 合成
Aggregation -- 聚合
Association  -- 关联
Dependency -- 依赖

这四种关系分别对应不同的业务背景,以上的显示,是按照这些关系所对应的业务背景的范围从小到大排序的(不少网络资源都用“强弱”来形容这四种关系之间的区别,我并不认为这种形容是准确的,至少在我看来,字眼“这些关系对应的实际业务背景”比较“这四种关系的强弱”更加形象,易理解)。

以下是结合例子以及针对例子的分析:
24005233_GOky.png 合成:composiation 

有3个类,分别是 车轮,轮胎外胎,轮胎内胎。
具体的代码如下,当然,以下代码不能放在同一个java源文件中(聪明的你知道这是为啥吗?)
   
  1. public class 轮胎内胎 {
  2. public String 内胎牌子;
  3. }

  4. public class 轮胎外胎 {
  5. public String 花纹样式;
  6. }
  7. public class 车轮 {
  8. private 轮胎外胎 外胎;
  9. private 轮胎内胎 内胎;
  10. }
每个车轮至少包含了轮胎外胎和内胎,缺一不可,那么在UML图中,车轮和外胎、内胎之间的关系,就用组合--composiation来描述,并且实心菱形端表示组合成的类,本例子中,组合成的类就是【车轮】。
除此之外,还可以想到其他例子,比如,有一个类,名为Bird,那么其属性应该有一个 Head,那么这个时候,这两个类的关系也就是组合了。
24005233_GOky.png 聚合:Aggregation
现在我们把注意力放到红色框子中的部分

奔驰迎亲车队这个类,肯定是由很多的奔驰车所组成的,这个就是聚合--aggregation.
聚合与组合的区别,在此可以看到:
1、组合所注重的,是***由***和***组成的,一旦在UML中画出,那么缺一不可,而聚合,是***由很多***聚合而成的,少一个两个没事儿
24005233_GOky.png 关联:association
 接下来再看 关联,如下图,现在我们还是关注红色框子中内容:


奔驰车中的座位上,有奢华真皮软座垫,这个就是关联,因为如果这个坐垫类一旦发生变化,那么奔驰车中坐垫也肯定要跟着变化。那么这个关联和组合有什么区别呢?
1、关联并非非有不可,但是组合必须强调必须包含,奔驰中不一定非得有这个 奢华真皮软坐垫,因为它可能有的是钻石版硬座垫或者甚至没有。
那么关联和聚合有啥区别呢?
1、二者所注重的业务背景不同,聚合表示 由很多 *** 组成,而关联只是表示 有一个这样的东西,这个东西不是必须品。从这点上看,没有可比性。
24005233_GOky.png 依赖:dependency
最后的一个关系就是依赖了,先不看图,直接告诉你,BenzCar依赖类 天气。
啥?这都什么跟什么?我一个车为啥会跟天气有依赖关系?
看下面的UML图吧,还是关注红色部分


现在明白了吧?
雨刷摆动 与否是直接受天气影响的,但是对于车本身没有什么影响,只是对车的一个功能有影响。
那么我们就可以理解天气的确对车有影响,但是单单就这个车而言,影响就是个屁大的影响,而这屁大的影响缺失存在,那么与此同时,以此类推:
1、我还会需要考虑到今天是什么日子,是否限制单双号上路;
2、今天加油站有没有正常营业,因为我要加油
3、今天商城是否有停车位,因为我要去商城停车
…………
诸如此类,这些的确影响类:BenzCar,但是影响类的类看上去又那么的跟BenzCar没关系,这种就叫做依赖,这种情况好比是计算机再怎么模仿现实,也无法全部的模仿到现实,因此,这种情况在UML称之为依赖。
因为这类因素过多过多,所以,在UML中依赖这种关系,其对应的业务背景的范围是最广的。
如果非要比较依赖和关联的区别:
1、依赖所影响的不是类,而是类中的某些方法,而关联则是影响这个类。





转载于:https://my.oschina.net/u/1182369/blog/405719

猜你喜欢

转载自blog.csdn.net/weixin_33729196/article/details/92083700