在UML图中,类图、用例图、时序图是较为常用的。类图是面向对象系统建模中最常用和最重要的图,是定义其他图的基础。类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。类图中最基本的元素是类、接口。软件设计师设计出类图后,程序员就可以用代码实现类图中包含的内容。
1.类图中具体类、抽象、接口和包表示法
UML类图中具体类、抽象类、接口和包有不同的表示方法。
(1) 在UML类图中表示具体类
具体类在类图中用矩形框表示,矩形框分为三层:第一层是类名字。第二层是类的成员变量;第三层是类的方法。成员变量以及方法前的访问修饰符用符号来表示:
- "+"表示public;
- "-"表示private;
- "#"表示protected;
- 不带符号表示default
类成员描述格式:
[可见性]名称(参数列表)[:返回类型]
(2) 在UML类图表示抽象类
相比具体类,抽象类的类名以及抽象方法的名字都用斜体字表示:
(3)在UML类图中表示接口
接口在类图中也是用矩形框表示,但是与类的表示法不同的是,接口在类图中的第一层顶端用构造型<>表示,下面是接口的名字,第二层是方法
(4) 在UML类图中表示包
类和接口一般都出现在包中,UML类图中的表示形式如图:
2.在类图中表示关系
类图是用来显示系统中的类、接口、协作以及它们之间的静态结构和关系的一种静态模型。它主要用于描述软件系统的结构化设计。
类和类、类和接口、接口和接口之间存在一定的关系,UML类图中一般会有连线指明它们之间的关系。关系共有六种类型,分别是实现关系,泛化关系,关联关系,依赖关系,聚合关系,组合关系。
(1) 实现关系
实现关系是指接口及其实现类之间的关系。在这种关系中,类实现了接口,类中的操作实现了接口中所声明的所有的抽象操作。
在UML类图中,实现关系用空心三角个虚线组成的箭头来表示,箭头从实现类指向接口。例如,汽车和船实现了交通工具
(2) 泛化关系
泛化关系是对象之间耦合度最大的一种关系,是指对象与对象之间的继承关系。如果是对象A和对象B之间的"is a"关系成立,那么二者之间就会存在继承关系,对象B是父对象,对象A是子对象。
在UML图中,泛化关系用空心三角和实现组成的箭头表示,箭头从子类指向父类。在代码实现时,使用面向对象的继承机制来实现泛化关系。例如:Student类和Teacher类都是Person类的子类。
(3) 关联关系
关联关系是指对象之间的一种引用关系,它使一个对象知道另一个对象的属性和方法。
关联关系有单向关联,双向关联和自关联。如果两个对象都知道(可以调用)对方的公共属性和操作,那么二者就是双向关联。如果只有一个对象知道另一个对象的公共属性和操作,那么就是单向关联。大多数关联都是单向关联,单向关联的关系更容易建立和维护,有助于寻找可重用的类
在UML图中,双向关联关系用带双箭头的实现或者无箭头的实线双线表示。
单向关联用一个带箭头的实线表示,箭头指向被关联的对象
自关联,系统中可能会存在一些类的属性对象为类本身,这种特殊的关联关系为自关联,常见于链表:
一个对象可以持有其他对象的数组或集合。在UNL中,通过放置多重性表达式在关联线的末端来表示。多重性表达式可以是一个数字、一段范围或者是它们的组合。多重性允许的表达式示例:
- 数字:精确的数量
*
或者0..*
: 表示0到多个- 0…1 : 表示0或者1个
- 1…* : 表示1到多个
关联关系又分为依赖关联、聚合关联和组合关联三种类型。
(4) 依赖关系
依赖关系是一种使用关系。它是对象之间耦合度最弱的一种关联方式,是临时性的关联。如果对象A用到对象B,但是和B的关系不是太明显的时候,就可以把这种关系看作是依赖关系。如果对象A依赖于对象B,则A"use a" B。
在UML类图中,依赖关系用一个虚线的箭头表示,由 使用类 指向 被使用类,表示使用方对象持有被使用方对象的引用。比如人使用手机,二者就是依赖关系
(5) 聚合关系与组合关系
聚合是关联关系的一种,它体现的是整体与部分之间的关系,即"has a"的关系。此时整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享,所以聚合关系也常称为共享关系。
聚合关系是通过成员对象来实现的,其中成员对象是整体对象的一部分,但是成员对象可以脱离整体对象而独立存在。例如学校与老师的关系,如果学校停办了,老师依然存在。
在UML图中,聚合关系用空心菱形+实现箭头表示,空心菱形在整体一方,箭头指向部分一方。比如公司部门与员工的关系
组合也是关联关系的一种,它同样体现类之间整体与部分间的包含关系,即"contain a"的关系。但此时整体与部分是不可分的,部分也不能给其他整体共享,作为整体的对象负责部分对象的生命周期。这种关系比聚合更强,也称为强聚合。在组合关系中,整体对象可以控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在,部分对象不能脱离整体对象而存在。
在UML图中,组合关系用实心菱形加实现箭头表示,实心菱形在整体一方,箭头指向部分一方。
如何区分聚合关系还是组合关系?
如果在删除整体对象的时候,必须删除掉部分对象那就是组合关系,否则可能就是聚合关系。
从业务角度上来看,如果作为整体的对象必须要有部分对象的参与,才能完成自己的职责,那么二者关系就是组合关系,否则就是聚合关系。
3.示例
参考文章:
https://zhuanlan.zhihu.com/p/158693052
https://blog.csdn.net/java_kider/article/details/109241122
http://www.uml.org.cn/oobject/201905073.asp