UML类关系(依赖,关联,聚合,组合的区别)

https://blog.csdn.net/u012349616/article/details/52564613

 

UML Class Relationships

由于最近看一些java书涉及到了uml类图,因此查阅资料,思考后整理总结写成如下文章 
注重于理解,没有如何实现(画图)的部分

Generalization/specialization

Generalization

一般而言是指继承

Realization

Realization

表示一些已定义但是没有任何实现细节的类,所以很多情况是指接口和抽象类

Dependency

Dependency

dependency exists between two elements if changes to the definition of one element (the supplier) may cause changes to the other (the client)
  • 1
  • 2

依赖其实定义非常模糊,所以使用依赖只应该是在其他关系无法表示的时候:

  • 依赖通常体现为调用一个其他所依赖类的方法
  • 在代码中往往体现为依赖类作为函数参数或者局部临时变量
  • 举例:人依赖车

Association

Association

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

Aggregation

Aggregation

聚合和组合是两种部分整体的关联关系

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

Composition

Composition

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

关联,聚合,组合的区别

从例子来说

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

再说聚合和组合

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

再说关联

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

最后,我想补充一下

  • 以上对于不同关系的定义是尽量关系正交,尽可能不存在重叠
  • 这几种关系是语义上的区别,关系之间可以相互转化,所以一定要具体情况具体分析
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值