问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

UML图之类图:概念、作用与表示方法详解

创作时间:
作者:
@小白创作中心

UML图之类图:概念、作用与表示方法详解

引用
CSDN
1.
https://blog.csdn.net/qq_68538526/article/details/145692880

UML类图是软件工程中用于描述系统静态结构的重要工具,它清晰地展现了类的属性、方法以及类之间的各种关系。本文将详细介绍UML类图的基本概念、作用及其表示方法,帮助读者掌握这一核心建模技术。

1. 什么是UML图

统一建模语言(Unified Modeling Language,简称 UML),是一种专门用于软件设计的可视化建模语言。其显著特点在于简洁性、通用性、图形化表达,能够精准呈现软件设计过程中的动态与静态信息,为软件开发人员提供了一套直观、高效的沟通与设计工具。

UML 从多个维度对目标系统进行剖析,一共定义了九种不同类型的图,分别是用例图、类图、对象图、状态图、活动图、时序图、协作图、构件图、部署图等 9 种图,每种图都从独特的视角展现系统特性:

  • 用例图:从用户角度出发,展示系统的功能需求以及用户与系统之间的交互关系,明确系统的边界和功能范围。
  • 类图:着重描述系统中类的结构、属性以及类与类之间的关系,体现系统的静态结构,是面向对象设计的核心。
  • 对象图:作为类图的实例化展示,呈现特定时刻系统中对象的状态和对象之间的关系,帮助理解系统在运行时的具体情况。
  • 状态图:聚焦于对象的状态变化,展示对象在不同事件驱动下的状态迁移过程,用于分析系统中对象的动态行为。
  • 活动图:类似于流程图,主要描述系统中各种活动的执行顺序和流程,常用于分析业务流程或系统的工作流程。
  • 时序图:以时间顺序为线索,展示对象之间的消息传递和交互过程,清晰呈现系统中行为的时间序列。
  • 协作图:强调对象之间的协作关系,通过展示对象之间的链接和消息传递,反映系统中对象的组织结构和协作方式。
  • 构件图:用于描述系统中软件构件的组织和依赖关系,展示系统的物理架构,便于理解软件系统的组成结构。
  • 部署图:展示系统中硬件设备的拓扑结构以及软件构件在这些硬件上的部署情况,体现系统的物理部署环境。

2. 类图的概述

类图(Class diagram)作为 UML 中至关重要的一种图,主要用于展现模型的静态结构。它将系统中的各类实体抽象为类,并详细刻画类的内部构成,包括类所具备的属性以及能够执行的操作方法。同时,类图还着重描绘这些类与其他类之间错综复杂的关系,如继承关系体现了类之间的层次结构,子类可以继承父类的属性和方法;关联关系则展示了不同类之间的某种联系,例如客户类与订单类之间可能存在的关联;聚合关系和组合关系进一步区分了整体与部分之间的强弱关联程度 。

值得注意的是,类图侧重于呈现系统的稳定结构,并不展示诸如对象在运行时的状态变化、消息传递的时间顺序等暂时性信息。正是由于其对系统静态特性的精准表达,类图成为面向对象建模的核心组成部分,为软件开发过程中的系统设计、代码编写以及后续维护提供了坚实的基础框架,帮助开发人员从宏观和微观层面深入理解系统架构,确保软件系统的设计具备良好的可扩展性、可维护性和可复用性。

3. 类图的作用

在软件工程领域,类图是一种极为关键的静态结构图,它以直观且系统的方式,全面描述了系统中类的集合。在类图中,每个类的属性都被清晰罗列,这些属性代表了类所具备的特征与数据成员;同时,类与类之间错综复杂的关系也被精准展现。通过类图,开发人员能够一目了然地洞悉系统中各类实体的构成以及它们之间的交互逻辑,极大地简化了对复杂系统的理解过程。

类图贯穿于软件开发的关键阶段,是系统分析和设计阶段的核心产物。在系统分析阶段,它帮助分析师梳理业务需求,将现实世界中的概念和业务规则转化为软件系统中的类和关系;在设计阶段,类图则为架构师和开发人员提供了详细的设计蓝图,指导他们如何构建类的层次结构、设计类的接口以及规划类之间的协作方式。不仅如此,类图还是系统编码和测试的重要依据。在编码过程中,开发人员依据类图将设计转化为实际代码,确保代码结构与设计模型的一致性;在测试阶段,类图为测试人员提供了测试范围和测试用例设计的参考,有助于全面验证系统的功能和性能。

