什么是UML类图?

类图显示了一组类、接口、协作以及他们之间的关系。在UML中问题域最终要被逐步转化,通过类来建模,通过编程语言构建这些类从而实现系统。类加上他们之间的关系就构成了类图,类图中还可以包含接口、包等元素,也可以包括对象、链等实例。

类与类之间的关系

类与类之间的关系可以根据关系的强度依次分为以下五种:

依赖关系(Dependency)---关联关系(Association)---聚合(Aggregation)---组合(Composition)---泛化(Generalization)

1. 依赖关系

依赖关系是五种关系中耦合最小的一种关系。使用虚线加箭头表示,如下图所示:

代码:

  1. class Person
  2. {
  3. public void Call()
  4. {
  5. Phone phone = new Phone();
  6. }
  7. }
  1. class Phone
  2. {
  3. }

解释:Person 和 Phone之间是没有关系的,但是由于偶尔的需要,Person需要使用Phone,在Person类中的具体方法中需要实例化Phone,这时Person就依赖于Phone.持有Phone类的是Person类的一个方法,而不是Person类,这点是最重要的。

依赖表现为:局部变量,方法中的参数和对静态方法的调用。

2. 关联关系

关联关系是实线加箭头表示。表示类之间的关系比依赖要强,如下图所示:
代码:
  1. class Person
  2. {
  3. public:
  4. //头部是人的一个属性
  5. Head head;
  6. Person()
  7. {
  8. // TODO Auto-generated constructor stub
  9. }
  10. }
  1. class Head
  2. {
  3. public:
  4. Head()
  5. {
  6. // TODO Auto-generated constructor stub
  7. }
  8. }
解释:Head是作为Person类的一个内部属性来使用,一旦实例化了Person类,同时也实例化了一个Head实例,所以他们的依赖性更强。与关联最大的区别是:依赖时是在类的内部具体方法中使用到另外一个类,而关联则是作为内部属性来用,依赖关系仅当具体方法被调用时才会实例化,比如刚才的Person只有打电话时才调用Phone实例化,而关联是在new一个Person时就同时实例化了一个Head类来作为Person的内部属性.

3. 聚合关系

聚合关系通过一个空心的菱形加箭头表示,如下图所示:
代码:
  1. class PersonGroup
  2. {
  3. public:
  4. Person person;
  5. //将person作为构造方法的参数传进去
  6. PersonGroup(Person person)
  7. {
  8. // TODO Auto-generated constructor stub
  9. this.person = person;
  10. }
  11. }
  1. class Person
  2. {
  3. public:
  4. Person()
  5. {
  6. // TODO Auto-generated constructor stub
  7. }
  8. }
解释:Person类是PersonGroup构造方法的参数,因此可以Person类可以完全脱离PersonGroup类而存在,不会因为PersonGroup实例的消亡而消亡,就像现实生活中,人不会因为脱离人群就挂了...

4. 组合关系

组合关系通过一个实心的菱形加箭头表示,如下图所示:
代码:
  1. class Person
  2. {
  3. public:
  4. Foot foot;
  5. Person()
  6. {
  7. // TODO Auto-generated constructor stub
  8. //在构造方法中实例化
  9. foot = new Foot();
  10. }
  11. }
  1. class Foot
  2. {
  3. public:
  4. Foot()
  5. {
  6. // TODO Auto-generated constructor stub
  7. }
  8. }
解释:
Foot类是在Person类的构造方法中才被具体实例化,一旦Person实例生成,则Foot实例也生成,当Person实例消亡,其Foot实例也消亡,就像现实生活中,生成一个人,并定会伴随着脚的生成,但是如果那个人挂了,它的脚自然而然也就没了。

5. 泛化关系

泛化关系通常包含类与类之间的继承关系和类与接口实现关系,如下图所示:
继承:
接口:
 解释:

泛化(generalization)关系是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系

 

