Skip to content

搞定UML类图!

类的表示

在UML类图中,一个类使用包含类名属性方法带有分割线的矩形来表示。如下图所示,在Teacher类中,存在nameageemail三个属性和一个modifyInfo()方法。

uml diagram

定义属性或者方法时,可以使用特殊符号定义相应条目的可访问性质。

字符可访问性含义
-private私有表示只能被本类访问
#protected受保护表示能被本包中的类或子类访问
~default默认、包内可见表示能被本包中的类访问
+public公有表示能被任何类访问
  • 属性的完整表示形式:可见性 名称:类型[ = 缺省值]
  • 方法的完整表示形式:[可见性] 方法名称(参数列表)[: 返回类型],没有冒号的话表示返回值类型为void
  • 静态属性静态方法下划线表示。如下图所示,在hutoolIdcardUtil类中,存在一个CHINA_ID_MIN_LENGT静态属性和一个isValidCard()静态方法
uml diagram

抽象类抽象方法斜体 表示。如下图所示,在Employee抽象类中,存在addressnamenumber三个属性和两个方法mailCheck()computePay(),其中computePay()方法是一个抽象方法。

uml diagram

与类的表示法不同的是,接口在类图中的第一层顶端用构造型 <<interface>>表示,下面是接口的名字,第二层是方法。如下图所示,在List接口中,存在以下方法size()isEmpty()。在 PlantUML 中接口的表现形式与前面描述的有点不一样,不过没关系。

uml diagram

关于 PlantUML 的用法可以参考官方文档:类图的语法和功能

类之间的关系

泛化关系

泛化关系(Generalization)是耦合度最高的一种关系,是“is-a”关系,是继承关系,用于描述父类与子类之间的关系,父类又称作基类或超类,子类又称作派生类。继承关系对应的是extend关键字,在UML类图中用空心三角和实线组成的箭头表示,箭头指向父类。如下图所示中,Student类与Teacher类继承自Person类。

uml diagram

实现关系

实现关系(Realization)是指接口及其实现类之间的关系。实现关系对应的是implement关键字。在UML类图中用空心三角和虚线组成的箭头来表示,箭头指向接口。如下图所示,Car类与Ship类都实现了Vehicle接口。

uml diagram

关联关系

关联关系(Association)是一种拥有关系它使一个类知道另一个类的属性和方法。在Java中,关联关系的代码表现形式为一个对象持有另一个对象的引用。关联关系又可进一步分为单向关联双向关联自关联

单向关联

在UML类图中,单向关联用一个带箭头的实线表示,箭头指向被关联的对象。如下图所示,Customer类持有一个类型为Address的成员变量。

uml diagram

双向关联

所谓的双向关联就是双方各自持有对方的引用。在UML类图中,双向关联关系用带双箭头的实线或者无箭头的实线表示。如下图所示,在Customer类中维护一个Product[]数组,表示一个顾客购买了那些产品;在Product类中维护一个Customer类型的成员变量,表示这个产品被哪个顾客所购买。

uml diagram

一个对象可以持有其它对象的数组或者集合。在UML类图中,可以通过放置多重性(multipicity)表达式在关联线的末端来表示。多重性表达式可以是一个数字、一段范围或者是它们的组合。多重性允许的表达式示例如下:

  • 数字:精确的数量
  • 或者0..:表示0到多个
  • 0..1:表示0或者1个
  • 1..*:表示1到多个

自关联

在UML类图中,自关联用一个带箭头且指向自身的直线表示。如下图所示,在单向链表Node中会维护一个Node类型的成员变量作为其后继节点next

uml diagram

聚合关系

聚合关系(Aggregation)是关联关系的一种特例,它体现的是整体与部分的包含关系,即 “has a” 的关系。聚合关系强调是“整体”包含“部分”,但是“部分”可以脱离“整体”而单独存在,即整体和部分是可以分离的,有各自的生命周期。在UML类图中,聚合关系用带空心菱形和箭头的直线表示,空心菱形在整体一方箭头指向部分一方。如下图所示,汽车包含发动机,而发动机脱离了汽车也能单独存在。

uml diagram

组合关系

组合关系(Composition)也是关联关系的一种特例,它同样体现的是整体与部分间的包含关系,即 “contains a” 的关系。但此时整体与部分是不可分的,部分也不能给其它整体共享,整体可以控制部分的生命周期整体一旦不存在部分也便不存在。这种关系比聚合更强,也称为强聚合。在UML类图中,组合关系用带实心菱形和箭头的直线表示,实心菱形在整体一方箭头指向部分一方。如下图所示,人包含头(head)、躯干(limbs)、四肢(torso),它们的生命周期一致。当人出生时,头、躯干、四肢同时诞生。当人死亡时,作为人体组成部分的头、躯干、四肢则同时死亡。

uml diagram

依赖关系

依赖关系(Dependency)是一种弱关联关系,是一种使用关系,即 “use a” 的关系。可以理解为一个类用到了另一个类中的方法和属性,只要在类中用到了对方就是依赖关系。在UML类图中,依赖关系用一条带有箭头的虚线表示,箭头指向被使用方。如下图所示,驾驶员和汽车的关系,驾驶员使用汽车,二者之间就是依赖关系。

uml diagram