【UML】UML类图详解
文章目录
- 1. 类的UML图示
- 2 类与类之间的关系
- 2.1 关联关系
- 2.1.1 单向关联
- 2.1.2 双向关联
- 2.1.3 自关联
- 2.1.4 多重性关联
- 2.1.5 聚合关系
- 2.1.6 组合关系
- 2.2 依赖关系
- 2.3 继承关系
- 2.4 接口实现关系
1. 类的UML图示
在UML中,类使用包含类名
、属性
和方法
且带有分隔线的矩形来表示,如定义一个Employee类,它包含属性name、age和email,以及方法modifyInfo(),在UML类图中该类如图1所示:
在UML类图中,类一般由三部分组成:
(1) 第一部分是类名
(2) 第二部分是类的属性
(Attributes):即类的成员变量。一个类可以有任意多个属性,也可以没有属性
UML规定属性的表示方式为:
可见性 名称:类型 [ = 缺省值 ]
其中:
“可见性” 用符号+、-和#表示 :
public | + |
private | - |
protected | # |
(3) 第三部分是类的方法
(Operations):
UML规定操作的表示方式为:
可见性 名称(参数列表) [ : 返回类型]
其中:
“可见性”的定义与属性的可见性定义相同。
方法的示意图参考图2
2 类与类之间的关系
2.1 关联关系
关联关系又可进一步分为单向关联、双向关联和自关联。
2.1.1 单向关联
我们可以看到,在UML类图中单向关联用一个带箭头的直线
表示。
上图表示每个顾客都有一个地址,这通过让Customer类持有一个类型为Address的成员变量类实现。
应的Java代码片段如下:
public class Customer {private Address address;
……
}public class Address {……
}
2.1.2 双向关联
从上图中我们很容易看出,所谓的双向关联就是双方各自持有对方类型的成员变量。
在UML类图中,双向关联用一个不带箭头的直线
表示。上图中在Customer类中维护一个Product[]数组,表示一个顾客购买了那些产品;在Product类中维护一个Customer类型的成员变量表示这个产品被哪个顾客所购买。
对应的Java代码片段如下:
public class Customer {private Product[] products;
……
}public class Product {private Customer customer;
……
}
2.1.3 自关联
自关联在UML类图中用一个带有箭头且指向自身的直线
表示。
上图的意思就是Node类包含类型为Node的成员变量,也就是“自己包含自己”。
对应的Java代码片段如下:
public class Node {private Node subNode;
……
}
2.1.4 多重性关联
在UML中,对象之间的多重性可以直接在关联直线上用一个数字或一个数字范围
表示。
对象之间可以存在多种多重性关联关系,常见的多重性表示方式如表1所示:
表1 多重性表示方式列表
例如:一个界面(Form)可以拥有零个或多个按钮(Button),但是一个按钮只能属于一个界面,因此,一个Form类的对象可以与零个或多个Button类的对象相关联,但一个Button类的对象只能与一个Form类的对象关联,如图5所示:
对应的Java代码片段如下:
public class Form {private Button[] buttons; //定义一个集合对象
……
}public class Button {……
}
2.1.5 聚合关系
聚合(Aggregation)关系表示整体与部分
的关系。在聚合关系中,成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在
上图中的Car类与Engine类就是聚合关系(Car类中包含一个Engine类型的成员变量)。
由上图我们可以看到,UML中聚合关系用带空心菱形和箭头的直线
表示。聚合关系强调是“整体”包含“部分”,但是“部分”可以脱离“整体”而单独存在。比如上图中汽车包含了发动机,而发动机脱离了汽车也能单独存在。
代码实现聚合关系时,成员对象通常作为构造方法、Setter方法或业务方法的参数注入
到整体对象中,图6对应的Java代码片段如下:
public class Car {private Engine engine;//构造注入public Car(Engine engine) {this.engine = engine;}//设值注入
public void setEngine(Engine engine) {this.engine = engine;
}
……
}public class Engine {……
}
2.1.6 组合关系
组合(Composition)关系也表示类之间整体和部分
的关系,但是在组合关系中整体对象可以控制成员对象的生命周期,一旦整体对象不存在,成员对象也将不存在
,成员对象与整体对象之间具有同生共死的关系。在UML中,组合关系用带实心菱形的直线表示。例如:人的头(Head)与嘴巴(Mouth),嘴巴是头的组成部分之一,而且如果头没了,嘴巴也就没了,因此头和嘴巴是组合关系,如图7所示:
在代码实现组合关系时,通常在整体类的构造方法中直接实例化成员类
,图7对应的Java代码片段如下:
public class Head {private Mouth mouth;public Head() {mouth = new Mouth(); //实例化成员类}
……
}public class Mouth {……
}
2.2 依赖关系
依赖(Dependency)关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系
。大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数
。在UML中,依赖关系用带箭头的虚线
表示,由依赖的一方指向被依赖的一方。例如:驾驶员开车,在Driver类的drive()方法中将Car类型的对象car作为一个参数传递,以便在drive()方法中能够调用car的move()方法,且驾驶员的drive()方法依赖车的move()方法,因此类Driver依赖类Car,如图1所示:
依赖关系通常通过三种方式来实现,
- 第一种也是最常用的一种方式是如图1所示的将
一个类的对象作为另一个类中方法的参数
- 第二种方式是
在一个类的方法中将另一个类的对象作为其局部变量
- 第三种方式是
在一个类的方法中调用另一个类的静态方法
。
图1对应的Java代码片段如下:
public class Driver {public void drive(Car car) {car.move();}……
}public class Car {public void move() {......}……
}
2.3 继承关系
继承关系对应的是extend
关键字,在UML类图中用带空心三角形的直线
表示,
如下图所示中,Student类与Teacher类继承了Person类。
2.4 接口实现关系
这种关系对应implement
关键字,在UML类图中用带空心三角形的虚线
表示。如下图中,Car类与Ship类都实现了Vehicle接口。
【UML】UML类图详解相关推荐
- UML(Unified Modeling Language)统一建模语言--类图详解
UML(Unified Modeling Language)统一建模语言--类图详解 2010-05-12 作者:fenglin1985 来源:fenglin1985的blog 类图是面向对象 ...
- java uml类图教程_Java利器之UML类图详解
原标题:Java利器之UML类图详解 (点击上方公众号,可快速关注) 来源:伯乐在线专栏作者- Code4Android 如需转载,发送「转载」二字查看说明 前言 UML(Unified Modeli ...
- 软件设计-UML类图详解说明
一. UML类图思维导图 二. 详细分析和介绍 下面就从上面的思维导图开始,详细的介绍UML类图! 1. 什么是UML,概念是什么? UML(Unified Modeling Language)中文统 ...
- UML类图详解_泛化关系
泛化其实就是继承关系,还是比较简单的,那么我们就把之前有些问题的博客UML类图重新来实现一次. 依旧是这个图 下面我们来看一个例子 Account.h 1 #include <cstdlib&g ...
- Java利器之UML类图详解
前言 UML(Unified Modeling Language)中文统一建模语言,是一种开放的方法,用于说明.可视化.构建和编写一个正在开发的.面向对象的.软件密集系统的制品的开放方法.UML展现了 ...
- 00 C++ UML类图详解
一.基本概念: 类图(Class Diagram): 类图是面向对象系统建模中最常用和最重要的图,是定义其它图的基础.类图主要是用来显示系统中的类.接口以及它们之间的静态结构和关系的一种静态模型. 类 ...
- C++ UML类图详解
文章目录 基本概念: 1. 泛化(Generalization) 2. 实现(Realization) 3. 关联(Association) 4. 聚合(Aggregation) 5. 组合(Comp ...
- 【Java】UML类图详解-详细易懂
基本介绍 统一建模语言(Unified Modeling Language,UML)是用来设计软件的可视化建模语言.它的特点是简单.统一.图形化.能表达软件设计中的动态与静态信息. UML 从目标系统 ...
- idea uml图各符号含义_java利器之UML类图详解(IDEA)
一.概述 类图(Class Diagram)是面向对象系统建模中最常用和最重要的图,是定义其它图的基础. 类图主要是用来显示系统中的类.接口以及它们之间的静态结构和关系的一种静态模型. 类图不仅用于可 ...
- UML概述及UML类图详解
引言 UML图有很多种,但是并非必须掌握所有的UML图,才能完整系统分析和设计工作.一般说来,在UML图中,只要掌握类图.用例图.时序图的使用,就能完成大部分的工作.也就是说,掌握UML的20%,就能 ...
最新文章
- 在ASP.NET MVC中使用IIS级别的URL Rewrite
- (转)CSS书写规范、顺序
- 使用sitemesh建立复合视图 - 1.hello
- python统计出现的中文标点_Python处理中文标点符号大集合
- python绘制蟒蛇绕圈圈_Python学习之循环--绕圈圈(蛇形盘)
- SIP协议 会话发起协议(二)
- 6-2 错误与异常处理
- 我毕业一年后。生活的艰辛。我的程序人生该怎么走
- Android 添加水印View
- python开方 运算符_[转载] Python中的算数运算符
- python几种矩阵重组降维方式对比
- 计算机网络mac地址作用是什么,mac地址的作用是什么
- zbb20170630 web项目发布至tomcat的ROOT下方法(开发环境和部署环境)
- #USACO#Island Travels
- 兴趣爱好选择程序java+Swing界面
- Thymeleaf教程 (十二) 标签内,js中使用表达式
- 深入理解计算机系统-第七章(链接)笔记
- 2022年5种最适合黑客的编程语言
- linux字符设备和块设备的区别 以及网络设备
- 论文阅读Cars Can’t Fly up in the Sky
热门文章
- 014day(h5的发展史,h5的兼容,h5的语法,h5的语义化,h5的常用标记,百分比下字体居中的两种方法,video视频文件,audio音频文件,
- vlan接口的作用是什么?什么是静态路由?
- 解决OPPO系统在Android10魔改刘海屏的额外适配
- oracle中如何查看端口号,Oracle EMGC查看端口
- Matlab安装问题
- 又开始的python-day06-20200723-闭包-装饰器-模块-os-sys-math-random-datetime-time-calendar-hashlib-hmac
- 为什么油烟净化器会引起火灾?
- 华为OJ训练之0034-170112-密码强度等级
- python word.documents.open报错_Python:读取两种Word文件简述及文件未能引发事件错误...
- 我们为什么热爱梅西,梅西能够给我们什么?