UML之6种关系的解释与画法

十年热恋 提交于 2020-02-25 19:57:35

1.依赖关系,A类是B类的一个变量,B类持有A类的一个引用。依赖其实定义非常模糊,所以使用依赖只应该是在其他关系无法表示的时候:

 

2.泛化关系 就是java中的继承

3.关联关系,分为单项关联,双向关联和自关联,默认创建关联关系是双向关联。

  • 关联暗示了依赖,与依赖的最大区别在于:关联类通常作为一个类成员变量存在
  • 与依赖相似,关联用来表示无法用聚合和组合表示的关系
  • 举例:学生与老师的关系
  • 依赖与关联更详细的区别介绍

4.实现关系,就是java中的接口

5.聚合关系,是一个整体和部分的关系,这儿的整体和部分是可以分开的,也就是部分离开了整体是可以存活的。

聚合和组合是两种部分整体的关联关系,聚合的特点如下:

  • 我认为最重要的特点是成员可独立
  • 举例:班级与学生

6.组合关系 ,也是整体与部分的关系,他的整体和部分是不可以分开的

  • 我认为最重要的特点是成员不可独立
  • 成员必须依赖于整体才有意义
  • 举例:汽车和引擎

关联,聚合,组合的区别

从例子来说

  • 老师不能说包含学生,但老师带很多学生;学生同样不包含老师,但一个学生可以有很多老师
  • 班级包含很多学生,但学生自己可以独立存在,所以并不是在班级中创建的学生,而是班级中有学生的reference
  • 汽车包含引擎,引擎脱离汽车之后毫无意义,所以引擎必须依赖于汽车,不可独立存在

再说聚合和组合

  • 很多文章都会说组合意味着拥有共同的lifetime,这点我不完全同意,因为以汽车和引擎为例,即使某一汽车坏了,引擎也可以搬移到其他的汽车上使用,所以生命周期的说法在我看来不完全对,所以我也并没有说在汽车里创建引擎
  • 另一种说法是聚合的对象是可分享(share)的,而组合不是,这种说法我觉得比较靠谱,所以最后总结一下:
  • 聚合与组合区别可以考虑是否可独立和是否可分享
  • 更详细的讨论

再说关联

  • 可以认为除了聚合和组合之外的类成员关系均认为是关联

最后,我想补充一下

  • 以上对于不同关系的定义是尽量关系正交,尽可能不存在重叠
  • 这几种关系是语义上的区别,关系之间可以相互转化,所以一定要具体情况具体分析

至于6种关系在PowerDesinger中的画法,右边的小画板都会有对应关系的英文提示,鼠标hover上面就可以看到了。这个应该不是难点。主要的就是类的创建这一块需要说一下,Name那儿建议写这个类的中文,方便展示交流,Code那儿就写中文对应的英文,用来正向工程时候生成类名的。Attributes可以写一些属性,Operations可以写一些方法,Preview可以预览代码的效果。

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!