UML类图介绍以及PlantUML使用方法
类的UML表示方法
UML介绍
类图,是UML(统一建模语言)中用于描述"类"以及"类与类"之间的示意图。它形象的描述出了系统的结构,帮助人们理解系统。
类图是在"所有的UML图"中,实用频率非常之高;掌握它对于我们软件设计,以及交流都很有帮助。
对于类图而言,它的基本单位是类。类主要由三部分组成:类名、属性、操作(函数)。UML类的表示大致如下:

类名
类的名称
属性
UML类图中,属性的基本格式: 可见性 名称: 类型 [=缺省值]
可见性 -- 表示该属性对于类外的元素而言是否可见。
主要包括公有(public)、私有(private)、受保护(protected)以及包内可见(package private)四种,在类图中分别用符号+、-、#和~表示。
UML中可见性和符号的对应关系如下所示:
| 可见性 | 符号 |
|---|---|
| public | + |
| package private | ~ |
| protected | # |
| private | - |
在PlantUML中的表示形式如下图所示:

- 名称 -- 表示属性名。
- 类型 -- 表示属性的数据类型。可以是基本数据类型,也可以是用户自定义类型。
- 缺省值 -- 属性的初始值。它是一个可选项。
操作
UML类图中,属性的基本格式: 可见性 名称(参数类表) [:返回类型]
- 可见性 -- 表示该属性对于类外的元素而言是否可见。它的表示方法与"属性的可见性"相同。
- 名称 -- 表示方法名。
- 参数列表 -- 表示方法的参数。参数个数是任意的,多个参数之间用逗号","隔开。
- 返回类型 -- 表示方法的返回值类型。它是一个可选项;可以是具体的返回类型,可以是void,也可以无返回类型(构造方法)。
"实体类", "抽象类", "接口"的UML表示和在PlantUML中的表示
实体类的UML表示
实体类在UML用类名表示。在PlantUML中实体类用 “带圆圈的C + 类名” 表示。
抽象类的UML表示
抽象类和实体类的UML表示法类似。区别是: "抽象类的类名是斜体",而"实体类的类名不是斜体";在PlantUML中用 “带圆圈的A + 斜体类名” 表示。
接口的UML表示
在UML中,通过在"类名"位置添加“interface” 关键字来表示接口。在PlantUML中用 “带圆圈的I + 斜体类名” 表示。
"实体类", "抽象类", "接口"在PlantUML中的表示如下图:

