在今天的这篇博文中,我来向大家介绍一下在UML学习中四大关系:关联关系(普通关联关系/聚合关系/组合关系)、依赖关系、泛化关系、实现关系。这些关系集中体现在UML中的类与类、类与接口、接口与接口之间的相互联系中。
依赖(Dependency)关系:
1.UML表示法:虚线+箭头
2.关系:“…use a …”
3.解释:是类与类之间连接的一种,表示一个类依赖于另一个类的定义。简单的理解,就是一个类A使用了另一个类B,类B只是作为一个工具被A使用。
4.释义:一个人想要过河,但是需要一条船,那么人要想过河就得依赖一条船的作用,所以此时人与船之间的关系就是依赖;
泛化(Generalization)关系:
1.UML表示法:实线+空心箭头
2.关系: “…is kind of…”
3.解释:也称继承关系,是一个类(称为子类/子接口)继承另外的一个类(称为父类/父接口)的功能。继承是类与类或者接口与接口之间最常见的关系;
4.释义:汽车是交通工具的一种,也就是汽车类继承了交通工具类。此时汽车与交通工具之间的关系就是继承。
实现(Realization)关系:
1.UML表示法:虚线+空心箭头
2.关系:“…realize…”
3.解释:指的是一个class类实现interface接口(可以是多个)的功能,实现是类与接口之间最常见的关系。也就是元素A定义一个约定,元素B实现这个约定,则A与B的关系即为实现:Brealize A。
4.释义:人要参加一个活动,就必须遵守这个活动的一些约定,比如用餐。
关联(Association)关系:
一.基本关联(Association)关系:
1.UML表示法:实线+箭头
2.关系:“…has a…”
3.解释:表示类与类之间的联接,所谓的关联就是某个对象会长期的持有另一个对象的引用,使一个类知道另一个类的属性和方法,而二者的关联往往也是相互的。但是关联的两个对象彼此间没有任何强制性的约束。可以用单双箭头表示单向或双向关联,不建议使用双向关联。在关联的两个端点,每个端点可以有一个基数,表示这个关联的类可以有几个实例。
常见的基数及含义:
0..1…0或者1个实例
0..*…对实例的数目没有限制
1…只能有一个实例
1..*…至少有一个实例
4.释义:一个人可以有很多朋友,然而没有理由认为朋友的生死与我的生死有必然的联系,所以他们的生命期没有关联,而且我的朋友又可以是别人的朋友。
二.聚合(Aggregation)关系:
1.UML表示法:空心菱形+实线+箭头
2.关系:整体-部分
3.解释:是强的关联关系,是整体和个体之间的关系,但是整体与部分之间是可以分离的,有各自的生命周期,部分可以属于多个整体对象
4.释义:比如机器和引擎,计算机和CPU,公司与员工之间的关系。
三.组合(Composition)关系:
1.UML表示法:实心菱形+实线+箭头
2.关系:“…is a partof…”
3.解释:是比聚合关系还强的一种关联关系,也是整体和部分的关系,但是代表整体的对象负责代表部分的对象的生命周期。如果整体不存在,则部分一定不存在。即部分不可以脱离整体而存在。
4.释义:比如List和node,没有List则node不复存在。或者人与其大脑。
至此,在UML中所涉及到的各种关系都已经讲述完毕,这样看来各种关系在类别上可以分为两种:纵向关系和横向关系,纵向关系就是继承关系,概念非常明确;横向关系就比较微妙,按照UML的建议大体上可以分为四种:依赖(Dependency),关联(Association),聚合(Aggregation),组合(Composition)。
他们之间的强弱关系是没有异议的:依赖<关联<聚合<组合。
然而他们之间的差别却需要我们好好体会,在实践中长经验。
原文:http://blog.csdn.net/guolimin1992/article/details/19291925