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

server/2024/12/23 1:19:39/

文章目录

    • 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.ppmy.cn/server/126522.html

相关文章

【Git原理与使用】Git初识基本操作

Git初识&&基本操作 1.初识Git2.Git安装3.Git基本操作3.1创建Git本地仓库3.2配置Git3.3认识工作区、暂存区、版本库3.4添加文件3.5修改文件3.6版本回退3.7撤销修改3.8删除文件 点赞👍👍收藏🌟🌟关注💖&#x1f…

基于微信的乐室预约小程序+ssm(lw+演示+源码+运行)

摘 要 随着社会的发展,社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采用java语言技术和mysql数据库来完成对系统的设计。整个…

Springboot + netty + rabbitmq + myBatis

目录 0.为什么用消息队列1.代码文件创建结构2.pom.xml文件3.三个配置文件开发和生产环境4.Rabbitmq 基础配置类 TtlQueueConfig5.建立netty服务器 rabbitmq消息生产者6.建立常规队列的消费者 Consumer7.建立死信队列的消费者 DeadLetterConsumer8.建立mapper.xml文件9.建立map…

MongoDB 快速入门+单机部署(附带脚本)

目录 介绍 体系结构 数据模型 BSON BSON 数据类型 特点 高性能 高可用 高扩展 丰富的查询支持 其他特点 部署 单机部署 普通安装 脚本安装 Docker Compose 安装 卸载 停止 MongoDB 删除包 删除数据目录 参考: https://docs.mongoing.com/ 介绍…

我店生活系统小程序开发功能解析

一、市场定位与目标用户 市场定位:我店生活小程序旨在打造一个集购物、娱乐、服务于一体的综合性本地生活服务平台,满足用户多样化的生活需求。通过整合周边生活服务资源,提供一站式的生活服务体验。 目标用户:主要面向中青年人…

程序地址空间

文章目录 程序地址空间进程地址空间关于页表 早期内存的分配方式 程序地址空间 计算机得物理内存大小是固定的,就是计算机主板内存槽上的实际物理空间,CPU可以直接继续寻址,物理内存的容量是固定的,但是寻址的卡空间取决于CPU地址…

小程序电量

原生小程序: wx.getBatteryInfo({success: res > {console.log(res);}; }); success返回值: level设备电量,范围 1 - 100isCharging是否正在充电中 uniapp: uni.getBatteryInfo({success: res > {console.log(res);};…

【MySQL】视图、用户和权限管理

目录 视图创建视图数据修改影响删除视图视图优点 用户和权限管理查看当前的数据库拥有用户信息创建用户修改密码删除用户权限授权回收权限 视图 视图就是相当于创建一个表,将查询到的结果集给存储起来。像使用复杂的多表查询查询到的结果集就不可以对结果集操作。而…