UML类图的几种关系
在UML类图中,关系可以分为4种: 泛化, 实现, 关联 和 依赖。
- 泛化 -- 表示"类与类之间的继承关系"。
- 实现 -- 表示"类与接口之间的实现"。
- 关联 -- 表示"类与类之间的拥有关系"。即,一个类是另一个类的成员。关联又包括:自关联, 单向关联, 双向关联, 多重性关联, 组合, 聚合。
- 依赖 -- 表示"类与类之间的使用关系"。即,一个类是另一类的局部变量, 形式参数, 或者调用了静态方法/成员等。
这几种关系表示的"类与类之间关系的强弱顺序"是:泛化 = 实现 > 关联 > 依赖
泛化(Generalization)
【关系说明】: 泛化是一种继承关系。它指定了子类如何特化父类的所有特征和行为。例如:老虎是动物的一种。
【代码说明】: 父类与子类。
【UML图形】: 带三角箭头的实线,箭头指向父类。
【示例】: Fruit是"水果";Apple是"苹果",它继承了Fruit,是水果中的一种。
示例代码:
public class Fruit {
protected int price;
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
public class Apple extends Fruit {}
UML示例图:(以下所有的示例均是用PlantUML绘制而成,PlantUML使用手册可参看考:PlantUML参考指南 )

实现(Realization)
【关系说明】: 实现是一种类与接口的关系,表示类是接口所有特征和行为的实现。
【代码说明】: 实现类与接口。
【UML图形】: 带三角箭头的虚线,箭头指向接口。
【示例】: Runnable接口表示"一个任务",TimeTask是"计时任务",它实现了Runnable接口。
示例代码:
public interface Runnable {
abstract public void run();
}
public class TimeTask implements Runnable {
@Override
public void run() {
}
}
UML示例图:

关联(Association)
关联表示"类与类之间的拥有关系"。即,一个类是另一个类的成员。关联包括:自关联, 单向关联, 双向关联, 多重性关联, 聚合, 组合。
自关联
【关系说明】: 一个类包含自己。例如,单向链表中的节点,包含下一个节点的信息。
【代码说明】: 成员变量
【UML图形】: 带普通箭头的实心线,指向被自己。
【示例】: Node是单向链表中的节点,它包含下一个节点的指针。
示例代码:
public class Node {
private Node node;
}
UML示例图:

单向关联
【关系说明】: "类A"中有"类B"成员变量,"类B"中没有"类A"成员变量。
【代码说明】: 成员变量
【UML图形】: 带普通单向箭头的实心线,指向被拥有者。
【示例】: Person表示"人",IdCard表示"身份证信息",身份证包括id和"身份证编号snum"。一个人拥有唯一的身份证信息。
示例代码:
public class Person {
private IdCard idcard;
}
public class IdCard {
private int id;
private String snum;
}
UML示例图:

双向关联
【关系说明】: "类A"中有"类B"成员变量,"类B"也有"类A"成员变量。
【代码说明】: 成员变量
【UML图形】: 带普通双向箭头的实心线 或者 不带箭头的实心线。
【示例】: Cusomer表示"客户",Product表示"产品"。客户可以购买产品,产品也属于客户。
示例代码:
public class Customer {
private Address address;
}
public class Address {
private Customer customer;
}
UML示例图:

聚合(Aggregation)
【关系说明]】: 聚合是整体与部分的关系。聚合关系是类与类之间关系比较密切的关联关系;要区分聚合和其它的关联关系,必须考察具体的逻辑关系。在聚合关系中,成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在。如车和轮胎是整体和部分的关系。
【代码说明】: 成员变量
【UML图形】: 带空心菱形的实心线,菱形指向整体
【示例】: Car表示"汽车",Tire表示"轮胎"。"轮胎"本身是个独立个体。
示例代码:
public class Car {
private Tire tire;
}
public class Tire {
private double radius;
private double perimeter;
}
UML示例图:

组合(Composition)
【关系说明】: 组合是整体与部分的关系。组合关系是比聚合关系还要强的关联关系。但是在组合关系中整体对象可以控制成员对象的生命周期,一旦整体对象不存在,成员对象也将不存在,成员对象与整体对象之间具有同生共死的关系。例如,身体和鼻子,身体包括鼻子,鼻子不能脱离身体而独立存在。
【代码说明】: 成员变量
【UML图形】: 带实心菱形的实线,菱形指向整体
【示例】: Body表示"身体",Nose表示"鼻子"。身体包含鼻子,鼻子离不开身体。
示例代码:
public class Body {
private Nose nose;
private class Nose {
}
}
UML示例图:

依赖(Dependency)
【关系说明】: 依赖是一种使用的关系。在需要表示一个事物使用另一个事物时使用依赖关系,尽量不使用双向的互相依赖。
【代码说明】: 局部变量、方法的参数或者对静态方法的调用
【UML图形】: 带箭头的虚线,指向被使用者
【示例】: 人过河。人是"Person"类,它包括过河函数acrossRiver(),acrossRiver()的参数是过河工具,返回值是过河时间。此处的过河工具是船,船对应的类是Boat。
示例代码:
public class Person {
public int acrossRiver(Boat boat);
}
public class Boat {
}
UML示例图:

