四种UML类图关系简明介绍

开发 架构
UML中有五类图,你对每种图的特点和作用是否熟悉,这里就向大家介绍一下UML类图关系,相信通过本文的学习你对UML类图关系一定会有明确的认识。

本节向大家介绍一下UML类图关系,UML类图中的关系分为四种:泛化、依赖、关联、实现;关联关系又可以细化为聚合和组合。下面就让我们一起来看一下UML类图关系的详细介绍吧。

UML类图关系

UML类图关系分为四种:泛化、依赖、关联、实现;关联关系又可以细化为聚合和组合。

1.泛化(Generalization)

泛化是父类和子类之间的关系,子类继承父类的所有结构和行为。在子类中可以增加新的结构和行为,也可以覆写父类的行为。

一般化关系表示类与类、接口与接口之间的继承关系。关系中的箭头由子类指向父类。在Java中,用extends关键字来直接表示这种关系。

例:
publicabstractclassEmployee{
}
publicclassProgrammerextendsEmployee{
}

2.依赖(Dependency)

UML类图关系中依赖关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的事物,反之不成立。在你想显示一个事物使用另一个事物时使用。

通常情况下,依赖关系体现在某个类的方法使用另一个类作为参数。

依赖:对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务(方法函数)时,这两个对象之间主要体现为依赖关系。

[具体表现]
依赖关系表现在1.局部变量(Question:这里指的是方法的局部变量,还是类的成员变量,还是都是???),2.方法的参数,3.以及对静态方法的调用
[现实例子]
比如说你要去拧螺丝,你是不是要借助(也就是依赖)螺丝刀(Screwdriver)来帮助你完成拧螺丝(screw)的工作
[UML表现](图1.2)
dependency

图1.2Person类与Screwdriver类的依赖关系

[代码表现]
publicclassPerson{

publicvoidscrew(Screwdriverscrewdriver){
screwdriver.screw();
}
}

3.关联(Association)

UML类图关系中关联是一种结构化的关系,指一种对象和另一种对象有联系。给定有关联的两个类,可以从一个类的对象得到另一个类的对象。关联有两元关系和多元关系。两元关系是指一种一对一的关系,多元关系是一对多或多对一的关系。一般用实线连接有关联的同一个类或不同的两个类。当你想要表示结构化关系时使用关联。

关联关系是通过类的成员变量来实现的。

3.1聚合(Aggregation)

UML类图关系中聚合是一种特殊的关联。它描述了“hasa”关系,表示整体对象拥有部分对象。
关联关系和聚合关系来语法上是没办法区分的,从语义上才能更好的区分两者的区别。聚合是较强的关联关系,强调的是整体与部分之间的关系。
聚合是关联的一种形式,代表两个类之间的整体/局部关系。聚合暗示着整体在概念上处于比局部更高的一个级别,而关联暗示两个类在概念上位于相同的级别。
与关联关系一样,聚合关系也是通过类的成员变量来实现的。#p#

3.2组合(Composition)

UML类图关系中组合是聚合的一种形式,它具有更强的拥有关系,强调整体与部分的生命周期是一致的。整体负责部分的生命周期的管理。如果整体被销毁,部分也必须跟着一起被销毁,如果所有者被复制,部分也必须一起被复制。

与关联关系一样,组合关系也是通过类的成员变量来实现的。

UML类图关系中聚合和组合的区别在于:聚合关系是“has-a”关系,组合关系是“contains-a”关系;聚合关系表示整体与部分的关系比较弱,而组合比较强;聚合关系中代表部分事物的对象与代表聚合事物的对象的生存期无关,一旦删除了聚合对象不一定就删除了代表部分事物的对象。组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象。
我们用浅显的例子来说明聚合和组合的区别。“国破家亡”,国灭了,家自然也没有了,“国”和“家”显然也是组合关系。而相反的,计算机和它的外设之间就是聚合关系,因为它们之间的关系相对松散,计算机没了,外设还可以独立存在,还可以接在别的计算机上。在聚合关系中,部分可以独立于聚合而存在,部分的所有权也可以由几个聚合来共享,比如打印机就可以在办公室内被广大同事共用。

关联和聚合的区别主要在语义上,关联的两个对象之间一般是平等的,例如你是我的朋友,聚合则一般不是平等的,例如一个公司包含了很多员工,其实现上是差不多的。聚合和组合的区别则在语义和实现上都有差别,组合的两个对象之间其生命期有很大的关联,被组合的对象是在组合对象创建的同时或者创建之后创建,在组合对象销毁之前销毁。一般来说被组合对象不能脱离组合对象独立存在,而且也只能属于一个组合对象,例如一个文档的版本,必须依赖于文档的存在,也只能属于一个文档。聚合则不一样,被聚合的对象可以属于多个聚合对象,例如一个员工可能可以属于多个公司。

我想举个通俗的例子

你和你的心脏之间是composition关系(心脏只属于你自己)

你和你买的书之间是aggregation关系(书可能是别人的)

你和你的朋友之间是association关系

4.实现(Realization)

UML类图关系中实现关系指定两个实体之间的一个合约。换言之,一个实体定义一个合约,而另一个实体保证履行该合约。


类间关系有很多种,在大的类别上可以分为两种:纵向关系、横向关系。
纵向关系就是继承关系,它的概念非常明确,也成为OO的三个重要特征之一,这里不过多的讨论。

横向关系较为微妙,按照UML的建议大体上可以分为四种:

依赖(Dependency)

关联(Association)

聚合(Aggregation)

组合(Composition)

它们的强弱关系是没有异议的:依赖<关联<聚合<组合<泛化(继承)

在UML系统开发中有三个主要的模型:
功能模型:从用户的角度展示系统的功能,包括用例图。
对象模型:采用对象,属性,操作,关联等概念展示系统的结构和基础,包括类图。
动态模型:展现系统的内部行为。包括序列图,活动图,状态图。本节关于UML类图关系介绍到这里。

【编辑推荐】

  1. UML类图中的四种关系深入剖析
  2. UML类图元素全面剖析
  3. 实例讲解UML对象图使用
  4. 软件设计过程中面向对象UML技术如何使用
  5. UML建模基础教程
责任编辑:佚名 来源: sina.com.cn
相关推荐

2010-06-09 09:41:33

UML类图

2010-06-09 10:04:59

UML类图

2010-06-29 09:08:15

UML类图关系

2010-07-08 11:20:13

UML动态建模

2010-07-07 11:02:47

UML类图关系

2010-07-05 09:34:45

UML类关系图

2010-06-18 14:43:28

UML关系图

2010-07-05 09:48:00

UML类关系图

2010-06-12 18:30:57

UML类图关系

2010-07-08 15:56:52

UML类图依赖关系

2010-07-01 11:33:17

UML类图关系

2010-06-28 16:54:49

UML类图关系

2010-06-11 18:09:26

UML对象图

2010-06-29 12:55:44

UML类图依赖关系

2010-06-29 13:11:40

UML类图依赖关系

2010-07-09 10:45:11

UML类图关系

2010-07-08 15:28:39

UML类图依赖关系

2010-06-28 17:26:02

UML类图关系

2010-07-01 12:21:35

UML类图关系

2010-07-06 10:30:58

UML关系图
点赞
收藏

51CTO技术栈公众号