其他分享
首页 > 其他分享> > UML 类图

UML 类图

作者:互联网

UML 图

1、概述

UML-Unified Modeling Language 统一建模语言,又称标准建模语言。是用来对软件密集系统进行可视化建模的一种语言。UML 的定义包括 UML 语义和 UML 表示法两个元素。

2、作用

用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法,尤其是在软件架构层次,尤为突出。

3、分类

从不同的角度出发,UML 定义了用例图、类图、对象图、状态图、活动图、顺序图、协作图、构件图、部署图 9 种;包图、组合结构图、交互概览图 3 种。

4、主要模型

在UML系统开发中有三个主要的模型:

功能模型

对象模型

动态模型

本编文章主要介绍对象模型种的类图。

UML 类图

1、作用

类图是描述系统中的类,以及各个类之间的关系的静态视图。能够让我们在正确编写代码以前对系统有一个全面的认识。

类图是一种模型类型,确切的说,是一种静态模型类型。类图表示类、接口和它们之间的协作关系。

2、类的表示法

类(Class):一般是用三层矩形框表示,第一层表示类的名称,第二层表示的是字段和属性,第三层则是类的方法。第一层中,如果是抽象类,需用斜体显示。

属性/方法名称前面的加号表示了这个属性或方法的可见性,UML类图中表示可见性的符号有三种:

没有符号表示 default;带下划线的表示 static;斜体表示加有 abstract 关键字

属性的完整表示方式是: 可见性 变量名: 类型 [= 缺省值]

方法的完整表示方式是: 可见性 方法名(参数列表) [: 返回类型]

注意:

​ 1、中括号中的内容是可选的

​ 2、也有将类型放在变量名前,返回值类型放在方法名前面

举个栗子,如下图:

这是一个 Student 类,有三个私有属性,和三个公共的方法。

3、类与类之间的关系

类与类之间的 6 种关系:继承(Generalization)、实现(Realization)、关联(Association)、聚合(Aggregation)、组合(Composition)、依赖(Dependency)。

6 种关系的耦合度强弱顺序:继承 = 实现 > 组合 > 聚合 > 关联 > 依赖

3.1、依赖关系

语义:依赖(Dependency) 关系是一种使用关系,特定事物的改变可能会影响到使用该事物的其它事物,在需要表示一个事物使用另一个事物时使用依赖关系。

表示法:依赖关系使用带箭头的虚线来表示,箭头从使用类指向被依赖的类。

大多数情况下,依赖关系体现以下三种情况中:

例如:司机开车,司机类(Driver) 要有汽车类(Car) 才能开,所以在 Driver 类的 drive() 方法中将 Car 类型的对象作为一个参数传递,以便在 drive() 方法中能够操纵汽车类。因此 Driver 类依赖 Car 类。

对应的 Java 代码:

/**
 * Driver 类
 */
public class Driver {
    public void drive(Car car) {
        ......
    }
}
/**
 * Car 类
 */
public class Car {
    public void move() {
        ......
    }
}

3.2、关联关系

语义:关联(Association) 关系是对象之间的一种引用关系,用于表示一类对象与另一类对象之间的联系。这种关联关系可以使用has-a 表示。

关联关系是类与类之间最常用的一种关系,分为一般关联关系、聚合关系和组合关系。我们先介绍一般关联。

关联又可以分为单向关联、双向关联、自关联。

a) 单向关联

表示法:单向关联使用一个带箭头的实线表示

例如:程序员都有自己的电脑

上图可以看出程序员(Programmer) 类中有一个 Computer 类型的成员变量。

对应的 Java 代码:

/**
 * Programmer 类
 */
public class Programmer {
    // Computer 类型的成员变量
    private Computer computer;
}
/**
 * Computer 类
 */
public class Computer {
    
}
b) 双向关联

表示法:双向关联使用一个不带箭头的实线表示

例如:老师和学生的关系,老师有学生,而学生也有老师