参考资料
UML类图介绍以及PlantUML使用方法的更多相关文章
- 北风设计模式课程---20、UML类图介绍
北风设计模式课程---20.UML类图介绍 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 设计模式都是对生活的抽象,比如用户获得装备,我可以先装备工厂先生 ...
- UML 类图介绍
UML 类图介绍 一. UML 简介 UML ( Unified Modeling Language )即统一建模语言,是 OMG ( Object Management Group )发表的图标式软 ...
- UML类图介绍&类的六大关系
UML类图介绍&类的六大关系 官方定义 UML(统一建模语言),是一种用于软件系统分析和设计的语言工具,用于帮助软件开发人员进行思考和记录思路的方式 UML 图形化的语言 基本介绍 UML图: ...
- UML类图介绍(转载)
UML类图详细介绍 类图主要描述程序对象以及他们之间的关系.一般来说,类.接口.抽象类这些程序对象的区别很容易,但是他们之间六种关系以前总是理解不够深刻,这次进行了一次复习,顺便写成博文以便加深理 ...
- UML类图介绍及简单用法
原文链接 一.类的属性的表示方式 在UML类图中,类使用包含类名.属性(field) 和方法(method) 且带有分割线的矩形来表示,比如下图表示一个Employee类,它包含name,age和em ...
- UML类图介绍
一.概述 UML类图用来定义系统中的类,包括描述类的结构和类之间的关系.类图的主要作用于描述系统的静态结构. 类图的基本模型元素如下:
- UML 类图快速入门
UML 图形 官方定义 UML 类图(Class Diagram) UML 时序图(Sequence Diagram) 领域 UML 类图和实现 UML 类图 领域 UML 类图 实现 UML 类图 ...
- UML类图新手入门级介绍
UML类图新手入门级介绍 举一个简单的例子,来看这样一副图,其中就包括了UML类图中的基本图示法. 首先,看动物矩形框,它代表一个类(Class).类图分三层,第一层显示类的名称,如果是抽象类,则就用 ...
- UML类图中的关系和表示方法
类图是用来描述程序中的类以及它们之间的关系的,使用类图可以帮助我们简化对系统的理解.在UML类图中比较常见的关系有六种,它们分别是:依赖.关联.聚合.组合.泛化.实现,这六种关系中类之间的紧密程度是依 ...
随机推荐
- 密码存储中MD5的安全问题与替代方案
md5安全吗?有多么地不安全?如何才能安全地存储密码?... md5安全吗? 经过各种安全事件后,很多系统在存放密码的时候不会直接存放明文密码了,大都改成了存放了 md5 加密(hash)后的密码,可 ...
- Ten C++11 Features Every C++ Developer Should Use
原版:http://www.codeproject.com/Articles/570638/Ten-Cplusplus-Features-Every-Cplusplus-Developer 译版:ht ...
- MVC中用NPOI导出Excel相关问题
情形1:可以直接带参数 前端页面: @.ActionLink("导出Excel", "DownLoadExcel", new { 参数名= '参数值' }, n ...
- [问题记录]libpomelo工程调整编译链接错误
1. 描述: 如下图所示,出现链接错误.那么链接问题一般也就两块设置: (1)包含路径Additional Library Directories (2)lib库的包含Additional Depen ...
- 一个典型的后台软件系统的设计复盘——(三)打通任督二脉-context
武侠小说练功讲究打通任督二脉.程序设计练到一定程度也讲究打通任督二脉.好奇心强的同学可以搜搜“打通任督二脉有什么感觉”. spring的任督二脉ApplicationContext 最经典的任督二脉莫 ...
- sql 嵌套查询
sql 某一字段 数量大于1 SELECT * FROM ecm_goods_spec AWHERE ( SELECT count( * ) FROM ecm_goods_spec BWHERE A. ...
- 使用c++11写个最简跨平台线程池
为什么需要多线程? 最简单的多线程长啥样? 为什么需要线程池,有什么问题? 实现的主要原理是什么? 带着这几个问题,我们依次展开. 1.为什么需要多线程? 大部分程序毕竟都不是计算密集型的,简单的说, ...
- ZT 设计模式六大原则(5):迪米特法则
转贴: 设计模式六大原则(5):迪米特法则 原帖子的后续评论里面很多值得仔细去看 切记!像21楼 21楼 chenshufei2 2012-09-23 12:47发表 [回复] 上个例子,就是方法 ...
- 编码 Unicode utf-8
编码的发展史: 一开始计算机只在美国使用.8位的字节可以组合出256种不同的状态.他们将0到32种状态规定为”控制码“,后来又用其中32号以后的状态表示空格.标点符号.数字和大小写字母.这样一直编到了 ...
- ecshop 中如何禁用右键和F12
找到 网站根目录/themes/js/common.js,在最后加入如下代码: //禁用右键和F12 //方法一 document.oncontextmenu = function () { retu ...