Java工程师必备绘图技能之一 UML类图
Java工程师必备绘图技能之二 UML时序图

1. UML 类图概述

类图(Class Diagram)是面向对象系统建模中最常用和最重要的图,是定义其它图的基础。 类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。 类图显示集合的类,接口,关联,协作和约束,它也被称为作为结构图。
类图不仅用于可视化描述和记录系统的不同方面,也为构建可执行代码的软件应用程序。 类图描述一类的属性和操作,也对系统的约束。被广泛应用于类图的建模的面向对象的系统中,因为它们是唯一的,可以直接映射到面向对象的语言的 UML 图。

2. UML 类图目标

类图的目的是模型的一个应用程序的静态视图。 类图是唯一的图可以直接映射到面向对象的语言,因此广泛应用于程序设计阶段。 因此,类图的目的可概括为:

  • 分析和设计应用程序的静态视图。
  • 描述一个系统的责任。
  • 基地组件图和部署图。
  • 正向和逆向工程。

    3. UML 类图如何画

    UML 类图是软件行业经常需要的一项技能。许多项目立项文档、需求分析等文档中,都会有关UML类图的涉及,所以,学习UML类图的绘制至关重要。绘制类图时需要考虑的属性较多,这里的图将被视为从顶层视图。 类图基本上是一个系统的静态视图的图形表示,代表不同方面的应用。因此,集合类图表示整个系统。 在画类图时要牢记以下几点:

  • 类图中的名称应该是有意义的描述,并且是面向系统的。

  • 画类图前应先确定每个元素之间的关系。
  • 类图中的每个类职责(属性和方法)应该清晰标明。
  • 对于每个类的属性的最小数量应符合规定,不必要的属性将使图表复杂。
  • 使用了以下注释有否要求来描述图中的某些方面。因为上面的附图,它应该是可以理解的开发者/编码器。
  • 最后,在最终版本之前,该图应绘制在普通纸上尽可能多次,使其纠正和返工。

    4. UML 类图实战操作

    类与类之间的关系

    在UML类图中,常见的有以下几种关系: 泛化(Generalization),实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)
    在画类图的时候,理清类和类之间的关系是重点。下面我们结合实例理解这些关系。

    泛化(Generalization)

    【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。 例如:老虎是动物的一种,即有老虎的特性也有动物的共性。
    【箭头指向】:带三角箭头的实线,箭头指向父类。
    Java工程师必备绘图技能之一 UML类图 - 图1

    实现(Realization)

    【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现。
    【箭头指向】:带三角箭头的虚线,箭头指向接口。
    Java工程师必备绘图技能之一 UML类图 - 图2

    关联(Association)

    【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法。例如:老师与学生,妻子和丈夫的关联是可以双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联只有一个箭头。
    【箭头指向】:带普通箭头的实心线,指向被拥有者。
    Java工程师必备绘图技能之一 UML类图 - 图3
    上图中,老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。但学生与某课程间的关系为单向关联,一名学生可能要上多门课程,课程是个抽象的东西他不拥有学生。
    特殊情形还有可能自身关联自己,例如:单身汉的自身关联关系
    Java工程师必备绘图技能之一 UML类图 - 图4

    聚合(Aggregation)

    【聚合关系】:是整体与部分的关系,且部分可以离开整体而单独存在。如车子和轮胎是部分和整体的关系,轮胎离开车子仍然可以存在。聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
    【箭头指向】:带空心菱形的实心线,菱形指向整体。
    Java工程师必备绘图技能之一 UML类图 - 图5

    组合(Composition)

    【组合关系】:是整体与部分的关系,但部分不能离开整体而单独存在。如公司和部门是整体和部分的关系,没有公司就不存在部门。组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分对象的生命周期。
    【箭头指向】:带实心菱形的实心线,菱形指向整体。
    Java工程师必备绘图技能之一 UML类图 - 图6
    聚合和组合的区别
    这两个比较难理解,重点说一下。聚合和组合的区别在于:聚合关系是 “has-a” 关系,组合关系是 “contains-a” 关系;聚合关系表示整体与部分的关系比较弱,而组合比较强;聚合关系中代表部分事物的对象与代表聚合事物的对象的生存期无关,一旦删除了聚合对象不一定就删除了代表部分事物的对象。组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象。

    依赖(Dependency)

    【依赖关系】:是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖。
    【箭头指向】:带箭头的虚线,指向被使用者。
    Java工程师必备绘图技能之一 UML类图 - 图7
    各种关系的强弱顺序
    泛化= 实现> 组合> 聚合> 关联> 依赖
    下面这张UML图,比较形象地展示了各种类图关系:
    Java工程师必备绘图技能之一 UML类图 - 图8