UML类图表达的更多相关文章

  1. UML类图关系全面剖析

    UML的类图关系分为: 关联.聚合/组合.依赖.泛化(继承).而其中关联又分为双向关联.单向关联.自身关联:下面就让我们一起来看看这些关系究竟是什么,以及它们的区别在哪里. 1.关联 双向关联:C1- ...

  2. UML类图的6大关系

    <小酌重构系列>已经完成了大约1/3了,在这些文章中,我使用了一些简单的类图来描述重构策略.在之后的文章中,我可能会借助稍微复杂一些的UML类图来介绍.但是在此之前,我觉得有必要先介绍一下 ...

  3. UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)

    UML类图关系(泛化 .继承.实现.依赖.关联.聚合.组合) 继承.实现.依赖.关联.聚合.组合的联系与区别 分别介绍这几种关系: 继承 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父 ...

  4. 【转】UML类图与类的关系详解

    UML类图与类的关系详解   2011-04-21 来源:网络   在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Realization).依赖(D ...

  5. [转载]UML类图总结

    前言 类图和序列图是UML中最常用的两种Diagram.我将做详细的总结.在许多书中,或者网站中,在介绍一个系统的子系统的设计时,很多时候,都是给出简单的类图来简述构成子系统的类之间的关系.这足以说明 ...

  6. UML类图归纳

    作为一个程序员,掌握UML类图是开发和阅读程序的基础. 转载请注明地址http://www.cnblogs.com/zrtqsk/p/3739288.html,谢谢! 一.基本介绍 UML是一种标准的 ...

  7. 看懂UML类图与时序图

    看懂UML类图和时序图 这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系: 能看懂类图中各个类之间的线条.箭头代表什么意思后,也就足够应对 日常的工作和交流: 同时,我们应该能将类图 ...

  8. 设计模式——1.概述&UML类图和时序图

    声明:本博客设计模式相关文章均整理和修改自网络,原文地址:图说设计模式 学习设计模式的3个层次—— 1.熟悉所有设计模式: 2.能够用代码实现: 3.运用到工作的项目中. 设计模式指导软件开发,学习设 ...

  9. UML类图几种关系的总结(转)

    原文:http://gjhappyyy.iteye.com/blog/1422515 在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization), ...

随机推荐

  1. console控制台的小问题

    第一个foo里面应该是123,但是当执行完下面的代码之后,console控制台会自动将里面的内容改成我们修改之后的

  2. Mac 上有哪些值得推荐的软件?冷门小众软件但实用

    确实Mac上有很多小众.冷门,但却是十分实用.值得推荐的工具,小编针对用的比较多的软件,整理了一些,希望有帮助. The Unarchive:解压缩工具 macOS 对于压缩文件的处理不是很好.如果你 ...

  3. RFM模型

    python信用评分卡(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_camp ...

  4. 【JS】js将 /Date(1518943415760+0800)/ 转换为2018-2-18 16:43:35格式

    function formatDate(dt) { var year = dt.getFullYear(); var month = dt.getMonth() + 1; var date = dt. ...

  5. 解决 Ubuntu 经常 卡死

    ubuntu 的卡死可能与显卡驱动不兼容有关. 这里提供2种方式, 1.禁用原来自带的nouveau显卡驱动sudo gedit /etc/modprobe.d/blacklist.conf在最后一行 ...

  6. 【leetcode-75】 颜色分类

    (1过,解法不好,看參考荷兰国旗问题解法) 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0 ...

  7. ZOJ - 3261 Connections in Galaxy War(并查集删边)

    https://cn.vjudge.net/problem/ZOJ-3261 题意 银河系各大星球之间有不同的能量值, 并且他们之间互相有通道连接起来,可以用来传递信息,这样一旦有星球被怪兽攻击,便可 ...

  8. 声源测向: TDOA-GCC-PATH方法

    收藏链接: http://www.funcwj.cn/2018/05/10/gcc-phat-for-tdoa-estimate/

  9. Golang入门教程(三)beego 框架安装

    beego 是一个快速开发 Go 应用的 HTTP 框架,他可以用来快速开发 API.Web 及后端服务等各种应用,是一个 RESTful 的框架,主要设计灵感来源于 tornado.sinatra ...

  10. spring中整合memcached,以及创建memcache的put和get方法

    spring中整合memcached,以及创建memcache的put和get方法: 1:在项目中导入memcache相关的jar包 2:memcache在spring.xml的配置: 代码: < ...