UML中包括六中关系。各自是:关联(Association)、聚合(Aggregation)、组合(Composition)、泛化(Generalization)、依赖(Dependency)、实现(Realization)

一、

1关联关系(Association)

关联关系表示两个类之间存在某种语义上的联系。比如,一个人为一家公司工作,一家公司有很多办公室。我们就觉得人和公司、公司和办公室之间存在某种语义上的联系。

关联关系提供了通信的路径。它是全部关系中最通用、语义最弱的。在UML中。用一条实线表示关系关系。比如:

关联关系中,有两种比較特殊的关系:聚合和组合。

1.2聚合关系(Aggregation)

聚合关系是一种特殊形式的关联。聚合表示类之间的关系是总体与部分的关系。聚合关系的含义是“聚”在一起的意义。也就是表示“部分”能够独立于“总体”而存在。

在UML模型中用一个空心菱形的实线表示,空心菱形指向的是代表“总体”的类。如

1.3组合关系()

假设发现“部分”类的存在是全然依赖于“总体”类的,那么就应该用“组合”关系来描写叙述。

也就是组合关系比聚合关系更强,也称为强聚合。

此时总体和部分是不可分的。总体的生命周期结束意味着部分的生命周期结束。在UML模型中。组合关系是用带有实心菱形的实线表示的。实心菱形指向的方向是代表“总体”类。如易于理解的样例“订单”与“订单项”之间的关系。假设订单不存在,订单项也就没有意义了,因此必定是组合关系。如图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenN4NzAx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">、

2泛化关系(Generalization)

泛化关系描写叙述的一般事物与该事物中特殊种类之间的关系,也就是父类与子类之间的关系。继承关系是泛化关系的反关系,也就是说子类是从父类中继承的。而父类则是子类的泛化。

在UML中,对泛化关系有3个要求:

1)子类应与父类全然一致,父类所具有的关联、属性和操作。子类应都具有。

2)子类中除了与父类一致的信息外,还包含额外的信息。

3)能够使用父类实例的地方。也能够使用子类实例。

在UML模型中。用带空心箭头的实线表示,箭头指向父类。泛化关系基本上是由事物本身的特性决定的。比如,“动物”和“哺乳动物”、“卵生动物”之间是泛化关系。

3实现关系()

实现关系是用来规定接口和实线接口的类或组件之间的关系。接口是操作的集合。这些操作用于规定类或组件的服务。换言之,实线关系指定两个实体之间的一个合同,一个实体定义了一个合同。而还有一个实体履行该合同。如

4依赖关系(Dependency)

有两个元素X、Y,假设改动元素X的定义可能会引起对还有一个元素Y的定义的改动。责成元素Y依赖于元素X。

在UML中,用带箭头的虚线表示依赖关系。依赖关系是一种偶然性的、暂时性的很弱的关系。比如某人想过河,须要借用一条船。此时人和船就是依赖关系。如图

二比較

组合和聚合:组合和聚合的应用要依据应用场景来推断部分类和总体类之间的关系。

比如:“电脑”是一个总体类,而“主板”是一个总体类。而“主板”、CPU等则是相对于它的部分类。那它们之间关系是总体类还是部分类?假设是在固定资产管理系统中。可能适合的就是“组合”。而假设对于在线的DIY系统,两者之间显然是“聚合”关系。因此

推断是聚合还是组合关系,关键在于要放到详细的应用场景中讨论。

综合:关联关系中两个类处于同一等级上,而聚合和组合关系中两个类处于不同等层上。从某种意义上来说,前面说的关联和泛化以及实现关系都属于依赖关系的一种。可是它们有更具特别的语义和影响,因此定义了其自己的名字和具体的语义。整体来说,几种关系

组合>聚合>关联>依赖

在作图时应尽量使用较强关系,这样表达也更准确。

