文章目录
在UML中共有6种关系:
依赖(Dependency)
继承(泛化)(Generalization)
实现(Realization)
组合(Composition)
聚合(Aggregation)
关联(Association)
强弱关系:泛化(继承) = 实现 > 组合 > 聚合 > 关联 > 依赖
UML6种关系的模型与实现:
1.泛化(继承)关系
(1)泛化的定义
指一个类(子类、子接口)继承另外一个类(称为父类、父接口)的功能,并可以增加它自己新功能的能力,继承是类与类或者接口与接口最常见的关系,在Java中通过关键字extends来表示。
(2)泛化关系的模型
泛化(继承)用一个带三角形的直线连接,指向父类。
(3)泛化关系的Java代码实现
鸟这个类继承animal这个类,使用extends这个关键字,子类可以调用父类的方法和属性(私有的不行)。
2.实现关系
(1)实现关系定义
是指一个class实现interface接口(一个或者多个),表示类具备了某种能力,实现是类与接口中最常见的关系,在Java中通过implements关键字来表示。
(2)实现关系的模型
大雁具有飞翔的功能,也就是说实现了飞翔的接口,是一种能力能力的提现。使用虚线三角箭头。
(3)实现关系的Java代码实现
使用implements关键字实现接口类,可以重写接口的方法。
3.依赖关系
(1)依赖关系的定义
是表示类与类之间的连接,表示一个类依赖于另外一个类的定义,依赖关系时是单向的。简单理解就是类A使用到了类B,这种依赖具有偶然性、临时性,是非常弱的关系。但是类B的变化会影响到类A。举个例子,如某人要过河,则人与船的关系就是依赖,人过河之后,与船的关系就解除了,因此是一种弱的连接。在代码层面,为类B作为参数被类A在某个方法中使用。
(2)依赖关系的模型
动物依赖于氧气和水,使用虚线箭头表示。
(3)依赖关系的Java代码实现:
1.在依赖类的方法的参数用使用被依赖类作为形参从而实现某种特定功能,例如,动物的新陈代谢方法中需要被依赖类Water 和Oxygen。
2.在依赖类的方法中创建依赖类的对象并使用。
4.关联关系
(1)关联关系的定义
表示类与类之间的连接,它使得一个类知道另外一个类的属性和方法。
关联可以使用单箭头表示单向关联,使用双箭头或者不适用箭头表示双向关联,不建议使用双向关联,关联有两个端点,每个端点可以有一个基数,表示这个关联的类可以有几个实例。
0…1 表示可以有0个或者1个实例
0…* 表示对实例的数目没有限制
1 表示只能有一个实例
1…* 表示至少有一个实例
关联关系体现的是两个类,或者类与接口之间的强依赖关系,这种关系很强烈,比依赖更强,不是偶然性的,也不是临时性的,而是一种长期性,相对平等的关系,表现在代码层面,为被关联的类B以类属性的形式出现在类A中,也可能是关联类A引用了被关联类B的全局变量。
(2)关联关系的模型
唐老鸭与鸭子是双向关联
企鹅与气候是单向关联
用实线箭头表示
(3)关联关系的Java实现
5.聚合关系
(1)聚合关系的定义
是关联关系的特例,是强的关联关系,聚合是整个与个体的关系,即has-a关系,此时整体和部分是可以分离的,他们具有各自的生命周期,部分可以属于多个对象,也可以被多个对象共享;
(2)聚合关系的模型
大雁与雁群是聚合关系
使用实线菱形表示,且菱形指向被聚合的。
(3)聚合关系的Java实现
6.组合关系
(1)组合关系的定义
也是关联关系的一种特例,体现的是一种contain-a关系,比聚合更强,是一种强聚合关系。它同样体现整体与部分的关系,但此时整体与部分是不可分的,整体生命周期的结束也意味着部分生命周期的结束,反之亦然。如大脑和人类。
(2)组合关系的模型
组合关系使用实线实心菱形表示
且部分指向整体
(3)组合关系的Java实现