上图可以看出所谓的双向关联就是双方各自持有对方类型的成员变量,Teacher 类中有一个 Student 类型的成员变量,而 Student 类中有一个 Teacher 类型的成员变量。

对应的 Java 代码:

/**
 * Teacher 类
 */
public class Teacher {
    // Student 类型的成员变量
    private Student stuednt;
}
/**
 * Student 类
 */
public class Student {
    // Teacher 类型的成员变量
    private Teacher teacher;
}
c) 自关联

表示法:自关联使用一个带有箭头且指向自身的实线表示

例如:

上图的意思就是Node类包含类型为Node的成员变量,也就是“自己包含自己”。

对应的 Java 代码:

/**
 * Node 类
 */
public class Node {
    // Node 类型的成员变量
    private Node node;
}

3.3、聚合关系

语义:聚合关系是关联关系的一种,是强关联关系,是整体和部分之间的关系。

表示法:聚合关系用带箭头,尾部带有空心菱形的实线表示,从”整体“指向”部分“

在聚合关系中,整体的生命周期,不会决定部分的生命周期。

例如:鞋子和鞋带的关系,鞋带脱离鞋子可以单独存在,反之鞋子也可以单独存在,两者聚合在一起就构成了一个完整的鞋子,就是整体和部分的关系。

聚合关系强调是“整体”包含“部分”,但是“部分”可以脱离“整体“而单独存在,比如上图鞋子(Shoes) 包含了鞋带(Shoelaces) ,鞋子没有了鞋带是可以单独存在的,而鞋带脱离了鞋子也是可以单独存在的。

对应的 Java 代码:

/**
 * Shoes 类
 */
public class Node {
    // Shoelaces 类型的成员变量
    private Shoelaces shoelaces;
}
/**
 * Shoelaces 类
 */
public class Shoelaces {
    
}

像以下这些关系都可以用聚合关系来描述:

汽车和发动机、汽车和轮胎 ......

主板和 CPU、主板和显卡、主板和内存条 ......

3.4、组合关系

语义:组合关系也可以看作是一种特殊的聚合关系,是一种比聚合关系还要强的关系。

整体的生命周期决定部分的生命周期,部分是依附在整体上面的,有时候也有人称为合成关系。

表示法:聚合关系用带箭头,尾部带有实心菱形的实线表示,从”整体“指向”部分“

组合关系与聚合关系最大的不同在于:组合关系这里的“部分”脱离了“整体”是无法存活的,部分就不复存在。

例如:人体和细胞的关系

细胞组成人的一部分,显然,细胞脱离了人,是不能单独存在的。

对应的 Java 代码:

/**
 * People 类
 */
public class People {
    // People 类型的成员变量
    private People people;
}
/**
 * Cell 类
 */
public class Cell {
    
}

3.5、继承关系

语义:继承(Generalization) 关系,又叫做泛化关系。指的就是:类和类、接口与接口之间的继承关系,就是基类与派生类(父类与子类) 之间的关系。继承关系可以用is-a 表示。

表示法:继承关系使用带空心三角箭头的实线表示继承(泛化) 关系,从子类指向父类

例如:小狗是一个动物,就可以表示为 Dog 是一个 (is-a) 动物,这就是继承关系

继承使用的是extends 关键字。子类会继承父类公共的属性与方法

对应的 Java 代码:

/**
 * Animal 类
 */
public class Animal {
    
}
/**
 * Dog 类
 */
public class Dog extends Animal {
    
}

3.6、实现关系

语义:实现关系是接口与实现类之间的关系。实现关系可以用like-a 表示。

表示法:使用带空心三角箭头的虚线线表示实现关系,从实现类指向接口

例如:汽车实现了交通工具

实现使用的是implements 关键字。

标签:关系,类图,关联,public,UML,class
来源: https://www.cnblogs.com/zxy1221/p/16335190.html