【UML】具体解释六种关系的更多相关文章

  1. UML中的六种关系的比较与学习

    通过不断的学习并绘制UML图,整个画图的过程中深刻体会到其核心部分还是理解事物之间的关系,总结六大关系来深入学习,主要关系有六种:继承.实现.依赖.关联.聚合.组合. 区别于联系:         1 ...

  2. [Java学习]面向对象-package;内部类;UML图表示六种关系

    package 软件包 类名前加入命名空间(包),解决命名冲突问题. 定义格式:公司域名倒叙.项目名.模块名; package语句写在文件第一行 使用import语句导入package java.la ...

  3. UML类图六种关系的总结

    在UML类图中,常见的有以下几种关系: 泛化(Generalization):继承的关系,实线带三角形箭头,指向父类. 实现(Realization):实现的关系,虚线带三角形箭头,指向接口. 关联( ...

  4. UML中的六种关系

    设计模式是一种对于面向对象语言(C#,C++,Java)的高级应用.其思维体现出的是真正的代码设计.每一种模式都堪称巧妙!但基于各种设计模式,这里少不了基本的类图设计,本文简要列出6种关系,及相关的例 ...

  5. 我所理解的OOP——UML六种关系

    最近由于经常给公司的小伙伴儿们讲一些OOP的基本东西,每次草纸都被我弄的很尴尬,画来画去自己都乱了,有时候也会尝试使用UML表示类之间的关系,但UML从毕业后就再也没接触过了,经常会被小伙伴儿们指出继 ...

  6. OOP——UML六种关系

    UML定义的关系主要有:泛化.实现.依赖.关联.聚合.组合,这六种关系紧密程度依次加强,分别看一下 泛化 概念:泛化是一种一般与特殊.一般与具体之间关系的描述,具体描述建立在一般描述的基础之上,并对其 ...

  7. (转)我所理解的OOP——UML六种关系

    原文地址:http://www.cnblogs.com/dolphinX/p/3296681.html 最近由于经常给公司的小伙伴儿们讲一些OOP的基本东西,每次草纸都被我弄的很尴尬,画来画去自己都乱 ...

  8. 我所理解的OOP——UML六种关系(转)

    转自:http://www.cnblogs.com/dolphinX/p/3296681.html 最近由于经常给公司的小伙伴儿们讲一些OOP的基本东西,每次草纸都被我弄的很尴尬,画来画去自己都乱了, ...

  9. UML的六种关系

    UML定义的关系主要有:泛化.实现.依赖.关联.聚合.组合,这六种关系紧密程度依次加强,分别看一下 泛化 概念:泛化是一种一般与特殊.一般与具体之间关系的描述,具体描述建立在一般描述的基础之上,并对其 ...

随机推荐

  1. 初识HTTP 1.1与HTTP 1.0

    HTTP 1.1与HTTP 1.0的比较 一个WEB站点每天可能要接收到上百万的用户请求,为了提高系统的效率,HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个 ...

  2. c/c++工程中外部头文件及库添加方法

    在VS工程中,添加c/c++工程中外部头文件及库的基本步骤: 1.添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录:加上头文件存放目录. 2.添加文件引用 ...

  3. 【Python学习笔记】集合

    概述 集合的一般操作 内建函数进行标准操作集合 数学运算符进行标准操作集合 集合的应用 概述 python的集合(set)是无序不重复元素集,是一种容器.集合(set)中的元素必须是不可变对象,即可用 ...

  4. iOS9对SDK的影响(iOS9适配必看)

      1.大部分社交平台接口不支持https协议. 问题描述:在iOS9下,系统默认会拦截对http协议接口的访问,因此无法获取http协议接口的数据.对ShareSDK来说,具体表现可能是,无法授权. ...

  5. ASP.NET 管道事件与HttpModule, HttpHandler简单理解 -摘自网络

    第一部分:转载自Artech  IIS与ASP.NET管道 ASP.NET管道 以IIS 6.0为例,在工作进程w3wp.exe中,利用Aspnet_ispai.dll加载.NET运行时(如果.NET ...

  6. Struct2提交表单数据到Acion

    Struct2提交表单数据到Action,Action取表单的数据,传递变量.对象 HTML.jsp <form action="reg.do" method="p ...

  7. 老 base64 for xe8

    not recommend ,only for study procedure TForm1.Button3Click(Sender: TObject); var ssi, sso: TStringS ...

  8. Windows 2003 服务器安全设置-批处理 (附参考链接)

    长期维护windows服务器终结出来的安全设置批处理与大家分享,复制以下全部内容用记事本另存为bat或者cmd执行 ===================分隔符号=================== ...

  9. 递归遍历树结构顺序显示并且添加到list集合

    /// <summary> /// 给流程排序 by 于連偉 2015/06/15 /// </summary> /// <param name="lstNex ...

  10. Qt Creator无法用“UTF-8”编码解码

    在Qt Creator 里打开其他编辑器的代码时有时会提示: 无法用"UTF-8"编码解码     在文件上右键使用NotePad++编辑器打开:     选择->格式-&g ...