UML类图关系中关联、依赖、聚集等关系的异同

本文和大家重点讨论一下UML类图关系中几种关系的异同,在UML类图关系中,关联,依赖,聚集,组成的联系十分紧密,不容易区分,本文试图用通俗的语言来讲解这四种关系的区别。

UML类图关系中关联、依赖、聚集等关系的异同

--------------------------------------------------------------------------------

1.关联:连接模型元素及链接实例,用一条实线来表示;
2.依赖:表示一个元素以某种方式依赖于另一个元素,用一条虚线加箭头来表示;
3.聚集:表示整体与部分的关系,用一条实线加空心菱形来表示;
4.组成:表示整体与部分的有一关系,用一条实线加实心菱形来表示;
(关联,依赖,聚集,组成的异同见后描述)
5.泛化(继承):表示一般与特殊的关系,用一条实线加空心箭头来表示;
6.实现:表示类与接口的关系,用一条虚线加空心箭头来表示;

关联,依赖,聚集的异同:(《Java面向对象编程》一书,作者:孙卫琴来源:[url]www.javathinker.org[/url])
在建立对象模型时,很容易把依赖、关联和聚集关系混淆。当对象A和对象B之间存在依赖、关联或聚集关系时,对象A都有可能调用对象B的方法,这是三种关系之间的相同之处,除此之外,它们有着不同的特征。

1.UML类图关系中依赖关系的特征

对于两个相对独立的系统,当一个系统负责构造另一个系统的实例,或者依赖另一个系统的服务时,这两个系统之间主要体现为依赖关系,例如生产零件的机器和零件,机器负责构造零件对象。再例如充电电池和充电器,充电电池通过充电器来充电。再例如自行车Bicycle和打气筒Pump,自行车通过打气筒来充气。图1-39为Bicycle类与Pump类的类框图。

图1-39Bicycle类与Pump类的依赖关系

2.UML类图关系中关联关系的特征

对于两个相对独立的系统,当一个系统的实例与另一个系统的一些特定实例存在固定的对应关系时,这两个系统之间为关联关系。例如客户和订单,每个订单对应特定的客户,每个客户对应一些特定的订单;再例如公司和员工,每个公司对应一些特定的员工,每个员工对应一特定的公司;再例如自行车和主人,每辆自行车属于特定的主人,每个主人有特定的自行车,图1-40显示了主人和自行车的关联关系。而充电电池和充电器之间就不存在固定的对应关系,同样自行车和打气筒之间也不存在固定的对应关系。

图1-40主人和自行车的关联关系


3.UML类图关系中聚集关系的特征

当系统A被加入到系统B中,成为系统B的组成部分时,系统B和系统A之间为聚集关系。例如自行车和它的响铃、龙头、轮胎、钢圈以及刹车装置就是聚集关系,因为响铃是自行车的组成部分。而人和自行车不是聚集关系,因为人不是由自行车组成的,如果一定要研究人的组成,那么他应该由头、躯干和四肢等组成。由此可见,可以根据语义来区分关联关系和聚集关系。
聚集关系和关联关系的区别还表现在以下方面:

(1)对于具有关联关系的两个对象,多数情况下,两者有独立的生命周期。比如自行车和他的主人,当自行车不存在了,它的主人依然存在;反之亦然。但在个别情况下,一方会制约另一方的生命周期。比如客户和订单,当客户不存在,它的订单也就失去存在的意义。

(2)对于具有聚集关系(尤其是强聚集关系)的两个对象,整体对象会制约它的组成对象的生命周期。部分类的对象不能单独存在,它的生命周期依赖于整体类的对象的生命周期,当整体消失,部分也就随之消失。比如小王的自行车被偷了,那么自行车的所有组件也不存在了,除非小王事先碰巧把一些可拆卸的组件(比如车铃和坐垫)拆了下来。
不过,在用程序代码来表示关联关系和聚集关系时,两者比较相似。

4.UML类图关系中组成关系的特征

组成关系是一种两个类之间的关系,其中整体类由部分类组成,部分类需要整体类才能存在,这种关系意味着销毁整体类将会同时销毁部分类

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
聚集关系、组合关系、泛化关系依赖关系是面向对象设计常见的几种关系,它们的定义和区分如下: 1. 聚集关系(Aggregation):表示整体和部分之间的关系,即一个整体对象包含多个部分对象,但部分对象可以独立存在。例如,一个学校包含多个班级,但班级可以独立存在。 2. 组合关系(Composition):也是表示整体和部分之间的关系,但是部分对象不能独立存在,只能作为整体对象的一部分存在。例如,一个汽车由车轮、发动机、车身等部分组成,但这些部分不能独立存在。 3. 泛化关系(Generalization):表示类之间的继承关系,即一个类是另一个类的子类。例如,狗是动物的子类。 4. 依赖关系(Dependency):表示一个类依赖于另一个类来完成某个操作或实现某个功能,但是两者之间并没有包含关系。例如,一个人需要驾驶汽车来到公司上班,但是人和汽车之间并没有包含关系。 区分: 聚集关系和组合关系都是整体和部分之间的关系,但是组合关系部分对象不能独立存在,而聚集关系部分对象可以独立存在。 泛化关系是类之间的继承关系,表示一般和特殊之间的关系,而聚集关系和组合关系是对象之间的关系依赖关系是类之间的关系,表示一个类依赖于另一个类,而聚集关系、组合关系和泛化关系是对象之间的关系

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值