UML 类图

这篇文章介绍如何画UML类图(class diagram),用来表示类之间的包含、继承关系等。

参考链接:看懂UML类图和时序图 — Graphic Design Patterns (design-patterns.readthedocs.io)(GitHub仓库地址:me115/design_patterns: 图说设计模式

为了应付日常生活工作的要求,我们需要了解类之间的关系在UML中是如何表示的。

下面是从上面网站搬运过来的示例图:

UML类图示例

  • 车的类图结构为<<abstract>>,表示车是一个抽象类;
  • 它有两个继承类:小汽车和自行车;它们之间的关系为实现关系,使用带空心箭头的虚线表示;
  • 小汽车为与SUV之间也是继承关系,它们之间的关系为泛化关系,使用带空心箭头的实线表示;
  • 学生与班级之间是聚合关系,使用带空心菱形的实线表示;
  • 小汽车与发动机之间是组合关系,使用带实心菱形的实线表示;
  • 学生与身份证之间为关联关系,使用一根实线表示;
  • 学生上学需要用到自行车,与自行车是一种依赖关系,使用带箭头的虚线表示;

类之间的关系

关系解释举例说明图例
泛化关系泛化 (generalization),也可以说是一般的继承关系,即两个对象之间为"is-a"的关系西瓜是水果UML继承关系
实现关系也可以说是“接口继承 (Interface Inheritance)”,即从抽象类继承而来“车”是一个抽象概念,只有像“汽车”、“自行车”才能生成具体的对象UML实现关系/Interface Inheritance
聚合关系聚合 (aggregation) 表示整体由部分构成的语义;不同于组合关系的是,整体和部分不是强依赖的,即使整体不存在了,部分仍然存在一个部门由多个员工组成, 部门撤销了,但人员不会消失;如图表示A聚合到B上 / B由A组成UML聚合关系
组合关系组合关系 (composition) 是一种强依赖的特殊聚合关系(强聚合关系):如果整体不存在了,则部分也不存在了公司不存在了,部门也将不存在了;如图表示A组成B / B由A组成UML组合关系
关联关系描述不同类之间静态的、天然的结构关系 (association),通常与运行状态无关,一般由常识等因素决定,因此是一种“强关联”的关系用一条直线表示,默认不强调方向,表示对象间相互知道;若强调方向,如图表示A知道B,但B不知道AUML关联关系
依赖关系描述一个对象在运行期间依赖另一个对象的关系 (dependency);是一种临时性的关系,通常在运行期间产生,并且可能随着运行发生变化如图表示A依赖于BUML依赖关系

使用 yUML

使用 yUML 画类图:

类型代码示例
[A]
带详细信息的类[A|- x: int;- y: int|+ A();+ func()]
(不同区域用竖线隔开)
UML Full Class
单向箭头[A]->[B]
双向箭头[A]<->[B]
连线[A]-[B]
聚合(Aggregation)[A]+-[B]或者[A]<>-[B]UML聚合关系
组合(Composition)[A]++-[B]UML组合关系
继承(Inheritance)[Fruit]^[Watermelon]UML继承关系
接口继承(Interface Inheritance)[<<abstract>> Vehicle]^-.-[Car],
[<<abstract>> Vehicle]^-.-[Bicycle]
UML实现关系/Interface Inheritance
依赖(Dependencies)[Customer]-.->[PaymentStrategy]UML依赖关系