UML类图符号:各种关系说明以及举例
JAVA乐园
共 4259字,需浏览 9分钟
· 2020-09-04
![](https://filescdn.proginn.com/1250a9962904f1b7482fa1305dbd2db7/cef1852fe0558e393f17b5c5985d92b4.webp)
点击上方「蓝字」关注我们
![](https://filescdn.proginn.com/1537a8989bb1a6d4a05052fff67d6869/e6e1f69cc0eac1719004bac1fcb419f6.webp)
UML中描述对象和类之间相互关系的方式包括:依赖(Dependency),关联(Association),聚合(Aggregation),组合(Composition),泛化(Generalization),实现(Realization)等。
依赖(Dependency):元素A的变化会影响元素B,但反之不成立,那么B和A的关系是依赖关系,B依赖A;类属关系和实现关系在语义上讲也是依赖关系,但由于其有更特殊的用途,所以被单独描述。uml中用带箭头的虚线表示Dependency关系,箭头指向被依赖元素。 泛化(Generalization):通常所说的继承(特殊个体 is kind of 一般个体)关系,不必多解释了。uml中用带空心箭头的实线线表示Generalization关系,箭头指向一般个体。 实现(Realize):元素A定义一个约定,元素B实现这个约定,则B和A的关系是Realize,B realize A。这个关系最常用于接口。uml中用空心箭头和虚线表示Realize关系,箭头指向定义约定的元素。 关联(Association):元素间的结构化关系,是一种弱关系,被关联的元素间通常可以被独立的考虑。uml中用实线表示Association关系,箭头指向被依赖元素。 聚合(Aggregation):关联关系的一种特例,表示部分和整体(整体 has a 部分)的关系。uml中用带空心菱形头的实线表示Aggregation关系,菱形头指向整体。 组合(Composition):组合是聚合关系的变种,表示元素间更强的组合关系。如果是组合关系,如果整体被破坏则个体一定会被破坏,而聚合的个体则可能是被多个整体所共享的,不一定会随着某个整体的破坏而被破坏。uml中用带实心菱形头的实线表示Composition关系,菱形头指向整体。
1.1.1 依赖(Dependency):虚线箭头表示
public class Person
{
void buy(Car car)
{
...
}
}
![](https://filescdn.proginn.com/3f74ea170b4c12c7a847bda4e6ec54a2/926b721590a28f92f56aece02cd6bc3d.webp)
使用< 调用< >--声明一个类调用其他类的操作的方法。 参数< >--声明一个操作和它的参数之间的关系。 发送< >--声明信号发送者和信号接收者之间的关系。 实例化< >--声明用一个类的方法创建了另一个类的实例。
跟踪< >--声明不同模型中的元素之间存在一些连接但不如映射精确。 精化< >--声明具有两个不同语义层次上的元素之间的映射。 派生< >--声明一个实例可以从另一个实例导出。
访问< >--允许一个包访问另一个包的内容。 导入< >--允许一个包访问另一个包的内容并为被访问包的组成部分增加别名。 友元< >--允许一个元素访问另一个元素,不管被访问的元素是否具有可见性。
绑定< >--为模板参数指定值,以生成一个新的模型元素。
1.1.2 关联(Association):实线箭头表示
public class 徒弟
{
}
public class 唐僧
{
protected: list<徒弟> tdlist;
}
![](https://filescdn.proginn.com/b3a46b6a34867416ccc89f14de7989ea/08b3409c5aa7ac54adb3e498bdc9f00d.webp)
1.1.3 聚合(Aggregation):带空心菱形头表示
public class 引擎
{
}
public class 轮胎
{
}
public class 汽车
{
protected:引擎 engine;
protected:轮胎 tyre[4];
}
![](https://filescdn.proginn.com/e5e712fab854efad1daa30a401a73441/2a82148a39acba8b054ddd48eeec584d.webp)
1.1.4 组合(Composition):带实心菱形头的实线表示
class 肢
{
}
class 人
{
protected: 肢 limb[4];
}
![](https://filescdn.proginn.com/62e689271f6ea358b076e8b4eefdfc3f/fbbdc3eb56ed085af58bf2a684ebd1e6.webp)
1.1.5 泛化(Generalization):
带空心箭头的实线线表示
![](https://filescdn.proginn.com/d9cc012a1bec2f852b4e3b6a735eabcb/15d3d2bbdb5a724172e620b2cc60e514.webp)
1.1.6 实现(Realization):空心箭头和虚线表示
![](https://filescdn.proginn.com/c0581680d5adefbd757685d3bd787540/d3e89a942c0ac0385b9986d55b01123b.webp)
二、相互之间的区别
![](https://filescdn.proginn.com/7b4b72f8e14ccbf46936f5347c5325c3/1250fcceee82110b1c8a150e4df7123f.webp)
“弱”包含表示如果部门没有了,员工也可以继续存在; “强”包含表示如果部门没有了,员工也不再存在;
作者 | duanxz
![](https://filescdn.proginn.com/2428168a381d96874280762e7aeb5a37/85e78ad9309123c764f3a3515bc090fb.webp)
扫码二维码
获取更多精彩
Java乐园
![](https://filescdn.proginn.com/f5e861a6aa1c39eba2de93fe22b33394/87468e6a8775b788b3359d8cf43d2d7e.webp)
评论