UML建模图文详解教程——类图


版权声明

  • 本文原创作者:谷哥的小弟
  • 作者博客地址:http://blog.csdn.net/lfdfhl
  • 本文参考资料:《UML面向对象分析、建模与设计(第2版)》吕云翔,赵天宇 著

在这里插入图片描述

类图概述

类图用来描述系统内各种实体的类型以及不同的实体之间是如何彼此关联的,显示了系统的内部静态结构,因此类图的描述对于系统的整个生命周期都是有效的。如果说用例图是系统的“面子”,那么类图就是系统的“里子”。类图不仅包含了系统定义的各种类,还包含了各种关系,如关联、泛化和依赖等。类图大部分涉及对系统的词汇建模、对协作建模或对模式建模。作为面向对象系统的建模中最常见的图,类图是组件图与部署图的基础,它不仅对结构模型的可视化、详述和文档化很重要,而且对通过正向与逆向工程构造可执行的系统也很重要。

类图(class diagram)是显示一组类、接口、协作以及它们之间关系的图。一个类图主要通过系统中的类以及各个类之间的关系来描述系统的静态结构。

类图主要包含七种元素:类、接口、协作、依赖关系、泛化关系、实现关系和关联关系类图中还可以含有包或子系统,用来把模型元素聚集成更大的组块。与其他 UML 图类似类图同样可以创建约束和注释等。

核心知识点

请务必熟悉并掌握以下核心知识点。

类(class)是一组拥有相同的属性、操作、方法、关系和行为的对象描述符。

在UML中,类表达成一个有三个分隔区的矩形。其中,顶端显示类名(name),中间显示类的属性(attribute),尾端显示类的操作(operation)。

示例如下:
在这里插入图片描述

接口

接口(interface)是一个被命名的操作集合,用于描述类或组件的一个服务。接口不同于任何类或类型,它不描述任何结构,因此不包含任何属性;也不描述任何实现,因此不包含任何实现操作的方法。一个接口可以有多个操作,每个操作都是公共的。一个类可以实现多个接口。为了显示接口中的操作,接口可以表示为带有<< interface >>构造型的类。

示例如下:

在这里插入图片描述

类图中的关系

类图中涉及了 UML 中最常用的四种关系,即关联关系、泛化关系、依赖关系和实现关系。

关联关系

关联关系是两个或多个类元之间的关系,它描述了这些类元的实例间的连接。

多重性

多重性(multiplicity)放在靠近关联端的部分,表示在关联关系中源端的一个对象可以与目标类的多少个对象之间有关联。在 UML中,多重性的格式为“min…max”。其中,min 和 max分别表示该端最少和最多可以有多少对象与另一端关联。常用的多重性有0,1,0…1(0或1)、0…*(0或更多)、1…*(1或更多)、* (0 或更多)等。

例如,Student 类与 School类的关联关系的多重性,即一个学校可以有一个或更多个学生,而一个学生可能在 0所或更多所学校中学习。

在这里插入图片描述

导航性

导航性(navigation)是一个布尔值,用来说明运行时刻是否可能穿越一个关联。对于二元关联,当对一个关联端(目标端)设置了导航性就意味着可以从另一端(源端)指定类型的一个值得到目标端的一个或一组值(取决于关联端的多重性)。

例如,一个订单可以获取到该订单的一份产品列表,但一个产品却无法获取到哪些订单包括了该产品。

在这里插入图片描述

聚合与组合

聚合与组合是特殊的关联。

有时候我们需要对“整体-部分”的关系建模,即一个描述整体的对象由一些描述部分的对象组成,这种关系称为聚合(aggregation)。聚合关系是一种特殊形式的关联关系,用来表示一个“整体-部分”的关系。在聚合关系中,“部分”可以独立于“整体”存在。在 UML中,通过在关联路径上靠近表示“整体”的类的一端上使用一个小空心菱形来表示。

例如,ClassRoom(教室)类与 Desk(课桌)类之间构成一个聚合关系即教室中有许多课桌,当教室对象不存在时课桌同样可以作为其他用途,二者是独立存在的。

在这里插入图片描述

