zl程序教程

您现在的位置是:首页 >  Java

当前栏目

UML依赖关系速记

2023-02-18 16:38:55 时间

前言

最近学习unreal时,有时候要看大佬前辈们画的类图,有时候自己也想总结代码用uml画一下图,但是类与类之间的连线有时候看起来不是很清晰,有点影响体验,这里速记一下最常用的几种依赖关系类型。

最常见的依赖关系大概有以下六种。

依赖 Dependency 关联 Association 聚合 Aggregation 组合 Composition 泛化 Generalization 实现 Realization

依赖 Dependency

依赖关系表示一种使用关系,即一个类的功能需要另一个类来协助才能完成。但依赖者与被依赖者之间不用了解各自内部的细节。是一种很淡的关系。

依赖关系使用带箭头的虚线表示,从依赖者出发,指向其所依赖的被依赖者。

依赖关系

从代码上来看,依赖关系通常体现在以下几个地方,总之不需要互相了解其内部实现,只通过外部接口来交互。

局部变量。 成员函数的参数或者返回值。 对被依赖者的某静态方法进行调用。

从生命周期上来看,依赖关系仅在函数调用时产生,在函数结束时结束,生命周期比较短。

关联 Association

关联关系表示一种拥有关系,即一个类的实现需要拥有另一个类才能完成。一个类需要了解另一个类的内部细节(成员变量、成员函数等)。比依赖关系要更深一些。

关联关系使用带箭头的实线表示,从关联者出发,指向实现该关联者所需要的被关联者。

关联关系

从代码上来看,关联关系通常体现在__成员变量__上,即被关联者通常作为关联者的成员变量。

从生命周期上来看,关联关系随着关联者对象的生成而产生,随着关联者对象的销毁而结束,生命周期比依赖关系要长一些。

当然,关联关系并非只能单向,也存在互相关联的情况(互为成员变量),但是这种情况一般不推荐出现。此时不需要使用箭头来表示,如下图所示。

双向关联关系

聚合 Aggregation

聚合关系表示一种has-a的关系,是关联关系的一种强化特例,是对关联关系所作的进一步解释。

聚合关系表示一种整体与部分的关系,但是部分是可以离开整体而存在的。他们有各自的生命周期,且可以是一对一、一对多、多对多的关系。举例如下。

公司与员工。 班级与学生。 计算机与cpu。 雁群与大雁。

聚合关系使用空心菱形和实线来表示,其中空心菱形处于整体一侧。如图所示。

聚合关系

从代码上来看,聚合关系也是通过__成员变量__来体现的。但是部分对象的构造和销毁,并不依赖整体对象。

从生命周期上来看,整体和部分各有各的生命周期,互不干扰。

组合 Composition

组合关系表示一种contain-a的关系,也是关联关系的一种强化特例,是对关联关系所作的进一步解释。

组合关系比聚合关系的关联性更强,它同样表示一种整体与部分的关系,但是部分无法离开整体而存在,整体也无法没有部分而存在。举例如下。

人与大脑。 大雁与大雁的翅膀。 公司与部门。

组合关系使用实心菱形和实线来表示,其中实心菱形处于整体一侧。如图所示。

组合关系

从代码上来看,组合关系也是通过__成员变量__来体现的。但是部分对象大多数情况下会随着整体对象的构造而构造,随着整体对象的销毁而销毁。

从生命周期上来看,整体和部分的生命周期一般是绑定在一起的,同命运,共呼吸。

泛化 Generalization

泛化关系表示一种is-a关系,即继承关系,表示一般与特殊的关系。举例如下。

动物与老虎。 形状与矩形。 鸟与大雁。

泛化关系比较强调__事物__,一般事物表示一类事物的共性,特殊事物表示满足共性的同时也有自己物化的特性。

泛化关系使用带空心三角形的实线表示,其中空心三角形在一般对象一侧,如图所示。

泛化关系

从代码上来看,泛化关系表现为类的继承。

实现 Realization

实现关系表示一种can-do关系,即有进行某种行为的能力。举例如下。

行走和人类。 飞行和大雁。

实现关系使用带空心三角形的虚线表示,其中空心三角形在抽象接口一侧,如图所示。

实现关系

在有些uml绘制工具中,由于抽象接口与类区别比较明显,实现关系也通常直接使用一条实线表示,如图所示。

实现关系

实现关系比较强调__能力__,可与泛化关系对比理解。

从代码上来看,一种行为能力通常实现为一个抽象接口,而具体的物体类实现该接口,便拥有了该接口所定义的能力。

总结

常用的uml绘图软件。

StarUML PowerDesigner

参考

认识 UML 类关系——依赖、关联、聚合、组合、泛化

UML六种依赖关系

UML中常见关系详解