4. 类图表示法

4.1 类的表示方式

在UML类图中,类使用包含类名、属性(field) 和方法(method) 且带有分割线的矩形来表示,比如下图表示一个 Student 类,它包含 name, age 和 tel 这3个属性,以及 study() 方法。

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

  • +:表示 public
  • -:表示 private
  • #:表示 protected

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

举个例子:
上图定义了一个属性和三个方法:

  • name 属性,修饰符是 private,类型是 Sting 类型,没有赋初值。
  • eat() 方法,修饰符是 pubulic,没有参数,返回值为 void。
  • drink() 方法,修饰符是 private,没有参数,返回值是 String。
  • sleep() 方法,修饰符是 protected,有两个参数,分别是 String 类型的 address 和 int 类型的 time,返回值是 int 类型。

4.2. 类与类之间关系的表示方式

4.2.1. 关联关系

关联关系是对象之间的一种引用关系,用于表示一类对象与另一类对象之间的联系,如老师和学生、师傅和徒弟、丈夫和妻子等。关联关系是类与类之间最常用的一种关系,分为一般关联关系、聚合关系和组合关系。我们先介绍一般关联。

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

4.2.1.1. 单向关联

在UML类图中单向关联用一个带箭头的实线表示。下图表示每个学生都有一所学校,这通过让 Student 类持有一个类型为 School 的成员变量类实现。

4.2.1.2. 双向关联

从图中我们很容易看出,所谓的双向关联就是双方各自持有对方类型的成员变量。在UML类图中,双向关联用一个不带箭头的直线表示。图中在 President 类中维护一个List,表示一个每一个董事长可以拥有多个公司;在 Corporaton 类中维护一个 President 类型的成员变量表示这个公司被哪个董事长所拥有。

4.2.1.3. 自关联

自关联在UML类图中用一个带有箭头且指向自身的线表示。下图的意思就是 Name 类包含类型为 Name 的成员变量,也就是“自己包含自己”。

4.2.2 聚合关系

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

聚合关系也是通过成员对象来实现的,其中成员对象是整体对象的一部分,但是成员对象可以脱离整体对象而独立存在。例如,学校与老师的关系,学校包含老师,但如果学校停办了,老师依然存在。

在 UML 类图中,聚合关系可以用带空心菱形的实线来表示,菱形指向整体。下图所示是学校和教师的关系图:

4.2.3 组合关系

组合表示类之间的整体与部分的关系,但它是一种更强烈的聚合关系。

在组合关系中,整体对象可以控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在,部分对象不能脱离整体对象而存在。例如,学校和学校操场的关系,没有了学校,学校的操场也就不存在了。

在 UML 类图中,组合关系用带实心菱形的实线来表示,菱形指向整体。下图所示是学校和学校操场的关系图:

4.2.4 依赖关系

依赖关系是一种使用关系,它是对象之间耦合度最弱的一种关联方式,是临时性的关联。在代码中,某个类的方法通过局部变量、方法的参数或者对静态方法的调用来访问另一个类(被依赖类)中的某些方法来完成一些职责。

在 UML 类图中,依赖关系使用带箭头的虚线来表示,箭头从使用类指向被依赖的类。

下图所示是学生和书本的关系图,学生学习,没有书类,学生类就不能执行学习方法:

4.2.5 继承关系

继承关系是对象之间耦合度最大的一种关系,表示一般与特殊的关系,是父类与子类之间的关系,是一种继承关系。

在 UML 类图中,泛化关系用带空心三角箭头的实线来表示,箭头从子类指向父类。在代码实现时,使用面向对象的继承机制来实现泛化关系。例如,Student 类和 Teacher 类都是 Person 类的子类,其类图如下图所示:

4.2.6 实现关系

实现关系是接口与实现类之间的关系。在这种关系中,类实现了接口,类中的操作实现了接口中所声明的所有的抽象操作。

在 UML 类图中,实现关系使用带空心三角箭头的虚线来表示,箭头从实现类指向接口。

例如,学生和老师实现了人类这个接口,如下图所示:

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号