UML类图中的符号解释
在UML的定义中,描述类和对象之间的关系,包括以下⼏种⽅式:依赖(Dependency)、关联(Association)、聚
合(Aggregation)、组合(Composition)、泛化(Generalization)和实现(Realization)。现分别说明如下:
1. 依赖(Dependency)
在uml中,“依赖”表⽰为带箭头的虚线,箭头指向被依赖的元素。是类与类之间的连接,表⽰为⼀个类依赖于另⼀个类的定义,其中⼀个类的变化将影响另⼀个类。依赖总是单向的,不应该存在双向依赖,这⼀点要特别注意。更具体的说,依赖可以理解为:⼀个类(A)对不在其实例作⽤域内的另⼀个类或对象(B)的任何类型的引⽤。⼤致包含以下⼏种情况:
(1)局部变量;
(2)⽅法的参数;
(3)静态⽅法的调⽤;
下⾯是依赖关系的uml⽰意图:
2. 关联(Association)
在uml中,关联表⽰为带箭头的实线。关联可以是单向的,也可以是双向的。如果是双向关联,则可以表⽰为双向箭头,或者没有箭头。⼀般来说,系统设计应表现为单向关联,这样利于维护。⼀个关联可以附加“多重性”的修饰符,表⽰两个类之间的数量关系。关联可以理解为:⼀个类(A)持有另⼀个类或对象(B)。具体表现为:
(1)成员变量
下⾯是关联关系的uml⽰例图:
上⾯的关联表⽰,⼀个Employee持有(has)0个或多个TimeCard。
3. 聚合(Aggregation)
在uml中,聚合关系表⽰为空⼼的菱形箭头线。聚合关系是关联关系的⼀种,表⽰⼀种“强”关联关系。对⽐与关联关系,两个类是处于同⼀个层次的。⽽聚合关系,两个类处于不同的层次,强调了⼀个整体/局部的关系。例如⼀辆汽车有⼀个引擎,4个轮胎。
在聚合关系中,体现了⼀种“弱拥有”的概念。也就是说,对象A拥有对象B,但B并不是A的组成部分。更具体的表现为,如果A由B聚合⽽成,则A包含B的全局对象,但B对象可以不在A对象创建时创建。回到前⾯的例⼦,汽车对象由轮胎对象聚合⽽成,但是轮胎对象的⽣命期并不受汽车对象的左右。当汽车对象销毁时,轮胎对象也可以单独存在!
下⾯是聚合关系的uml⽰意图:
从代码上看,聚合和关联没有任何区别。这⾥仅仅体现⼀种概念上的含义。在创建ClassA的时候,不⼀定需要同时创建ClassB的实例。
4. 组合(Composition)
在uml中,组合关系表⽰为实⼼菱形箭头线。组合也叫合成。合成关系强调了⽐聚合关系更加强的整体/部分的关联,例如⼈和四肢。和聚合关系所不同的是,在组合关系中,虽然局部不⼀定随着整体的销毁⽽销毁,但整体要么负责保持局部的存活状态,要么负责将其销毁。也就是说,组合关系中,局部的存活期⼀定是⼩于,最多是等于整体的存活期的。
下⾯是组合关系的uml⽰例图:
5. 泛化(Generalization)与实现(Realization)
泛化也就是通常所谓的继承关系,在uml中表⽰为⼀个带空⼼三⾓的实线。表⽰为is-a的关系,是对象间耦合度最⼤的⼀种关系,⼦类继承⽗类的所有细节,并可以在此基础上添加⾃⼰的特性。
下⾯是泛化关系的uml图:
销毁汽车所谓实现就是对接⼝的定义实现,很简单。表现为带箭头的虚线。下⾯的实现的uml图: