类的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种: 泛化, 实现, 关联 和 依赖。

  1. 泛化 -- 表示"类与类之间的继承关系"。
  2. 实现 -- 表示"类与接口之间的实现"。
  3. 关联 -- 表示"类与类之间的拥有关系"。即,一个类是另一个类的成员。关联又包括:自关联, 单向关联, 双向关联, 多重性关联, 组合, 聚合。
  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系列02之 UML类图(一)

UML系列03之 UML类图(二)

PlantUML参考指南

UML类图介绍以及PlantUML使用方法的更多相关文章

  1. 北风设计模式课程---20、UML类图介绍

    北风设计模式课程---20.UML类图介绍 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 设计模式都是对生活的抽象,比如用户获得装备,我可以先装备工厂先生 ...

  2. UML 类图介绍

    UML 类图介绍 一. UML 简介 UML ( Unified Modeling Language )即统一建模语言,是 OMG ( Object Management Group )发表的图标式软 ...

  3. UML类图介绍&类的六大关系

    UML类图介绍&类的六大关系 官方定义 UML(统一建模语言),是一种用于软件系统分析和设计的语言工具,用于帮助软件开发人员进行思考和记录思路的方式 UML 图形化的语言 基本介绍 UML图: ...

  4. UML类图介绍(转载)

    UML类图详细介绍   类图主要描述程序对象以及他们之间的关系.一般来说,类.接口.抽象类这些程序对象的区别很容易,但是他们之间六种关系以前总是理解不够深刻,这次进行了一次复习,顺便写成博文以便加深理 ...

  5. UML类图介绍及简单用法

    原文链接 一.类的属性的表示方式 在UML类图中,类使用包含类名.属性(field) 和方法(method) 且带有分割线的矩形来表示,比如下图表示一个Employee类,它包含name,age和em ...

  6. UML类图介绍

    一.概述 UML类图用来定义系统中的类,包括描述类的结构和类之间的关系.类图的主要作用于描述系统的静态结构. 类图的基本模型元素如下:

  7. UML 类图快速入门

    UML 图形 官方定义 UML 类图(Class Diagram) UML 时序图(Sequence Diagram) 领域 UML 类图和实现 UML 类图 领域 UML 类图 实现 UML 类图 ...

  8. UML类图新手入门级介绍

    UML类图新手入门级介绍 举一个简单的例子,来看这样一副图,其中就包括了UML类图中的基本图示法. 首先,看动物矩形框,它代表一个类(Class).类图分三层,第一层显示类的名称,如果是抽象类,则就用 ...

  9. UML类图中的关系和表示方法

    类图是用来描述程序中的类以及它们之间的关系的,使用类图可以帮助我们简化对系统的理解.在UML类图中比较常见的关系有六种,它们分别是:依赖.关联.聚合.组合.泛化.实现,这六种关系中类之间的紧密程度是依 ...

随机推荐

  1. qt 拷贝文件设置进度条

    /** * @brief FuncModuleWin::copyFile * @param fromFIleName 优盘里面的文件 * @param toFileName 拷贝到/bin里面的启动文 ...

  2. 20.远程分支&跟踪分支

    远程分支 远程引用是对远程仓库的引用(指针),包括分支.标签等等. 你可以通过 git ls-remote (remote) 来显式地获得远程引用的完整列表,或者通过 git remote show ...

  3. Netty入门3之----Decoder和Encoder

    ​ Netty强大的地方,是他能方便的实现自定义协议的网络传输.在上一篇文章中,通过使用Netty封装好的工具类,实现了简单的http服务器.在接下来的文章中,我们看看怎么使用他来搭建自定义协议的服务 ...

  4. 浏览器环境下的javascript DOM对象继承模型

    这张图是我直接在现代浏览器中通过prototype原型溯源绘制的一张浏览器宿主环境下的javascript DOM对象模型,对于有效学习和使用javascript DOM编程起到高屋建瓴的指导作用, ...

  5. leveldb分析——Arena内存管理

    leveldb中实现了一个简单的内存管理工具Arena,其基本思想为:先预先向系统申请一块内存,此后需要申请内存时,直接到预先分配的内存中申请. 那么这样做的目的是什么呢? (1)避免了频率地进行ma ...

  6. Java 基本IO操作

    1.基本IO操作     有时候我们编写的程序除了自身会定义一些数据信息外,还需要引用外界的数据,或是将自身的数据发送到外界,这时我们需要使用输入与输出. 1)输入与输出       输入:是一个从外 ...

  7. TP5:隐藏inde.php文件

    原文地址:https://www.cnblogs.com/wangjiayi/p/7943268.html 一,找到/public/.htaccess文件,如果你的入口文件已经移动到根目录下,那么你的 ...

  8. C# 之 Request

    Request.QueryString(取得地址栏参数值)获取地址栏中的参数,意思就是取得”?"号后面的参数值.如果是多个是用这”&”符号连接起来的.Request.form取得表单 ...

  9. 分享上传图片shell的绕过过滤的几种方法

    一般网站图片上传功能都对文件进行过滤,防止webshell写入.但不同的程序对过滤也不一样,如何突破过滤继续上传? 本文总结了七种方法,可以突破! 1.文件头+GIF89a法.(php)//这个很好理 ...

  10. Bootstrap Multiselect

    Getting Started Link the Required Files First, the jQuery library needs to be included. Then Twitter ...