组合关系(composition)描述的也是整体与部分的关系,它是一种更强形式的聚合关系,又被称为强聚合。与聚合关系的区别在于,在组合关系中的部分要完全依赖于整体。这种依赖性主要表现在两个方面:部分对象在某一特定时刻只能属于一个组合(整体)对象组合对象与部分对象具有重合的生命周期,组合对象销毁的时候,所有从属部分必须同时销毁。

例如,Window(窗口)类与 Frame(架)类之间构成组合关系,Frame必须附加在 Window 中存在当一个 Window 被删除时其中的 Frame 部分也必须被删除。

在这里插入图片描述

泛化关系

泛化关系描述了一种“is-a-kind-of”(是··…·.的一种)关系,它的使用有利于简化有些类的描述,可以不必重复添加大量相同的属性和操作等特性而是通过泛化对应的继承机制使子类共享父类的属性和操作。在 UML 中,泛化关系通过一个由子类指向父类的空心三角形箭头表示。

例如,Tiger类和 Bird类继承了Animal类的属性和操作,还添加了属于自己的某些属性和操作。

在这里插入图片描述
在最简单的情况下,每个类最多能拥有一个父类,这称为单继承。而在更复杂的情况中,子类可以有多个父类并继承了所有父类的结构、行为和约束。这被称为多重继承(或多重泛化)。

在这里插入图片描述

依赖关系

依赖关系表示的是两个元素之间语义上的连接关系。对于两个元素 X和 Y,如果元素X的变化会引起对另一个元素 Y 的变化,则称元素Y 依赖于 X。其中,X 被称为提供者,Y被称为客户。依赖关系使用一个指向提供者的虚线箭头来表示。

在这里插入图片描述

由于依赖关系语义的宽泛性,在类图中要标记出所有的依赖关系是一件费时费力的事情并且会降低模型的可读性。因此建议在类图中尽量不使用依赖关系。

实现关系

实现关系用来表示类与实现之间的关系。一个类可以实现多个接口,一个接口也可以被多个类实现。在 UML中实现关系表示为一条指向提供规格说明的元素的虚线三角形箭头。

例如, Wall类实现了 Measurable 接口。即,在 Wall类中要实现接口中声明的三个操作。

在这里插入图片描述

分析类

分析类是一个主要用于开发过程中的概念,用来获取系统中主要的“职责簇”,代表系统的原型类,是带有某些构造型的类元素。分析类包括边界类(boundary)、控制类(control)和实体类(entity)三种。

在这里插入图片描述
边界类是一种用于对系统外部环境与其内部运作之间的交互进行建模的类。这种交互包括转换事件,并记录系统表示方式中的变更。一般来说,边界类的实例可以是窗口、通信协议、外部设备接口、传感器、终端等。总之,在两个有交互的关键对象之间都应当考虑建立边界类。

控制类是一种对一个或多个用例所特有的控制行为进行建模的类。控制类的实例称为控制对象,用来控制其他对象,体现出应用程序的执行逻辑。

实体类是用于对必须存储的信息和相关行为建模的类。简单来说,实体类就是对来自现实世界的具体事物的抽象。实体类的主要职责是存储和管理系统内部的信息,它也可以有行为,但这些行为必须与它所代表的实体对象密切相关。

航空购票系统类图

根据业务需求,我们应该确定出系统主要可以包括哪些类在航空购票系统类图中可以归结出用户User、管理员Administrator、机场Airport、航班Flight与机票Ticket几个实体类,还应该包括有一个系统控制类TicketManagement来控制整个系统。由于分析阶段尚未进行用户界面设计,因此类图中暂时不涉及边界类,需要在设计阶段再对类图进一步完善。

与创建用例图类似,请在Model中创建类图;图示如下:

在这里插入图片描述
创建完毕,图示如下:

在这里插入图片描述
在类图上右键选择添加图,在弹出的窗口中选择UML Structural,在图的类型中选择Class;再单击确定;图示如下:

在这里插入图片描述
创建完毕,图示如下:

在这里插入图片描述
此时,点击工具箱就可以看到与类图相关的工具。如果没有与类图相关的工具,那么可以点击右上角更多的工具…即可;图示如下:

