UML中类和类之间关系和各种图

news2024/11/18 19:47:55

文章目录

    • 1.UML概述
    • 2.UML建模工具
    • 3.常见UML图_类图
    • 4.类图之类和类之间的关系
    • 5.用例图
      • 1.用例图是什么
      • 2.用例图所包含的元素
      • 3.用例图所包含的关系
    • 6.状态图
      • 1.状态图是什么?
      • 2.状态图所包含的元素
    • 7.活动图
      • 1.活动图的元素
    • 8.时序图
      • 1.时序图是什么?
      • 2.时序图的元素
    • 9.组件图
    • 10.部署图

1.UML概述

百度百科截图:
在这里插入图片描述
首先了解一下软件开发生命周期:
做需求(项目经理,产品跟客户去谈,比如要求这个页面怎么样,点击按钮出现什么效果)–>形成文档(需要什么描述清楚)–>系统设计(设计一下整个功能有那些类,需要准备的数据库表)–>开发人员编写代码–>测试–>运维…
这里重点在于系统设计:
就好比在实际生活中要盖一栋大楼,一栋大厦,这个时候是不是需要一个设计的图纸,因为只有设计好之后,才知道设计的合不合理。如果设计得不好,就会导致楼塌,豆腐渣工程,如果设计的好,就可以给建筑工人按照图纸进行设计。
而软件开发也是一样的,需要先进行软件设计,而不是开发人员上来就写,这样可能会写一步,不知道第二步。有了系统设计,这样就会比较具体。
系统设计–>“画图纸”–>UML–>图形化语言(图标式语言)
比如在公共场所,看到一些图标,比如禁止吸烟,这样一看到图标就知道什么。
比如画什么图在程序中表示接口,抽象类,普通类,方法。
而通过图形化语言(图标式语言)就能将这些图画出来。

2.UML建模工具

