文档章节

UML类图符号理论

算法与编程之美
 算法与编程之美
发布于 2016/02/18 14:34
字数 1080
阅读 1.6K
收藏 16

「深度学习福利」大神带你进阶工程师,立即查看>>>

0. 前言

相信大家在学习UML类图的时候,最大的困难可能来自两个方面:

  • 类图中各种关系的区别;
  • 多种关系的符号记忆容易混淆;

本着"Do one thing and do it well."的原则,本文不介绍UML类图中各种关系的区别。而重在介绍UML类图的符号理论,以及利用该理论帮助大家更好的记忆。

1. 准备

在开始阅读本文之前,你需要了解的知识有:

  • UML类图的概念;
  • UML类图有几种关系;
  • 各种关系的强弱;

2. UML类图符号理论基础

UML类图主要有以下几种关系:

  • 泛化 Generalization
  • 实现 Realization
  • 组合 Composition
  • 聚合 Aggregation
  • 关联 Association
  • 依赖 Dependency

以上这六种关系的强弱是:

泛化 > 实现 > 组合 > 聚合 > 关联 > 依赖

这六种关系,每一种都对应着一个符号。加起来就有六种符号,要想在较短的时间内记住这六种符号而且不产生混淆是一件不太容易的事情。那么该如何更有效的来记忆这些符号?

接下来我们将首先认识一下关于符号的基础知识。

2.1 类图符号基础知识

首先我们从整体上来认识一下表达类图关系的符号,类图关系的符号由三部分组成:箭头、线条和箭尾。

输入图片说明

  • 箭头形状有两种,分别为箭头和三角箭头。

输入图片说明

  • 线条形状有两种,分别为实线和虚线。

输入图片说明

  • 箭尾形状有三种,分别为点、空心菱形和实心菱形。

输入图片说明

综上,我们可以得知表达类图关系的符号一共有2 x 2 x 3 = 12种,但是UML类图中只有6种关系,所以还剩下6种关系未被使用。

在了解类图关系的符号表达之后,我们来看一下符号的优先级关系。

2.2 符号优先级

从关系符号的组成来看,我们定义以下优先级关系:

箭头 > 箭尾 > 线条
  • 对于箭头:
三角箭头 > 箭头
  • 对于箭尾:
实心菱形 > 空心菱形 > 点
  • 对于线条:
实线 > 虚线

所以,从上述优先级我们不难得出:

三角箭头+实线 > 三角箭头+虚线 > 箭头+实心菱形 > 箭头+空心菱形 > 箭头+实线 > 箭头+虚线

上面的六种符号就是UML类图中定义的六种关系符号表达。

3. 应用

我们可以利用上述符号理论,轻松记忆UML的类图关系符号。具体的记忆方法如下:

  • 了解各种关系的强弱排序;
  • 了解符号的优先级关系;

类图关系符号一共有6个,我们分成3组,每组2个来记忆。

首先来记忆箭头:

  • 三角箭头 + 实线
  • 三角箭头 + 虚线

这两种分表表示泛化和实现。

接下来记忆箭尾:

  • 实心菱形 + 实线
  • 实心菱形 + 虚线 分别表示组合和聚合。

最后我们来记忆线条:

  • 箭头 + 实线
  • 箭头 + 虚线 分别表示关联和依赖。

有了这样的分组和符号优先级关系,我们就能很轻松的记忆UML类图关系,从此不再混淆,而且印象深刻。

4. 总结

本文主要介绍了UML类图符号的基础知识,并利用该基础知识帮助大家更好的记忆UML类图关系符号。

从UML类图符号基础知识,我们分析得出一共有12种符号,但是UML类图关系只使用了6种,剩下的其他6种如下:

  • 三角箭头 + 实心菱形 + 实线

  • 三角箭头 + 实心菱形 + 虚线

  • 三角箭头 + 空心菱形 + 实线

  • 三角箭头 + 空心菱形 + 虚线

  • 箭头 + 实心菱形 + 虚线

  • 箭头 + 空心菱形 + 虚线

如果今后UML需要定义新的类图关系,则可以参考上述符号理论,使用上述6种符号。

5. 相关资料

算法与编程之美
粉丝 301
博文 366
码字总数 391876
作品 0
成都
程序员
私信 提问
加载中
此博客有 3 条评论,请先登录后再查看。
浅入浅出Android(003):使用TextView类构造文本控件

基础: TextView是无法供编辑的。 当我们新建一个项目MyTextView时候,默认的布局(/res/layout/activity_main.xml)中已经有了一个TextView: <TextView 运行效果如下: 修改其文本内容...

樂天
2014/03/22
686
1
Swift百万线程攻破单例(Singleton)模式

一、不安全的单例实现 在上一篇文章我们给出了单例的设计模式,直接给出了线程安全的实现方法。单例的实现有多种方法,如下面: class SwiftSingleton { } 这段代码的实现,在shared中进行条...

一叶博客
2014/06/20
3.5K
16
C++的JSON解析类--JSONVALUE

Jsonvalue 是 C++ 的 JSON 类,用来解析 JSON 到 C++ 对象,也可将对象转成 JSON 字符串。支持 ANSI 和 Unicode。特点: 严格和松散模式 不同数据类型 简单 API 仅依赖 STL 示例代码: JSON...

匿名
2013/03/10
3K
1
NGUI学习基于NGUI的序列帧动画制作

首先导入NGUI包,由于我是在NGUI的基础上进行了简单的扩展。所以还要额外加上几个需要用到的类。我就从新把自己新加的方法放在NGUI中打包。 导入NGUI包以后可以看到有这一个菜单。 创建一个序...

orientalfashion
2013/05/28
5.2K
1
JCF框架源码分析系列-ArrayList(二)

1、揭开ArrayList真面目 作者将在本文详细赘述日常开发中最常用集合类-ArrayList,本次JCF源码分析基于JDK1.7,主要从以下几个方向分析: UML类图关系 数据结构 接口介绍 常用、重要方法的实...

Ambitor
2015/11/30
385
0

没有更多内容

加载失败,请刷新页面

加载更多

MySQL索引相关

一、索引分类 1、单列索引 1.1、主键索引(不能包含空值) 1.2、唯一索引(可以包含kong'zhi) 1.3、普通索引 2、多列索引 2.1、组合索引 3、全文索引 3.1、全文索引只针对大文本字段有效,比如:...

城里的月光
今天
21
0
二级分销的理解

人人商城分销定义 例如: 分销商:A、B、C、D、E 群体1:A是B的上级分销商,B是C的上级分销商,C是D的上级分销商,则他们分销层级是:A是一级分销商,B是二级分销商,C是三级分销商 群体2:B...

红翼网
今天
6
0
HBase/TiDB都在用的数据结构:LSM Tree,不得了解一下?

LSM Tree(Log-structured merge-tree)广泛应用在HBase,TiDB等诸多数据库和存储引擎上,我们先来看一下它的一些应用: 这么牛X的名单,你不想了解下LSM Tree吗?装X之前,我们先来了解一些...

Monica2333
今天
26
0
Linux下如何高效切换目录?

Linux 下对于目录的切换,大家肯定会想到一个命令:cd 命令。这个是 Linux 下再基本不过的命令,如果这个命令都不知道的话,赶紧剖腹自尽去吧。 cd 命令确实很方便,但如果需要频繁在下面的目...

良许Linux
今天
45
0
限流算法

1 计数算法 2 滑动窗口 (可以解决计数算法 临界线 QPS超过限流问题) 3 漏桶算法 4 令牌桶算法

yzzzzzzzz
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部