UML类图关系

本文解析了UML类图中的关联、聚合/组合、依赖及泛化等关系,并通过代码示例阐述了它们的区别与联系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

属性和操作之前可附加一个可见性修饰符。加号(+)表示具有 公共可见性。减号(-)表示私有可见性。#号表示受保护的可见性。省略这些修饰符表示具有package(包)级别的可见性。如果属性或操作具有下划线, 表明它是静态的。在操作中,可同时列出它接受的参数,以及返回类型

 

1. 关联

A -> B关联表示相识关系,实际表现为类A知道类B的存在,它可以调用类B的公共属性和方法,但没有生命周期的依赖。代码表现为:

Class A

{

Public:

B *b;

};

Class B

{

};

类图为表现为:

UML类图关系 - 妮子 - yshuang 的博客

# 存在双向关联和自身关联

2. 组合/聚合

组合/聚合是整体与部分的关系。

类A聚合类B,类B可以脱离类A独立存在。代码表现为:

Class A

{

Public:

B b;

};

Class B

{

};

类图表现为:

UML类图关系 - 妮子 - yshuang 的博客

类A组合类B,类A需要知道类B的生存周期,即类A可能控制类B的生成和释放,或者通过某种方式知道类B的生成和释放。

代码表现与聚合相同,类图表现为:

UML类图关系 - 妮子 - yshuang 的博客

3. 依赖

类A依赖类B,那么类A可能需要用到类B的一些方法,要完成类A的所有功能,一定要类B的方法的协助才行,不产生属性,一般是类A的头文件中包含类B的头文件,实际表现为类A的一些方法可能需要把类B作为参数使用。代码表现为:

//A.h

#include “B.h”

Class A

{

Void Func(B *b);

};

//B.h

Class B

{

}

类图表现为:

UML类图关系 - 妮子 - yshuang 的博客

关联是类之间的一种关系,例如老师教学生,老公和老婆,水壶装水等就是一种关系。这种关系是非常明显的,在问题领域中通过分析直接就能得出。

依赖是一种弱关联,只要一个类用到另一个类,但是和另一个类的关系不是太明显的时候(可以说 是“uses”了那个类),就可以把这种关系看成是依赖,依赖也可说是一种偶然的关系,而不是必然的关系,就是“我在某个方法中偶然用到了它,但在现实中 我和它并没多大关系”。例如我和锤子,我和锤子本来是没关系的,但在有一次要钉钉子的时候,我用到了它,这就是一种依赖,依赖锤子完成钉钉子这件事情。

组合是一种整体-部分的关系,在问题域中这种关系很明显,直接分析就可以得出的。例如轮胎是车的一部分,树叶是树的一部分,手脚是身体的一部分这种的关系,非常明显的整体-部分关系。

上述的几种关系(关联、聚合/组合、依赖)在代码中可能以指针、引用、值等的方式在另一个类中出现,不拘于形式,但在逻辑上他们就有以上的区别。

这里还要说明一下,所谓的这些关系只是在某个问题域才有效,离开了这个问题域,可能这些关系就不成立了。

4. 泛化(继承)

继承关系,动物与狮子老虎大象的关系。

代码表现为:

//A.h

#include “B.h”

Class A: public B

{

};

类图表现为:

UML类图关系 - 妮子 - yshuang 的博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值