1.依赖关系,A类是B类的一个变量,B类持有A类的一个引用。依赖其实定义非常模糊,所以使用依赖只应该是在其他关系无法表示的时候:
2.泛化关系 就是java中的继承
3.关联关系,分为单项关联,双向关联和自关联,默认创建关联关系是双向关联。
- 关联暗示了依赖,与依赖的最大区别在于:关联类通常作为一个类成员变量存在
- 与依赖相似,关联用来表示无法用聚合和组合表示的关系
- 举例:学生与老师的关系
- 依赖与关联更详细的区别介绍
4.实现关系,就是java中的接口
5.聚合关系,是一个整体和部分的关系,这儿的整体和部分是可以分开的,也就是部分离开了整体是可以存活的。
聚合和组合是两种部分整体的关联关系,聚合的特点如下:
- 我认为最重要的特点是成员可独立
- 举例:班级与学生
6.组合关系 ,也是整体与部分的关系,他的整体和部分是不可以分开的
- 我认为最重要的特点是成员不可独立
- 成员必须依赖于整体才有意义
- 举例:汽车和引擎
关联,聚合,组合的区别
从例子来说
- 老师不能说包含学生,但老师带很多学生;学生同样不包含老师,但一个学生可以有很多老师
- 班级包含很多学生,但学生自己可以独立存在,所以并不是在班级中创建的学生,而是班级中有学生的reference
- 汽车包含引擎,引擎脱离汽车之后毫无意义,所以引擎必须依赖于汽车,不可独立存在
再说聚合和组合
- 很多文章都会说组合意味着拥有共同的lifetime,这点我不完全同意,因为以汽车和引擎为例,即使某一汽车坏了,引擎也可以搬移到其他的汽车上使用,所以生命周期的说法在我看来不完全对,所以我也并没有说在汽车里创建引擎
- 另一种说法是聚合的对象是可分享(share)的,而组合不是,这种说法我觉得比较靠谱,所以最后总结一下:
- 聚合与组合区别可以考虑是否可独立和是否可分享
- 更详细的讨论
再说关联
- 可以认为除了聚合和组合之外的类成员关系均认为是关联
最后,我想补充一下
- 以上对于不同关系的定义是尽量关系正交,尽可能不存在重叠
- 这几种关系是语义上的区别,关系之间可以相互转化,所以一定要具体情况具体分析
至于6种关系在PowerDesinger中的画法,右边的小画板都会有对应关系的英文提示,鼠标hover上面就可以看到了。这个应该不是难点。主要的就是类的创建这一块需要说一下,Name那儿建议写这个类的中文,方便展示交流,Code那儿就写中文对应的英文,用来正向工程时候生成类名的。Attributes可以写一些属性,Operations可以写一些方法,Preview可以预览代码的效果。
来源:CSDN
作者:grenZh
链接:https://blog.csdn.net/qq_31180471/article/details/104495612