在这里插入图片描述
我们先来绘制User类。请左键单击Class,鼠标挪至绘图区弹出类的配置界面。请设置类的名字;图示如下:

在这里插入图片描述

单击确定后,图示如下:

在这里插入图片描述

接下来在项目浏览器中右键单击User实体再选择属性,图示如下:

在这里插入图片描述
此处,可以为User实体添加属性和操作。

先添加userID、password、info等三个属性;图示如下:

在这里插入图片描述

接下来为User实体添加login、register、searchMyFlight、bookMyTicket、cancleMyTicket、browserTicket、构造函数User等操作。这些操作的参数和返回值均设置为空;图示如下:

在这里插入图片描述

User实体绘制完成,图示如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/177779.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于软raid的实现及常见问题

RAID概念 磁盘阵列&#xff08;Redundant Arrays of Independent Disks&#xff0c;RAID&#xff09;&#xff0c;有“独立磁盘构成的具有冗余能力的阵列”之意。 磁盘阵列是由很多价格较便宜的磁盘&#xff0c;以硬件&#xff08;RAID卡&#xff09;或软件&#xff08;MDADM&…

【LeetCode刷题】--40.组合总和II

40.组合总和II 本题详解&#xff1a;回溯算法 class Solution {public List<List<Integer>> combinationSum2(int[] candidates, int target) {int len candidates.length;List<List<Integer>> res new ArrayList<>();if (len 0) {return re…

JSP内置对象

一、request对象 1、访问请求参数 2、在作用域中管理属性 3、获取Cookie 4、解决中文乱码 5、获取客户端信息 6、显示国际化信息 是一个javax.servlet.http.HttpServletRequest对象 request封装了用户浏览器提交的信息&#xff0c;因此可以调用相应的方法可以获取这些封…

VMware 16 Pro 安装以及下载

1、下载地址&#xff1a; https://www.aliyundrive.com/s/nj3PSD4TN9G 2、安装文件 右击打开 下一步 密钥&#xff1a;ZF3R0-FHED2-M80TY-8QYGC-NPKYF 到此&#xff0c;安装完毕

【python基础(三)】操作列表:for循环、正确缩进、切片的使用、元组

文章目录 一. 遍历整个列表1. 在for循环中执行更多操作2. 在for循环结束后执行一些操作 二. 避免缩进错误三. 创建数值列表1. 使用函数range()2. 使用range()创建数字列表3. 指定步长。4. 对数字列表执行简单的统计计算5. 列表解析 五. 使用列表的一部分-切片1. 切片2. 遍历切片…

基于单片机停车场环境监测系统仿真设计

**单片机设计介绍&#xff0c; 基于单片机停车场环境监测系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的停车场环境监测系统是一种利用单片机技术实现环境监测和数据处理的系统。它可以感知停车场的温湿…

什么是Jmeter?Jmeter使用的原理步骤是什么?

1.1 什么是 JMeter Apache JMeter 是 Apache 组织开发的基于 Java 的压力测试工具。用于对软件做压力测试&#xff0c;它最初被设计用于 Web 应用测试&#xff0c;但后来扩展到其他测试领域。 它可以用于测试静态和动态资源&#xff0c;例如静态文件、Java 小服务程序、CGI 脚本…

6.基于蜻蜓优化算法 (DA)优化的VMD参数(DA-VMD)

代码原理 基于蜻蜓优化算法 (Dragonfly Algorithm, DA) 优化的 VMD 参数&#xff08;DA-VMD&#xff09;是指使用蜻蜓优化算法对 VMD 方法中的参数进行自动调优和优化。 VMD&#xff08;Variational Mode Decomposition&#xff09;是一种信号分解方法&#xff0c;用于将复杂…

Java如何获取泛型类型

泛型&#xff08;Generic&#xff09; 泛型允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型&#xff0c;在实例化时作为参数指明这些类型。各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。Ada、Delphi、Eiffel、Java、C#、F#、Swift 和 Vis…

Unity开发之C#基础-File文件读取

