目录
本文摘抄于UML类图符号 各种关系说明以及举例,其实我一直在看UML内容,但有时候总是忘记,因此摘抄于此,谢谢原文作者无私分享
UML中描述对象和类之间相互关系的方式包括:依赖,关联,聚合,组合,泛化,实现等。
表示关系的强弱关系
组合>聚合>关联>依赖
相互间关系
- 聚合是表明对象之间的整体与部分关系的关联
- 组合是表明整体与部分之间有相同生命周期关系的聚合
- 依赖描述了对象之间的调用关系
- 关联描述了对象之间的结构关系
一、依赖(Dependency):虚线箭头表示
1、依赖关系也是类与类之间的联结
2、依赖总是单向的。(#add 注意,要避免双向依赖。一般来说,不应该存在双向依赖。)
3、依赖关系在 Java 或 C++ 语言中体现为局部变量、方法的参数或者对静态方法的调用。
//依赖--->用虚线箭头表示
class Person{
void buy(Car car){};
}
二、关联(Association):实线箭头表示
关联(Association):元素间的结构化关系,是一种弱关系,被关联的元素间通常可以被独立的考虑。uml中用实线表示Association关系,箭头指向被依赖元素。
1、关联关系是类与类之间的联结,它使一个类知道另一个类的属性和方法。
2、关联可以是双向的,也可以是单向的(#add还有自身关联)。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
3、在 Java 或 c++ 中,关联关系是通过使用成员变量来实现的。
//关联--->用实线箭头表示
class Student{//徒弟
}
class Teatcher{ //唐僧
private List<Student> list;
}
三、聚合(Aggregation):带空心菱形头表示
聚合(Aggregation):关联关系的一种特例,表示部分和整体(整体 has a 部分)的关系。uml中用带空心菱形头的实线表示,菱形头指向整体。
1、聚合关系是关联关系的一种,是强的关联关系。
2、聚合是整体和部分之间的关系,例如汽车由引擎、轮胎以及其它零件组成。
3、聚合关系也是通过成员变量来实现的。但是,关联关系所涉及的两个类处在同一个层次上,而聚合关系中,两个类处于不同的层次上,一个代表整体,一个代表部分。
4、关联与聚合仅仅从 Java 或 C++ 语法上是无法分辨的,必须考察所涉及的类之间的逻辑关系。
//聚合--->带空心菱形头表示
class Engine{ //引擎
}
class Tyre{ //轮胎
}
class Car{ //汽车
private Engine engine;
private Tyre tyre[4];
}
四、组合(Composition):带实心菱形头的实线表示
组合(Composition):组合是聚合关系的变种,表示元素间更强的组合关系。如果是组合关系,如果整体被破坏则个体一定会被破坏,而聚合的个体则可能是被多个整体所共享的,不一定会随着某个整体的破坏而被破坏。uml中用带实心菱形头的实线表示Composition关系,菱形头指向整体。
1、合成关系是关联关系的一种,是比聚合关系还要强的关系。
2、它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。
//组合--->带实心菱形头表示
class Limb{
}
class Person{
private Limb limb[4];
}
五、泛化(Generalization)
泛化(Generalization):通常所说的继承(特殊个体 is kind of 一般个体)关系,不必多解释了。uml中用带空心箭头的实线表示,箭头指向一般个体。
带空心箭头的实线线表示
泛化表示一个更泛化的元素和一个更具体的元素之间的关系。泛化是用于对继承进行建模的UML元素。在Java中,用extends关键字来直接表示这种关系。
泛化关系表示类与类之间的继承关系,接口与接口之间的继承关系。
六、实现(Realization):空心箭头和虚线表示
实现(Realize):元素A定义一个约定,元素B实现这个约定,则B和A的关系是Realize,B realize A。这个关系最常用于接口。uml中用空心箭头和虚线表示,箭头指向定义约定的元素。
实现关系指定两个实体之间的一个合同。换言之,一个实体定义一个合同,而另一个实体保证履行该合同。对Java应用程序进行建模时,实现关系可直接用implements关键字来表示。
特别推荐:云课堂-125啦·读书导航 - 阅读是一种生活方式