UML 类图介绍 转

一、基本概念

Unified Modeling Language (UML)又称统一建模语言或标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。

类图是描述类、接口以及类之间关系的图。

1.1 作用

类图常用来描述业务或软件系统的组成、结构和关系

1.2 类描述

类在 UML 中通常以实线矩形框表示。 矩形框中有若干分隔框,分别包含类名、属性、行为等元素。如下图:

类名:图中蓝色背景的字,如果字体为斜体,表名该类为抽象类 属性:类名下边的区域 行为:属性下边的区域 可见性:属性和行为前边的 "+"、"-" 和 "#"(图中未标注) 分别表示 public、private 和 protected

1.3 接口描述

接口的类图表述与类大致相同,不同的是接口名要添加 Interface 标识,且行为的可见性必须用 "+" 表示。如下图:

二、类图中的六种关系

  • 继承
  • 实现
  • 关联
  • 依赖
  • 组合
  • 聚合

2.1 继承(Inherit)

继承是面向对象语言的三个特性之一。子类继承父类,子类可以使用父类所有非私有的属性和方法,其UML类图表示如下:

UML 类图中继承关系使用空心三角形+实线表示。

2.2 实现(Realization)

实现与继承类似,实现类继承接口中的方法,但是方法必须由实现类自己实现,其UML类图表示如下:

UML 类图中实现关系使用空心三角形+虚线表示。

2.3 关联(Association)

指类与类之间的关系,它使得一个类知道另一个类的属性和方法。关联可以是双向的,也可以是单向的。

用 Java 代码表示企鹅只存在在南极,与气候有关系:

public class Penguin {
    private Climate climate;
}

其UML类图表示如下:

UML 类图中关联关系使用实线箭头表示。

2.4 依赖(Dependency)

指类与类之间的联接,依赖关系表示一个类依赖于另一个类的定义。一般而言,依赖关系在Java语言中体现为局域变量、方法的形参,或者对静态方法的调用。

用 Java 代码表示程序员工作需要用到电脑:

public class Programmer{
    public void work(Computer computer) {
        
    }
}

其UML类图表示如下:

UML 类图中依赖关系使用虚线箭头表示。

2.5 组合(Composition)

关联关系的一种,表示一种强的“拥有”关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。

用 Java 表示每只鸟都有翅膀:

public class Bird {
    private Wing wing;
    public Bird() {
        wing = new Wing();
    }
}

其UML类图表示如下:

UML 类图中组合关系使用实心菱形实线表示。

2.6 聚合(Aggregation)

关联关系的一种,表示一种弱的“拥有”关系,体现的是A对象可以包含B对象,但是B对象不是A对象的一部分。

用 Java 代码表示大雁是群居动物,每只大雁都属于一个雁群,一个雁群可以有多只大雁:

public class WildGooseAggregate {
    private List<WildGoose> wideGooses;
}

其UML类图表示如下:

UML 类图中聚合关系使用空心菱形实线表示。

三、参考资料

本文转载自:https://juejin.im/post/59c46e57f265da064a0f4294

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Leetcode名企之路

布隆过滤器

之前读吴军《数学之美》的时候提到布隆过滤器,觉得蛮有意思的,所以总结一下。 在计算机中,判断一个元素是不是在一个集合中,通常是用hash来解决,这在数据量不大的...

35510
来自专栏小二的折腾日记

LeetCode-52-N-Queens-II

只返回N皇后问题结果的种数。 因此不需要每一个字符串置位了,只需要判断一个位置的横竖,斜45度和斜135度方向的值即可。依然采用递归的方式,这里需要注意的是,由...

6110
来自专栏二进制文集

LeetCode 动态规划 题目分类汇总

A robot is located at the top-left corner of a m x n grid (marked 'Start' in the...

39660
来自专栏蘑菇先生的技术笔记

探索c#之跳跃表(SkipList)

29580
来自专栏云霄雨霁

有向图----可达性问题

30500
来自专栏数据结构与算法

P2280 [HNOI2003]激光炸弹

题目描述 ? 输入输出格式 输入格式: 输入文件名为input.txt 输入文件的第一行为正整数n和正整数R,接下来的n行每行有3个正整数,分别表示 输...

33050
来自专栏数值分析与有限元编程

Fortran知识 | 跳出多层循环

当一个程序出现多层循环,对coder们来说这无疑是讨厌的,尤其是要跳出某一层循环就更加崩溃了,面对那么多的do-end do,怎么跳?到底怎么跳? Fortra...

37450
来自专栏生信技能树

(11)仿写bowtie-生信菜鸟团博客2周年精选文章集

然后仿写了bowtie,对我的编程技术提高非常有帮助。目录如下: 自己动手写bowtie第一讲:BWT算法详解并建立索引 自己动手写bowtie第二讲:优化索引...

37260
来自专栏ACM算法日常

交错字符串(动态规划)- leetcode 97

给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。

17410
来自专栏小樱的经验随笔

洛谷 P1876 开灯(思维,枚举,规律题)

P1876 开灯 题目背景 该题的题目是不是感到很眼熟呢? 事实上,如果你懂的方法,该题的代码简直不能再短。 但是如果你不懂得呢?那。。。(自己去想) 题目描述...

30860

扫码关注云+社区

领取腾讯云代金券