类的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. python SQLAchemy外键关联

    join 1.利用filter import sqlalchemy from sqlalchemy import create_engine from sqlalchemy.ext.declarati ...

  2. 1 如何使用pb文件保存和恢复模型进行迁移学习(学习Tensorflow 实战google深度学习框架)

    学习过程是Tensorflow 实战google深度学习框架一书的第六章的迁移学习环节. 具体见我提出的问题:https://www.tensorflowers.cn/t/5314 参考https:/ ...

  3. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">

    viewport:移动设备上用来显示网页的那部分区域,但其大小并不局限于那部分可视区域 width设置layout viewport  的宽度,为一个正整数,或字符串"device-widt ...

  4. leetcode-valid number ZZ

    http://blog.csdn.net/kenden23/article/details/18696083 本题是十分麻烦的题目,情况是非常多,网上也很多方法,其中最有效,优雅的方法是有限状态自动机 ...

  5. June 18th 2017 Week 25th Sunday

    Life was like a box of chocolates, you never know what you're gonna get. 人生就像一盒巧克力,结果往往出人意料. Compare ...

  6. good pics

  7. navicat远程连接mysql,2003 can't connect to mysql server on 10038

    转载地址:https://blog.csdn.net/f12105212/article/details/70768516 1:我们连接远程服务器的mysql,如果出现问题,很大问题会出在服务器的端口 ...

  8. ImportError: libmysqlclient.so.20: cannot open shared object file: No such file or directory 解决办法

    >>> import MySQLdbTraceback (most recent call last):  File "<stdin>", line ...

  9. MATLAB入门学习(七)

    开始,线性代数和微积分了,不怕.不怕. 背命令就行了... 线性代数 解线性方程组: Ax=b A是系数矩阵,x未知数,b是列向量 如果有唯一解,直接x=b\A 第二 B=null(A,'r')求Ax ...

  10. java里面list是引用的好例子

    java里面的赋值和引用是不同的,以后要详细总结一下! 看一个例子: public static void main(String[] args) { List<String> list ...