前言
在UML类图中,常见的有以下几种关系:
1、关联(Association)
2、聚合(Aggregation)
3、组合(Composition)
4、依赖(Dependency)
5、泛化(Generalization)
6、实现(Realization)
本文将依次介绍每种关系以及对应的类图表示方式。
类图图示样例
关联Association
1、关联关系是类与类之间的联结,它使一个类知道另一个类的属性和方法。
2、关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
3、在Java或c++中,关联关系是通过使用成员变量来实现的。
4、带普通箭头的实心线,指向被拥有者。
聚合Aggregation
1、聚合关系是关联关系的一种,是强的关联关系,整体与部分的关系, 且部分可以离开整体而单独存在。
2、聚合是整体和部分之间的关系,例如汽车由引擎、轮胎以及其它零件组成。
3、聚合关系也是通过成员变量来实现的。但是,关联关系所涉及的两个类处在同一个层次上,而聚合关系中,两个类处于不同的层次上,一个代表整体,一个代表部分。
4、关联与聚合仅仅从Java或C++语法上是无法分辨的,必须考察所涉及的类之间的逻辑关系。
5、带空心菱形的实心线,菱形指向整体
组合(合成)Composition
1、组合是聚合的一种形式,它具有更强的拥有关系,强调整体与部分的生命周期是一致的。整体负责部分的生命周期的管理。如果整体被销毁,部分也必须跟着一起被销毁,如果所有者被复制,部分也必须一起被复制。部分不能独立存在。
2、与关联关系一样,组合关系也是通过类的成员变量来实现的。
3、带实心菱形的实线,菱形指向整体。
依赖Dependency
1、依赖关系也是类与类之间的联结,对象之间最弱的一种关联方式,是临时性的关联,要完成功能,需要有另一个类的方法协助才行。通常情况下,依赖关系体现在某个类的方法使用另一个类作为参数。
2、依赖总是单向的。
3、依赖关系在Java或C++语言中体现为局部变量、方法的参数或者对静态方法的调用。
4、带箭头的虚线,指向被使用者
泛化(继承)Generalization
1、泛化是父类和子类之间的关系,子类继承父类的所有结构和行为。是一种继承关系, 表示一般与特殊的关系。
2、带三角箭头的实线,箭头指向父类。
实现Realization
1、实现关系指定两个实体之间的一个合约。换言之,一个实体定义一个合约,而另一个实体保证履行该合约。
2、带三角箭头的虚线,箭头指向接口。
一点补充
各种关系的强弱顺序
泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖
聚合和组合
聚合关系是“has-a”关系,组合关系是“contains-a”关系。
聚合关系表示整体与部分的关系比较弱,而组合比较强;聚合关系中代表部分事物的对象与代表聚合事物的对象的生存期无关,一旦删除了聚合对象不一定就删除了代表部分事物的对象。组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象。
参考资料
http://www.cnblogs.com/riky/archive/2007/04/07/704298.html
http://www.douban.com/note/312447223/
http://www.ibm.com/developerworks/rational/library/content/RationalEdge/sep04/bell/
http://www.uml.org.cn/oobject/201104212.asp
《大话设计模式(2007年12月1日清华大学出版社)》