Home

UML类图学习

字数统计: 1.5k阅读时长: 5 min
2019/03/30 Share

阅读材料来自于:深入浅出UML类图

 类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。


 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。在软件系统运行时,类将被实例化成对象(Object),对象对应于某个具体的事物,是类的实例(Instance)。

 类图(Class Diagram)使用出现在系统中的不同类来描述系统的静态结构,它用来描述不同的类以及它们之间的关系。


类的UML图示

 在UML中,类使用包含类名、属性和操作且带有分隔线的长方形来表示,如定义一个Employee类,它包含属性name、age和email,以及操作modifyInfo(),在UML类图中该类如图1所示:


在UML类图中,类一般由三部分组成:

  1. 第一部分是类名:每个类都必须有一个名字,类名是一个字符串。
  2. 第二部分是类的属性(Attributes):属性是指类的性质,即类的成员变量。一个类可以有任意多个属性,也可以没有属性

UML规定属性的表示方式为:可见性 名称:类型 [ = 缺省值 ]

其中:

  • “可见性”表示该属性对于类外的元素而言是否可见,包括公有(public)、私有(private)和受保护(protected)三种,在类图中分别用符号+、-#表示。
  • “名称”表示属性名,用一个字符串表示。
  • “类型”表示属性的数据类型,可以是基本数据类型,也可以是用户自定义类型。
  • “缺省值”是一个可选项,即属性的初始值。
  1. 第三部分是类的操作(Operations):操作是类的任意一个实例对象都可以使用的行为,是类的成员方法。

UML规定操作的表示方式为:可见性 名称(参数列表) [ : 返回类型]
其中:

  • “可见性”的定义与属性的可见性定义相同。
  • “名称”即方法名,用一个字符串表示。
  • “参数列表”表示方法的参数,其语法与属性的定义相似,参数个数是任意的,多个参数之间用逗号“,”隔开。
  • “返回类型”是一个可选项,表示方法的返回值类型,依赖于具体的编程语言,可以是基本数据类型,也可以是用户自定义类型,还可以是空类型(void),如果是构造方法,则无返回类型。

在类中,操作method1的可见性为public(+),带入了一个Object类型的参数par,返回值为空(void);操作method2的可见性为protected(#),无参数,返回值为String类型;操作method3的可见性为private(-),包含两个参数,其中一个参数为int类型,另一个为int[]类型,返回值为int类型。


类与类之间的关系

 在软件系统中,类并不是孤立存在的,类与类之间存在各种关系,对于不同类型的关系,UML提供了不同的表示方式。

关联关系

 关联(Association)关系是类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对象之间有联系.

双向关联

 默认情况下,关联是双向的。例如:顾客(Customer)购买商品(Product)并拥有商品。

单向关联

 类的关联关系也可以是单向的,单向关联用带箭头的实线表示。

自关联

 在系统中可能会存在一些类的属性对象类型为该类本身,这种特殊的关联关系称为自关联。例如:一个节点类(Node)的成员又是节点Node类型的对象,如图所示:

多重关联

 了解即可

聚合关系

 聚合(Aggregation)关系表示整体与部分的关系。在聚合关系中,成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在。在UML中,聚合关系用带空心菱形的直线表示。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Car {
private Engine engine;
//构造注入
public Car(Engine engine) {
this.engine = engine;
}

//设值注入
public void setEngine(Engine engine) {
this.engine = engine;
}
}
public class Engine {
……
}

组合关系

 组合(Composition)关系也表示类之间整体和部分的关系,但是在组合关系中整体对象可以控制成员对象的生命周期,一旦整体对象不存在,成员对象也将不存在,成员对象与整体对象之间具有同生共死的关系。

依赖关系

泛化关系

 泛化(Generalization)关系也就是继承关系,用于描述父类与子类之间的关系,父类又称作基类或超类,子类又称作派生类。在UML中,泛化关系用带空心三角形的直线来表示。

接口与实现关系

 在接口中,通常没有属性,而且所有的操作都是抽象的,只有操作的声明,没有操作的实现。UML中用与类的表示法类似的方式表示接口:

 接口之间也可以有与类之间关系类似的继承关系和依赖关系,但是接口和类之间还存在一种实现(Realization)关系,在这种关系中,类实现了接口,类中的操作实现了接口中所声明的操作。在UML中,类与接口之间的实现关系用带空心三角形的虚线来表示:


CATALOG
  1. 1.
  2. 2. 类的UML图示
  3. 3. 类与类之间的关系
    1. 3.1. 关联关系
      1. 3.1.1. 双向关联
      2. 3.1.2. 单向关联
      3. 3.1.3. 自关联
      4. 3.1.4. 多重关联
      5. 3.1.5. 聚合关系
      6. 3.1.6. 组合关系
    2. 3.2. 依赖关系
    3. 3.3. 泛化关系
    4. 3.4. 接口与实现关系