前言 今天我们将要讲解到c#中 对于文件的读写是怎样的 那么没接触过特别系统编程小伙伴们应该会有一个疑问 这跟文件有什么关系呢&#xff1f; 我们这样来理解 首先 大家对电脑或多或少都应该有不少的了解吧 那么我们这些软件 都是通过变成一个一个文件保存在电脑中 我们才可以…

基于区域划分的GaN HEMT 准物理大信号模型

GaN HEMT器件的大信号等效电路模型分为经验基模型和物理基模型。经验基模型具有较高精度但参数提取困难&#xff0c;特别在GaN HEMT器件工艺不稳定的情况下不易应用。相比之下&#xff0c;物理基模型从器件工作机理出发&#xff0c;参数提取相对方便&#xff0c;且更容易更新和…

数字图像处理(冈萨雷斯)学习笔记

目录 一.机器视觉和计算机视觉二.图像处理基础1.什么是图像2.如何访问图像 三.图像仿射变换四.灰度变换 一.机器视觉和计算机视觉 机器视觉(Machine Vision,MV)和计算机视觉(Computer Vision&#xff0c;CV)的区别和联系&#xff1a; 机器视觉更注重广义图像信号(激光&#xff…

2023 年 亚太赛 APMCM ABC题 国际大学生数学建模挑战赛 |数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 以五一杯 A题为例子&#xff0c;以下是咱们做的一些想法呀&am…

01背包与完全背包学习总结

背包问题分类见下图 参考学习点击&#xff1a;代码随想录01背包讲解 01背包问题&#xff1a; 核心思路&#xff1a; 1、先遍历物品个数&#xff0c;再遍历背包容量。因为容量最先是最大的&#xff0c;往背包里放物品&#xff0c;所以背包容量在慢慢减少&#xff0c;但背包容量…

MySQL 8.2 Command Line Client打开时一闪而过闪退问题

MySQL8.2安装成功后&#xff0c;发现打开MySQL 8.0 Command Line Client时出现一闪而过&#xff0c;打不开的情况。 解决方案&#xff1a; 1、打开MySQL 8.2 Command Line Client文件位置 2、右键选择属性 3、复制它的目标 4、我复制下来的目标路径是这样的&#xff0c;"…

如何用cmd命令快速搭建FTP服务

环境&#xff1a; Win10专业版 问题描述&#xff1a; 如何用cmd命令快速搭建FTP服务 解决方案&#xff1a; 1.输入以下命令来安装IIS&#xff08;Internet Information Services&#xff09;&#xff1a; dism /online /enable-feature /featurename:IIS-FTPServer /all …

【Docker】Docker安装Nginx配置静态资源

1.下载镜像 2.创建nginx配置文件 3.创建nginx容器运行 4.配置nginx静态资源 1.下载镜像 Dockerhub官网&#xff1a;Docker docker pull nginx docker pull nginx下载最新版本 默认latest 下载指定版本docker pull nginx:xxx 2.创建nginx配置文件 启动容器之前要创建nginx…

计算机网络之物理层(数据通信有关)

一、概述 1.1物理层引入的目的 屏蔽掉传输介质的多样性&#xff0c;导致数据传输方式的不同&#xff1b;物理层的引入使得高层看到的数据都是统一的0,1构成的比特流 1.2.物理层如何实现屏蔽 物理层靠定义的不同的通信协议&#xff08;一般称通信规程&#xff09; 这些协议…

【大数据Hive】hive 优化策略之job任务优化

目录 一、前言 二、hive执行计划 2.1 hive explain简介 2.1.1 语法格式 2.1.2 查询计划阶段说明 2.2 操作演示 2.2.1 不加条件的查询计划分析 2.2.2 带条件的查询计划分析 三、MapReduce属性优化 3.1 本地模式 3.1.1 本地模式参数设置 3.1.2 本地模式操作演示 3.2 …

YOLOv8-seg改进:重新思考轻量化视觉Transformer中的局部感知CloFormer,提升上下文感知权重来增强局部特征 |2023清华

🚀🚀🚀本文改进:CloFormertAttention利用共享权重和上下文感知权重有效地提取高频局部特征表示 🚀🚀🚀SEAM、MultiSEAM分割物与物相互遮挡、分割小目标性能 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带你学习YOLOv8,从入门到创新,轻轻…