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

news2025/1/16 21:55:00

版权声明

  • 本文原创作者:谷哥的小弟
  • 作者博客地址: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实体绘制完成,图示如下:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机毕业设计 基于微信小程序的“共享书角”图书借还管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

非结构化数据保护

计算机信息化系统中的数据分为结构化数据和非结构化数据。非结构化数据其格式非常多样&#xff0c;标准也是多样性的&#xff0c;而且在技术上非结构化信息比结构化信息更难标准化和理解。 非结构化数据是数据结构不规则或不完整&#xff0c;没有预定义的数据模型&#xff0c;…

阿里云 ACK 新升级,打造智算时代的现代化应用平台

云布道师 今天&#xff0c;能想到的或是想不到的领域&#xff0c;对容器和 Kubernetes 的需求都居高不减&#xff0c;使这项技术正在真正走向无处不在。 在 2023 云栖大会上&#xff0c;阿里云云原生产品线容器服务负责人易立关于容器服务 ACK 在本届亚运会上应用的介绍&#…

智慧法院档案数字化解决方案

智慧法院档案数字化解决方案可以采用以下步骤&#xff1a; 1. 确定数字化目标&#xff1a;明确数字化的目标和范围&#xff0c;比如将所有的案件相关文件、纸质档案和材料进行数字化。 2. 确定数字化流程&#xff1a;制定数字化的流程和标准&#xff0c;比如采用哪些设备和软件…

连接k8s和凌鲨

通过连接k8s和凌鲨&#xff0c;可以让研发过程中的重用操作更加方便。 更新容器镜像调整部署规模查看日志运行命令 架构 所有操作通过k8s proxy连接&#xff0c;通过设置namespace label赋予访问权限。只有赋予特定label的namespace才能被访问。 使用步骤 部署k8s proxy 你…

「Docker」如何在苹果电脑上构建简单的Go云原生程序「MacOS」

介绍 使用Docker开发Golang云原生应用程序&#xff0c;使用Golang服务和Redis服务 注&#xff1a;写得很详细 为方便我的朋友可以看懂 环境部署 确保已经安装Go、docker等基础配置 官网下载链接直达&#xff1a;Docker官网下载 Go官网下载 操作步骤 第一步 创建一个…

io+day5

1&#xff0c;select服务端 1 #include<myhead.h>2 3 #define PORT 8888 //端口号4 #define IP "192.168.228.165" //IP地址5 6 7 int main(int argc, const char *argv[])8 {9 //1、创建用于接受连接的套接字10 int sfd socket(…

elasticsearch安装分词器插件

查看插件安装情况 elasticsearch-plugin list 插件在线安装 bin/elasticsearch-plugin install analysis-icu 离线安装ik分词 cd plugins wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.17.7/elasticsearch-analysis-ik-7.17.7.zip unzi…

区域人员超限AI算法的介绍及TSINGSEE视频智能分析技术的行业应用

视频AI智能分析已经渗透到人类生活及社会发展的各个方面。从生活中的人脸识别、停车场的车牌识别、工厂园区的翻越围栏识别、入侵识别、工地的安全帽识别、车间流水线产品的品质缺陷AI检测等&#xff0c;AI智能分析技术无处不在。在某些场景中&#xff0c;重点区域的人数统计与…

[计算机网络实验]头歌 实验二 以太网帧、IP报文分析(含部分分析)

目录 第1关&#xff1a;Wireshark基本使用入门 【实验目的】 【实验环境】 【本地主机、平台虚拟机之间数据传递】 wireshark基本用法】 1、wireshark主界面 2、抓取分组操作 3、Wireshark窗口功能 4、筛选分组操作 【实验操作】 ​编辑 第2关&#xff1a;Ethernet帧…

【华为OD题库-033】经典屏保-java

题目 DVD机在视频输出时&#xff0c;为了保护电视显像管&#xff0c;在待机状态会显示"屏保动画”&#xff0c;如下图所示,DVD Logo在屏幕内来回运动&#xff0c;碰到边缘会反弹:请根据如下要求&#xff0c;实现屏保Logo坐标的计算算法 1、屏幕是一个800 * 600像素的矩形&…

基于STM32的烟雾浓度检测报警仿真设计(仿真+程序+讲解视频)

这里写目录标题 &#x1f4d1;1.主要功能&#x1f4d1;2.仿真&#x1f4d1;3. 程序&#x1f4d1;4. 资料清单&下载链接&#x1f4d1;[资料下载链接](https://docs.qq.com/doc/DS0VHTmxmUHBtVGVP) 基于STM32的烟雾浓度检测报警仿真设计(仿真程序讲解&#xff09; 仿真图prot…

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

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 cs数模团队在亚太赛 APMCM前为大家提供了许多资料的内容呀&…

Linux 进程等待

在2号手册里查wait&#xff08;&#xff09;。wait()等待任意一个子进程的状态。 wait&#xff08;&#xff09;等待成功会返回该子进程的id,返回失败会返回-1&#xff1a; 小实验 子进程的退出码 子进程执行work()&#xff0c;父进程wait子进程。 子进程跑完5秒之后就e…

如何保持口腔健康?羊大师全面指南!

口腔健康对于我们的整体健康至关重要。保持口腔健康可以帮助我们避免口腔疾病&#xff0c;如龋齿、牙周疾病等。口腔健康与身体其他部分的健康也有很大的关系。我们应该如何保持口腔健康呢&#xff1f;在本文中&#xff0c;小编羊大师将为您提供全面指南&#xff0c;详细介绍如…

这样写postman实现参数化,阿里p8都直呼牛逼

什么时候会用到参数化 比如&#xff1a;一个模块要用多组不同数据进行测试 验证业务的正确性 Login模块&#xff1a;正确的用户名&#xff0c;密码 成功&#xff1b;错误的用户名&#xff0c;正确的密码 失败 postman实现参数化 在实际的接口测试中&#xff0c;部分参数…

JVS低代码表单设计:数据联动详解(多级数据级、数据回显等)

在这信息化时代&#xff0c;表单作为数据的收集和展示工具&#xff0c;已经渗透到不同的角落。JVS低代码对表单的设计和操作进行了不断的优化和创新。其中&#xff0c;联动回显作为一项重要的功能&#xff0c;无论是多级数据级联控制、组件的联动控制&#xff0c;还是多表的数据…

2023年【上海市安全员C证】考试及上海市安全员C证找解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年上海市安全员C证考试为正在备考上海市安全员C证操作证的学员准备的理论考试专题&#xff0c;每个月更新的上海市安全员C证找解析祝您顺利通过上海市安全员C证考试。 1、【多选题】2017年9月颁发的《中共上海市委…

三维控件中定位一个点_vtkPointWidget

开发环境&#xff1a; Windows 11 家庭中文版Microsoft Visual Studio Community 2019VTK-9.3.0.rc0vtk-example参考代码 demo解决问题&#xff1a;允许用户使用三维光标在三维空间中定位一个点。关键类vtkPointWidget , 光标具有轮廓边界框、轴对齐十字准线和轴阴影&#xff…

c++ std::variant用法

std::variant Union类型的问题&#xff1a; 无法知道当前使用的类型是什么union无法自动调用底层数据成员的析构函数。联合体无法对其内部的数据属性的生命周期的全面支持&#xff0c;因为当外部代码调用Union时在切换类型&#xff0c;它无法做到对当前使用的对象&#xff0c…