java中类的关系及UML中的表达

久未见 提交于 2019-12-04 04:18:42

一、6种关系(关联由强到若)

  泛化(也叫继承)=实现>组合>聚合>关联>依赖

1、泛化(或者继承)

泛化(generalization):简单来说就是继承关系is-a 也是四种关系中耦合度最大的一种,通常我们在绘制UML类图的时候,子类以带三角箭头的实线指向父类,比如下面的UML类图中的MainActivity指向父类抽象类。

 

如:HashMap继承AbstractMap

 

 

 

2、实现

实现(Realization):在类图中就是接口和实现的关系。在UML类图中使用带三角箭头的虚线表示,箭头从实现类指向接口。如下图所示MainActivity实现了ICallBack这个接口:

 

如:HashMap实现Serializable、Cloneable、Map

 

 

 

3、组合

组合 (Composition) : 是关联关系的特例,表示contains-a的关系,是一种强烈的包含关系。组合类负责被组合类的生命周期。是一种更强的聚合关系。部分不能脱离整体存在。如公司和部门的关系,没有了公司,部门也不能存在了;调查问卷中问题和选项的关系;人和大脑的关系。在类图使用实心的菱形表示,菱形与整体连接。如下UML类图所示:( 注:组合关系中的成员变量一般会在构造方法中赋值。)

 

 

 

4、聚合

聚合(Aggregation):也是关联关系的特例,表示has-a关系,是一种不稳定的包含关系。较强于一般关联,有整体与局部的关系,并且没有了整体,局部也可单独存在。比如说员工和公司,员工可以独立存在,就算是公司倒闭了,员工还可以换工作。在类图使用空心的菱形表示,菱形与整体连接。如下UML类图所示:(注:聚合关系中作为成员变量的类一般使用set方法赋值

 

 

5、关联

关联(Association)关系是类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对象之间有联系,通常是属性的存在,如汽车和轮胎、师傅和徒弟、班级和学生等等。

关联可以使用单箭头实线表示单向关联,使用双箭头实线或者实线表示双向关联,不建议使用双向关联,关联有两个端点,每个端点可以有一个基数,表示这个关联的类可以有几个实例。

0..1 表示可以有0个或者1个实例

0..* 表示对实例的数目没有限制

1     表示只能有一个实例

1..* 表示至少有一个实例

关联关系还有以下分类:( 注:关联关系中作为成员变量的类一般会在类中赋值  )

 2.1.双向关联:默认情况下,关联是双向的。比如说顾客和购买的商品,顾客拥有商品,并且被购买的商品持有顾客。顾客和商品之间属于双向关联关系。在类图中使用两端带箭头的实线表,如下UML类图所示

 

 

 

2.2 单向关联:

类的关联关系也可以是单向的,单向关联用带箭头的实线表示。例如:动物园(Zoo)拥有猴子(Monkey),则Zoo类与Monkey类具有单向关联关系。如下UML图所示,

 

 

 

 

 

2.3自关联,在系统中可能会存在一些类的属性对象类型为该类本身,这种特殊的关联关系称为自关联。例如:一个节点类(Node)的成员又是节点Node类型的对象。如下UML图所示:

 

 

 6、依赖

依赖(Dependency):表示一个类依赖于另外一个类的定义,依赖关系时是单向的。简单理解就是类A使用到了类B,这种依赖具有偶然性、临时性,是非常弱的关系。代码中一般指由局部变量、函数参数、返回值建立的对于其他对象的调用关系。一个类调用被依赖类中的某些方法而得以完成这个类的一些职责。在UML类图使用带箭头的虚线表示,箭头从使用类指向被依赖的类。如下UML图:Presenter依赖于ICallBack,以requestModel这个方法的参数来建立和Presenter依赖联系。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!