UML依赖关系速记
前言
最近学习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
绘图软件。