能够实现UML的建模工具有:
IBM - Rational Rose
Sybase - Power Designer
韩国 - StarUML(简称SU)
MS - Visio
枫叶云(https://www.fynote.com/)

3.常见UML图_类图

(1)什么是类图?
定义系统中的类,描述类的内部结构(属性,方法等),表示类之间的关系(泛化,实现,依赖,关联,聚合,组合);
(2)类在UML中表示
名称部分(Name):在顶端存放;
属性部分(Attribute):在中间存放属性,属性类型(AttributeType),初始值(initialValue);
方法部分(Operation):底部存放操作,参数表(arg:ArgumentType),返回值(ReturnType);
在这里插入图片描述
(3)注释部分:解释说明
在这里插入图片描述

(4)属性部分:
4.1 属性语法:[可见性]属性名[:类型][ = 初始值][{属性字符串}];
注意:[]中的内容可有可无
属性字符串用来指定关于属性的其他信息,不一定是属性值,如果希望添加一个属性定义规则,但是没地方添加,可以写在属性字符串中。
4.2 可见性:属性的可见性只有公有(public +),私有(private -),受保护(protected #),UML中不存在默认,如果没有显示任何符号,就表示没有定义该属性;
公有:用"+“表示,可以在此类的外部使用查看该属性
私有:用”-“表示,不可以从外部类中访问该属性
保护:用”#“表示,常与泛化一起使用
(5)方法部分
5.1 方法语法:[可见性]操作名[(参数表)][:返回类型][{属性字符串}]
注意:[]中的内容可有可无,如果有多个参数列表的话,中间用逗号隔开
5.2 可见性
可见性:主要包括 公有(public +),私有(private),受保护(protected #),包内公有(package ~);
公有:用”+“表示,只要调用对象能访问操作所在的包,就能访问公有操作;
私有:用”-“表示,同一个类的对象才能调用私有的操作
保护:用”#“表示,子类对象才可以调用受保护操作
包内:用”~"表示,同一个包内的对象才可以调用包内公有的操作

4.类图之类和类之间的关系

(1)继承关系(泛化关系)
语义:
类和子类的关系,接口和子接口的关系
一个类(称为子类,子接口)继承另外一个类(称为父类,父接口)的功能,并可以增加它自己的新功能。
语法:
extends
符号:
一条带空心的三角箭头的实线,从子类指向父类,或者子接口指向父接口。
在这里插入图片描述
在这里插入图片描述
(2)实现关系
语义:
类和接口之间的关系:
一个类可以实现多个接口,实现所有接口的功能;体现了规范和实现分离的原则
语法:
implements
符号:
实现用一个带空心三角箭头的虚线表示,从类指向实现的接口
在这里插入图片描述
(3)依赖关系
语义:一个类A使用到了另一个类B,但是这种使用关系具有偶然性的、临时性的、非常弱的,但是类B的变化会影响到类A
举例:司机和汽车:司机开车,司机依赖于汽车才能完成驾驶任务,但汽车和司机可以分开存在。
语法:类B作为类A的方法的参数(或者局部变量)存在
符号:
由类A指向B的带箭头虚线表示
例如:学生需要吃饭,而到食堂吃饭比较偶然(可能去KFC或者其他餐馆)。因此学生需要依赖提供食物这个接口,而食堂实现提供食物接口。
在这里插入图片描述
(4)关联关系
语义:
类与类之间最基础的关系。它表示一个类的对象与另一个类的对象之间存在联系,但这种联系比较松散。比依赖关系强,必然的,长期的,强烈的。
举例:
老师和学生:老师和学生之间有联系,老师教学生,学生向老师学习,但他们之间的关系是比较松散的,学生可以有多个老师,老师也可以教多个学生
语法:
类B作为成员变量形成存于类A中
符号:
由类A指向类B的带箭头表示
例子:顾客购买商品一定产生订单,订单一定包含一些商品,但他们之间的关系是比较松散的,学生可以有多个订单,订单也可以包含多个商品。
在这里插入图片描述
(5)聚合关系
语义:
关联关系中的一种特例(一个类作为另一个类的成员变量)
整体和部分的关系
整体部分可分离,整体的生命周期和部分的生命周期不同,has-a的关系
举例:班级和学生:班级由学生组成,班级消失了,学生依然存在,他们可以加入其他班级
语法:
同关联关系
符号:
空心菱形加实线
例子:比如球员踢球的时候在球队里,退役了就不在,教练也可以在球队上课或者下课,队医也是。
在这里插入图片描述
(6)组合关系
语义:
关联关系的一种特例
整体和部分关系,整体部分不可分离,比聚合更强,contains-a的关系
整体的生命周期和部分的生命周期相同
人和四肢的关系
举例:房子和房间:房子由房间组成,如果房子被拆除,房间也不存在了。
语法:
同关联关系
符号:
实心菱形加实线
例子:人包含头和心脏,人要是挂掉了,心脏和头也没什么用。
在这里插入图片描述

5.用例图

1.用例图是什么

用例图是指由参与者、用例,边界以及它们之间的关系构成的用于描述系统功能的视图。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
用例图主要用来描述角色已经角色与用例之间的连接关系。说明的是谁要使用系统,以及他们使用该系统可以做些什么。一个用例图包含了多个模型元素,如系统,参与者和用例,并且显示这些元素之间的各种关系,如泛化、关联和依赖。它展示了一个外部用户能观察到的系统功能模型图。
【用途】:帮助开发团队以一种可视化的方式理解系统的功能需求。

2.用例图所包含的元素

(1)参与者(Actor)–与应用程序或系统进行交互的用户、组织或外部系统。用一个小人表示。
在这里插入图片描述
(2)用例(Use Case)–用例就是外部可见的系统功能,对系统提供的服务进行描述。用椭圆表示。
在这里插入图片描述
(3)子系统(Subsystem)–用来展示系统的一部分功能,这部分功能联系紧密。(这就是具体的系统功能)一般没咋画过
在这里插入图片描述

3.用例图所包含的关系

用例图中涉及的关系有:关联、泛化、包含、扩展。
在这里插入图片描述
a.关联(Association)
表示参与者与用例之间的通信,任何一方都可以发送或接收消息。(当前用户可以做一件什么事)
【箭头指向】:无箭头,将参与者与用例相连接,指向消息接收方
在这里插入图片描述
b.泛化(Inheritance)
就是通常理解的继承关系,子用例和父用例相似,但表现出更特别的行为;子用例将继承父用例的所有结构、行为和关系。子用例可以使用父用例的一段行为,也可以重载它。父用例通常是抽象的。在实际应用中很少使用泛化关系,子用例中的特殊行为都可以作为父用例中的备选流存在。
【箭头指向】:指向父用例
在这里插入图片描述
PS:父类的功能少,子类的功能多
c.包含(Include)
包含关系用来把一个较复杂用例所表示的功能分解成较小的步骤。包含关系对典型的应用就是复用,也就是定义中说的情景。但有时当某用例的事件流过于复杂时,为了简化用例的描述,我们也可以把某一段事件流抽象成为一个被包含的用例;相反,用例划分太细时,也可以抽象出一个基用例,来包含这些细颗粒的用例。这种情况类似于在过程设计语言中,将程序的某一段算法封装成一个子过程,然后再从主程序中调用这个一子过程。
例如:业务中,总是存在着维护某某信息的功能,如果将它作为一个用例,那添加,修改以及删除都要在用例详述中描述,过于复杂;如果分成添加用例,修改用例和删除用例,则划分太细。这时包含关系可以用来理清关系。
【箭头指向】:指向分解出来的功能用例
在这里插入图片描述
在这里插入图片描述
PS:预约功能、借书功能都包含登录功能,将通用功能(复用功能)提取,作为包含关系。
d:扩展(Extend)
扩展关系是指用例功能的延伸,相当于为基础用例提供一个附加功能。将基用例中一段相对独立并且可选的动作,用扩展(Extension)用例加以封装,再让它从基用例中声明的扩展点(Extension Point)上进行扩展,从而使基用例行为更简练和目标更集中。扩展用例可以访问基用例的属性,因此它能根据基用例中扩展点的当前状态来判断是否执行自己。但是扩展用例对基用例不可见。
对于一个扩展用例,可以在基用例上有几个扩展点。
在这里插入图片描述

6.状态图

1.状态图是什么?

状态图(statechart diagram):用来描述一个特定对象所有可能的状态,以及哪些事件将导致状态改变。

2.状态图所包含的元素

(1)箭头表示一个转换/一个动作
(2)箭头上的文字:表示一个事件
在这里插入图片描述
(3)长方形表示某种状态
在这里插入图片描述
(4)起始状态:是一种伪状态,只是表示从这里要开始(可选)
在这里插入图片描述
(5)结束状态:是一种伪状态,只是表示从这里要结束(可选)
在这里插入图片描述
示例:
在这里插入图片描述

7.活动图

活动图(activity diagram)是UML的动态规图之一,用来描述事物或对象的活动变化流程。类似流程图,描述从一个动作转移到另外一个动作,阐明了业务用例实现的工作流程。

1.活动图的元素

(1)开始:线条表示-活动流(ActionFlow):描述活动之间的有向关系,表示一个活动向另外一个活动之间的转移。用带箭头的实线表示。
在这里插入图片描述
(2)结束:
在这里插入图片描述

(3)活动:
在这里插入图片描述
(4)条件转移(分支):表示从一个活动按照某种条件转移到几个不同的活动。
在这里插入图片描述
(5)分劈和汇合:表示并发的同步行为,用同步杠表示
在这里插入图片描述
举例:
在这里插入图片描述
在这里插入图片描述

8.时序图

1.时序图是什么?

时序图(Sequence Diagram),又名序列图、循序图,是一种UML交互图,当用户进行某个操作的时候,按照时间的顺序看,各个模块之间如何调用的。描述了方法的调用过程,程序的执行流程,以及方法执行结束的返回值情况。所以用例图当中的一个用例会对应一个时序图,该时序图描述的是该功能/用例具体是怎么实现的,流程是什么。严格情况下,肯定是先设计再开发。

2.时序图的元素

(1)角色(Actor)
这个角色可以是用户,外部系统,机器等等。
在这里插入图片描述

(2)对象和生命线

  1. 对象名和类名,例如:dispatcherServlet:DispatcherServlet
  2. 只显示类名,即表示它是一个匿名对象,例如::DispatcherServlet
  3. 只显示对象名不显示类名,例如:dispatcherServlet

生命线:在时序图中表示从对象图标向下延伸一条虚线,表示对象存在的时间。
在这里插入图片描述
(3)活动条
在生命线的虚线上可以用活动条来表示某种行为的开始和结束,一般用小矩形来表示。
在这里插入图片描述
(4)消息
在面向对象的分析和设计中,对象的行为也被称为消息,因为对象之间的行为的交互也可以看成是对象之间发送消息实现的。通常,当一个对象调用另一个对象中的行为时,即完成了一次消息传递。
时序图中关注生命线之间的通信,这些通信就是对象发送的消息。UML用生命线间带有实习箭头的实现表示消息,每条消息从发送对象指向接收对象。
在这里插入图片描述

  • 同步消息(Synchronous Message):消息的发送者把控制传递给消息的接收者,然后停止活动,等待消息的接收者放弃或者返回控制。用来表示同步的意义。以一条实线+实心箭头表示。
  • 异步消息(Asynchronous Message):消息发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接受者返回消息或者控制。异步消息的接收者和发送者是并发工作的。以一条实线+大于号表示。
  • 返回消息(Return Message):返回消息表示从过程调用返回。以小于号+虚线表示。
    在这里插入图片描述
    自我调用消息:
    表示方法的自身调用以及一个对象内的一个方法调用另外一个方法。
    在这里插入图片描述
    例子:支付宝接入流程图
    在这里插入图片描述

9.组件图

组件图用来建立系统的各个组件之间的关系(网站分了多少层,每层有多少组件),它们是通过功能或者文件组织在一起,使用组件图可以帮助读者了解某个功能位于软件包的哪一位置,以及各个版本的软件包含哪些功能。
如javabean、ejb、jsp都是组件。在UML中,组件元素为:
在这里插入图片描述
组件图可以用来帮助设计系统的整体构架。
例如:
在这里插入图片描述

10.部署图

表示用于部署软件应用的物理设备信息。
例如:
在这里插入图片描述

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

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

相关文章

混合密码系统——用对称密钥提高速度,用公钥密码保护会话密钥

混合密码系统(Hybrid Cryptosystem)是一种结合了多种密码学技术和算法的加密方案,旨在充分利用不同密码算法的优势,以提供更强大的安全性、更高的效率或更好的功能特性。以下是对混合密码系统的详细解释: 组成要素 对…

操作系统与进程

1.操作系统 操作系统是计算机中的一个重要软件,它是一个专门进行管理的软件。操作系统可以通过驱动程序来间接管理外部硬件,也可以为计算机中的程序提供一个稳定的运行环境,从而来方便管理各种程序的运行,让程序之间的运行互不影…

用于探索和测试API的开源IDE工具-Bruno

1、前言 在进行软件开发与测试过程中,无论是开发人员还是测试人员,都会或多或少地进行接口调试与接口测试。尤其针对那种测试流程规范性很高的项目,测试人员进行接口测试是不可或缺的一部分。而这其中,大多数都会使用 Postman 作…

.Net 基于IIS部署blazor webassembly或WebApi

1.安装IIS(若安装,请忽略) 选择:控制面板–>程序–>程序和功能 选择:启动或关闭Windows功能,勾选相关项,再点击确定即可。 2.安装Hosting Bundle 以.net6为例,点击连接https://dotnet.microsoft.com/en-us/download/dot…

免费的录屏软件有哪些?可以试试这4款。

录屏软件已经被用于很多的领域和场景当中,能够帮助我们进行在线教学,线上培训,游戏直播与分享,视频记录等等。并且很多的录屏软件都有免费的功能,它们让大家的录屏变得更加的方便。如果大家需要录屏工具的话&#xff0…

828华为云征文|基于华为云Flexus X实例部署Uptime-Kuma服务器监控面板

目录 前言 一、Flexus云服务器X介绍 1.1 Flexus云服务器X实例简介 1.2 Flexus云服务器X实例特点 1.3 Flexus云服务器X实例场景需求 二、Flexus云服务器X购买 2.1 Flexus X实例购买 2.2 重置密码 2.3 登录服务器 三、Flexus X安装uptime-kuma面板 3.1 uptime-kuma介绍 3.2 uptim…

现在增长空间原来在这里

我们常常说,现在的经济形势不太好,赚钱太难了,卷得太厉害了。只能出海去卷,或者是到老年人的群体里去卷银发经济。 但是,现在就有一个巨大的市场,等待着大家去挖掘。这就是下沉市场。 以前我们也提过下沉…

[Admin] Things Need to Know

List View Bulk Actions Highlight: To take bulk actions on all of the available records in a list, you click the bulk action button without selecting any records.

无人机之数据处理技术篇

一、数据采集 无人机通过搭载的各种传感器和设备,如GPS、加速度计、陀螺仪、磁力计、激光雷达(LiDAR)、高光谱相机(Hyperspectral)、多光谱相机(Multispectral)以及普通相机等,实时采集飞行过程中的各种数据。这些数据包括无人机的位置、速度、高度、姿态…

无人机侦测:频谱无线电侦测设备技术详解

无人机侦测中的频谱无线电侦测设备技术是一项复杂而关键的技术,它主要通过分析无线电频谱中的信号来探测和识别无人机。以下是该技术的详细解析: 一、技术原理 频谱探测技术:该技术通过分析信号在频域上的分布和特性,来识别、测…

6.MySQL基本查询

目录 表的增删查改Insert(插入)插入替换插入替换2 Retrieve(查找)SELECT 列全列查找指定列查询查询字段为表达式为查询结果指定别名结果去重 WHERE 条件order by子句筛选分页结果 Update(更新)delete&#…

代码随想录算法训练营第十七天|654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树

654.最大二叉树 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给定的数组构建最大二…

LCD显示屏接口

LCD显示屏接口 设备对外接口:VGA、DVI、HDMIHDMI接口接口定义发展历史HDMI特点HDMI接口类型 设备对内接口:串口、并口小屏(I2C、SPI、UART)中屏:MCU、RGBRGB接口 MCU LCD屏和RGB LCD屏的区别大屏:MIPI、LVD…

OCR Fusion: EasyOCR/Tesseract/PaddleOCR/TrOCR/GOT

文章目录 前言一、基类 OCRExecutorBase二、EasyOCR1.安装2.模型下载3.DEMO 三、Tesseract1.安装2.使用问题3.DEMO 四、PaddleOCR1.安装2.DEMO 五、PaddleOCR(PyTorch移植版)1.代码整理2.DEMO 六、TrOCR1.安装2.模型下载3.DEMO 七、GOT1.安装2.模型下载3…

机器学习(5):机器学习项目步骤(二)——收集数据与预处理

1. 数据收集与预处理的任务? 为机器学习模型提供好的“燃料” 2. 数据收集与预处理的分步骤? 收集数据-->数据可视化-->数据清洗-->特征工程-->构建特征集和数据集-->拆分数据集、验证集和测试集 3. 数据可视化工作? a. 作用&…

这款免费工具让你的电脑焕然一新,专业人士都在用

HiBit Uninstaller 采用单一可执行文件的形式,无需复杂的安装过程,用户可以即刻开始使用。这种便捷性使其成为临时使用或紧急情况下的理想选择。尽管体积小巧,但其功能却异常强大,几乎不会对系统性能造成任何负面影响。 这款工具的一大亮点是其多样化的功能。它不仅能够常规卸…

鸿蒙harmonyos next纯flutter开发环境搭建

公司app是用纯flutter开发的,目前支持android和iOS,后续估计也会支持鸿蒙harmonyos。目前谷歌flutter并没有支持咱们国产手机操作系统鸿蒙harmonyos,于是乎国内有个叫OpenHarmony-SIG的组织,去做了鸿蒙harmonyos适配flutter开发的…

实验2 网络测试命令的使用及对等网组建

实验2 网络测试命令的使用及对等网组建 一、实验目的 1. 熟悉常用网络测试命令的语法及其功能; 2. 掌握常用的网络故障分析及排除的方法; 3. 熟悉Windows中的网络组建及各参数的设置和基本意义。 4.如何在对等网中建立共享及访问对方的共享资源。 二、…

精通推荐算法31:行为序列建模之ETA — 基于SimHash实现检索索引在线化

1 行为序列建模总体架构 2 SIM模型的不足和为什么需要ETA模型 SIM实现了长周期行为序列的在线建模,其GSU检索单元居功至伟。但不论Hard-search还是Soft-search,都存在如下不足: GSU检索的目标与主模型不一致。Hard-search通过类目属性来筛选…

《深度学习》【项目】OpenCV 发票识别 透视变换、轮廓检测解析及案例解析

目录 一、透视变换 1、什么是透视变换 2、操作步骤 1)选择透视变换的源图像和目标图像 2)确定透视变换所需的关键点 3)计算透视变换的变换矩阵 4)对源图像进行透视变换 5)对变换后的图像进行插值处理 二、轮廓检测…