当前位置: 首页 > news >正文

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

文章目录

    • 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.部署图

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

相关文章:

  • C语言 | Leetcode C语言题解之第445题两数相加II
  • 【C++】Eclipse技巧汇总
  • python 实现data transformations数据转换算法
  • 使用Prometheus进行系统监控,包括Mysql、Redis,并使用Grafana图形化表示
  • 《C++并发编程实战》笔记(五)
  • 学习C语言(21)
  • poetry安装
  • BUUCTF蜘蛛侠呀
  • Synchronized是怎么实现的?
  • [SwiftUI 开发] @dynamicCallable 与 callAsFunction:将类型实例作为函数调用
  • 力扣9.28
  • Python按照指定“字体大小以及字体格式”,批量更新Word文档内容(10)
  • 基于Java+SQL Server2008开发的(CS界面)个人财物管理系统
  • Python编码系列—Python备忘录模式:掌握对象状态保存与恢复技术
  • HTTP请求中GET与POST方法的核心区别与用途解析
  • Django 博客开发教程 8 - 博客文章详情页
  • DOM的那些事
  • MYSQL 的 IF 函数
  • sessionStorage和localStorage
  • spring boot下thymeleaf全局静态变量配置
  • uva 10370 Above Average
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 计算机常识 - 收藏集 - 掘金
  • 类orAPI - 收藏集 - 掘金
  • 每天10道Java面试题,跟我走,offer有!
  • 首页查询功能的一次实现过程
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 用jQuery怎么做到前后端分离
  • Linux权限管理(week1_day5)--技术流ken
  • 仓管云——企业云erp功能有哪些?
  • ​Redis 实现计数器和限速器的
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (论文阅读11/100)Fast R-CNN
  • (南京观海微电子)——示波器使用介绍
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (原創) 未来三学期想要修的课 (日記)
  • (转) RFS+AutoItLibrary测试web对话框
  • **CI中自动类加载的用法总结
  • ../depcomp: line 571: exec: g++: not found
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .NET编程C#线程之旅:十种开启线程的方式以及各自使用场景和优缺点
  • .NET面试题(二)
  • @hook扩展分析
  • @PreAuthorize与@Secured注解的区别是什么?
  • @SpringBootConfiguration重复加载报错
  • [] 与 [[]], -gt 与 > 的比较