UML科普文,一篇文章掌握14种UML图

来源 | 如逆水行舟

责编 | Carol

封图 | CSDN 付费下载于视觉中国

什么是UML?

UML是Unified Model Language的缩写,中文是统一建模语言,是由一整套图表组成的标准化建模语言。

为什么要用UML?

通过使用UML使得在软件开发之前, 对整个软件设计有更好的可读性,可理解性,从而降低开发风险。同时,也能方便各个开发人员之间的交流。

UML提供了极富表达能力的建模语言,可以让软件开发过程中的不同人员分别得到自己感兴趣的信息。

Page-Jones 在《Fundamental Object-Oriented Design in UML》 一书中总结了UML的主要目的,如下:

  1. 为用户提供现成的、有表现力的可视化建模语言,以便他们开发和交换有意义的模型。

  2. 为核心概念提供可扩展性 (Extensibility) 和特殊化 (Specialization) 机制。

  3. 独立于特定的编程语言和开发过程。

  4. 为了解建模语言提供一个正式的基础。

  5. 鼓励面向对象工具市场的发展。

  6. 支持更高层次的开发概念,如协作,框架,模式和组件。

  7. 整合最佳的工作方法 (Best Practices)。

UML图有哪些?

UML图分为结构图和行为图。

结构图分为类图、轮廓图、组件图、组合结构图、对象图、部署图、包图。

行为图又分活动图、用例图、状态机图和交互图。

交互图又分为序列图、时序图、通讯图、交互概览图。

UML图概览


什么是类图?

【概念】 类图是一切面向对象方法的核心建模工具。类图描述了系统中对象的类型以及它们之间存在的各种静态关系。

【目的】用来表示类、接口以及它们之间的静态结构和关系。

在类图中,常见的有以下几种关系。

1、泛化(Generalization)

【泛化关系】是一种继承关系,表示子类继承父类的所有特征和行为。

【箭头指向】带三角箭头的实线,箭头指向父类。

2、实现(Realization)

【实现关系】是一种类与接口的关系,表示类是接口所有特征和行为的实现。

【箭头指向】带三角箭头的虚线,箭头指向接口。

3、关联(Association)

【关联关系】是一种拥有关系,它使得一个类知道另一个类的属性和方法。

【代码体现】成员变量

【箭头指向】带普通箭头的实线,指向被拥有者。双向的关联可以有两个箭头,或者没有箭头。单向的关联有一个箭头。

自己买的车,想什么时候开就开。但是车是车,人是人,没有整体与部分的关系。

4、聚合(Aggregation)

【聚合关系】是一种整体与部分的关系。且部分可以离开整体而单独存在。聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。

【代码体现】成员变量

【箭头指向】带空心菱形的实线,空心菱形指向整体。

电脑有键盘才能输入信息,电脑是整体,键盘是部分,键盘也可以离开电脑,单纯的拿去敲。所以是聚合。

5、组合(Composition)

  • 【组合关系】是一种整体与部分的关系。但部分不能离开整体而单独存在,组合关系是关联关系的一种,是比聚合关系还要强的关系。

  • 【代码体现】成员变量

  • 【箭头指向】带实心菱形和普通箭头的实线,实心菱形指向整体。

鸟是整体,翅膀是部分。鸟死了,翅膀也就不能飞了。所以是组合。我们再看一下,下面的一组经典的聚合组合关系的例子。

一个公司拥有多个部门,公司和部门之间是组合关系,公司破产了,部门就不复存在了。部门和员工是聚合关系,部门被裁掉,员工就换下家了。

6、依赖(Dependency)

【依赖关系】是一种使用关系,即一个类的实现需要另一个类的协助。

【箭头指向】带普通箭头的虚线,普通箭头指向被使用者。

老司机只管开车,车是谁的不重要,给什么车开什么车。

什么是组件图?

【概念】描绘了系统中组件提供的、需要的接口、端口等,以及它们之间的关系。

【目的】用来展示各个组件之间的依赖关系。

订单系统组件依赖于客户资源库和库存系统组件。中间的虚线箭头表示依赖关系。另外两个符号,表示组件连接器,一个提供接口,一个需要接口。

什么是部署图?

【概念】描述了系统内部的软件如何分布在不同的节点上。

【目的】用来表示软件和硬件的映射关系。

图中简单的表示,不同机器上面部署的不同软件。

什么是对象图?

【概念】对象图是类图的一个实例,是系统在某个时间点的详细状态的快照。

【目的】用来表示两个或者多个对象之间在某一时刻之间的关系。

图中就是描述的,某时间点bat这个公司有一个研发部,一个销售部,两个部门只有一个人iisheng。

什么是包图?

【概念】描绘了系统在包层面上的结构设计。

【目的】用来表示包和包之间的依赖关系。

《Use》关系表示使用依赖,Web Shopping依赖Payment

《Merge》关系表示合并,Web Shopping合并了Shopping Cart就拥有了Shopping Cart的功能

《Access》关系表示私有引入,比如代码中的指定包名类名

《Import》关系表示公共引入,比如Java中的import之后,就可以直接使用import包中的类了。

什么是组合结构图?

【概念】描述了一个"组合结构"的内部结构,以及他们之间的关系。这个"组合结构"可以是系统的一部分,或者一个整体。

【目的】用来表示系统中逻辑上的"组合结构"。

图中描述了Car是由车轴连接着的两个前面轮子、两个后面轮子,和引擎组合的。

什么是轮廓图?

【概念】轮廓图提供了一种通用的扩展机制,用于为特定域和平台定制UML模型。

【目的】用于在特定领域中构建UML模型。

图中我们定义了一个简易的EJB的概要图。Bean是从Component扩展来的。Entity Bean和Session Bean继承了Bean。EJB拥有Remote和Home接口,和JAR包。

什么是用例图?

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

【目的】用来描述整个系统的功能。

用例图中包含以下三种关系:

  • 包含关系使用符号《include》,想要查看订单列表,前提是需要先登录。

  • 扩展关系使用符号《extend》,基于查询订单列表的功能,可以增加一个导出数据的功能

  • 泛化关系,子用例继承父用例所有结构、行为和关系。

什么是活动图?

【概念】描述了具体业务用例的实现流程。

【目的】用来表示用例实现的工作流程。

图中简单描述了,从开始到登录到查看订单列表,或者登录失败直接结束。

什么是状态机图?

【概念】状态机图对一个单独对象的行为建模,指明对象在它的整个生命周期里,响应不同事件时,执行相关事件的顺序。

【目的】用来表示指定对象,在整个生命周期,响应不同事件的不同状态。

图中描述了,门在其生命周期内所经历的状态。

什么是序列图?

【概念】序列图根据时间序列展示对象如何进行协作。它展示了在用例的特定场景中,对象如何与其他对象交互。

【目的】通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。

图中展示的是支付宝条码支付场景的序列图。其中,loop是循环,alt是选择,序列图的其他关系这里就不介绍了。

什么是通讯图?

【概念】描述了收发消息的对象的组织关系,强调对象之间的合作关系而不是时间顺序。

【目的】用来显示不同对象的关系。

图中展示了一个线上书店的通讯图,方框和小人表示生命线,不同生命线之间可以传递消息,消息前面的数字可以表达序列顺序。

什么是交互概览图?

【概念】交互概览图与活动图类似,但是它的节点是交互图。

【目的】提供了控制流的概述。

图中表示一个调度系统的交互概览图,跟活动图很像。其中sd的框代表具体的交互流程,ref框代表使用交互。

什么是时序图?

【概念】时序图被用来显示随时间变化,一个或多个元素的值或状态的更改。也显示时控事件之间的交互和管理它们的时间和期限约束。

【目的】用来表示元素状态或者值随时间的变化而变化的视图。

图中展示了老年痴呆病人随着时间的变化病情的变化。

总结

学习UML,我们没必要纠结比如像聚合关系是带箭头还是不带箭头,这样的问题。更重要的是UML图所给我们带来的画图思想,让我们画UML图或者其他图能让其他人更好的理解我们的设计思想。

当然,你要是明确知道带箭头或者不带箭头哪个是错误的,欢迎留言告诉我。

参考文献:
[1]:《Learning UML 2.0》
[2]: https://www.uml-diagrams.org/
[3]: https://www.visual-paradigm.com/guide/
[4]: https://sparxsystems.com/resources/tutorials/

 

推荐阅读

  • 一文带你认识keepalived,再带你通关LVS+Keepalived!

  • 那个分分钟处理 10 亿节点图计算的 Plato,现在怎么样了?

  • “谷歌杀手”发明者,科学天才 Wolfram

  • 数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程

  • 超详细!一文告诉你 SparkStreaming 如何整合 Kafka !附代码可实践

  • 5分钟!就能学会以太坊 JSON API 基础知识!

    真香,朕在看了!

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

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

相关文章

企业级数据库新型研发模式——数据管理DMS实践

2019阿里云峰会上海开发者大会于7月24日盛大开幕,本次峰会与未来世界的开发者们分享开源大数据、IT基础设施云化、数据库、云原生、物联网等领域的技术干货,共同探讨前沿科技趋势。本文整理自数据库专场中阿里云智能技术专家王天振 (为知)的精彩演讲&…

linux-centos7环境搭建

1、下载centos7 官网地址: http://isoredirect.centos.org/centos/7/isos/x86_64/ 阿里云: http://mirrors.aliyun.com/centos/ 以下针对各个版本的ISO镜像文件,进行一一说明: CentOS-7-x86_64-DVD-1708.iso 标准安装版&#x…

揭秘!机器人和你对话时在想什么?

阿里妹导读:为什么聊天机器人越来越普及?聊天机器人不仅可以节省时间,提升效率,还能一天24小时提供服务,更是可以减少误差。聊天机器人背后的问题原理是什么?效率如何提升?就是今天我们要了解的…

阿里云与A站在一起后,悄悄干了件大事

八月盛夏,“AcFun弹幕视频网站”(简称“A站”)的视频服务器全面迁移上阿里云(此处应有掌声)! A站去年与阿里云达成此项合作。在迁移过程中,阿里云提供专业技术解决方案团队,为A站建立…

科大讯飞营收破百亿,员工涨薪27%,羡慕这个AI“老大哥”​了!

科大讯飞,中国AI公司“老大哥”,交出2019年成绩单。营收达到100.79亿,首次破百亿;净利润同比增长51.12%,达到8.19亿,日均盈利224万元,创下历史最佳业绩。与此同时,5大厂2020年应届生…

Knative Serving 之路由管理和 Ingress

Knative 默认会为每一个 Service 生成一个域名,并且 Istio Gateway 要根据域名判断当前的请求应该转发给哪个 Knative Service。Knative 默认使用的主域名是 example.com,这个域名是不能作为线上服务的。本文我首先介绍一下如何修改 默认主域名&#xff…

linux-centos7 关机命令、系统目录结构介绍

1、关机命令 关机指令 shutdown; sync # 将数据由内存同步到硬盘中,一般关机前需要同步一下,防止数据丢失shutdown # 关机指令,会在一定时间后关机,我试的是一分钟后关机shutdown -h 10 # 十分钟后关机 shutdown -h 10 # 十分…

SprinBoot2.X 集成 Flowable6.6 工作流引擎

上一篇:SpringBoot2.x Flowable 6.4.2 开源项目 码云开源地址:https://gitee.com/lwj/flow GitHub开源地址:https://github.com/ecnice/flow flowable学习 可以入群:633168411 说明:此项目是我师傅为了帮助更多小伙伴们入门工作流…

OceanBase高可用实践

背景 高可用是构建分布式系统的基石。一方面,出于成本考虑, 分布式系统往往采取比较廉价的硬件,其可靠性相对于小型机、专有硬件有很大的不足, 而分布式系统的规模一般比较大,假如硬件的可靠性只有三个9(99.9%)&#…

咦,拆分个字符串都这么讲究?

来源 | 沉默王二封图 | CSDN 付费下载于视觉中国提到拆分字符串,我猜你十有八九会撂下一句狠话,“这有什么难的,直接上 String 类的 split() 方法不就拉到了!”假如你真的这么觉得,那可要注意了,事情远没这…

linux-centos7 常用的基本命令--目录管理、基本属性

一、目录管理 1、cd (切换目录) cd 路径 :切换路径命令,路径可以是绝对路径,也可以是相对路径 ./ : 当前目录 返回上级目录: cd … 返回用户目录: cd ~ 2、ls(列出目录&#xff…

开源考试系统 - 本地代码调试运行

文章目录一、后端部署1. 图形化克隆项目2. 命令克隆项目3. 创建数据库,初始化数据库脚本4. IntelliJ IDEA打开项目5. 数据库连接和redis配置6. 启动redis和后端程序6. 浏览器访问二、前端部署2.1. 打开源码安装依赖2.2. 依次启动admin端和student端2.3. 浏览器访问补…

KDD 2019论文解读:异构信息网络上的对抗生成学习

前言 网络表示学习是一种在低维空间中表示网络数据的方法,在异构信息网络分析中得到了广泛的应用。现有的异构信息网络表示学习方法虽然在一定程度上实现了性能的提高,但仍然存在一些主要的不足。最重要的是,它们通常采用负抽样的方法从网络…

剖析疫情环境下的国内云市场:大势所趋,正是大展拳脚的好时机!

作者 | 马超责编 | Carol封图 | CSDN 付费下载于视觉中国4月29日,谷歌的母公司Alphabet正式发布了2020年第一季度财报,报告显示,Alphabet比去年同期的363.39亿美元增长13%,不计入汇率变动的影响为同比增长15%;在业绩公…

开源考试系统 -微信小程序开发

文章目录一、小程序前置准备1. 创建小程序2. 下载小程序开发工具二、小程序后端部署2.1. 配置修改2.2. 启动redis2.3. 启动后端项目三、小程序前端部署3.1. 微信小程序打开项目3.2. 学生端登录页面3.3. admin端登录一、小程序前置准备 1. 创建小程序 去腾讯小程序官网注册账号…

linux-centos7 常用的基本命令--文件内容查看、硬链接和软链接

一、文件内容查看 1、cat (由第一行开始显示文件内容) cat [-AbeEnstTuv] [--help] [--version] fileName参数说明: -n 或 --number:由 1 开始对所有输出的行数编号。-b 或 --number-nonblank:和 -n 相似&#xff0…

共享学习:蚂蚁金服数据孤岛解决方案

如果有A、B、C三位同学,他们各自手上有10、15、20块钱,这时需要在相互不知道对方有多少钱的情况下,不借助力第三方来计算三个人一共有多少钱。请问这时候,我们如何实现呢?——这,就是最经典的秘密共享场景。…

学之思开源考试系统 - 使用手册

文章目录一、前期准备1. 启动后端2. 启动前台管理员端3. 启动前台学员端二、用户添加2.1. 学生添加2.2. 管理员添加三、题目管理3.1. 添加学科2.2. 单选题添加2.3. 多选题添加2.4. 判断题添加2.5. 填空题添加2.6. 简答题添加四、试卷管理4.1. 固定试卷添加4.2. 时段试卷添加4.3…

看似简单的搜索引擎,原来背后的数据结构和算法这么复杂?

来源 | 码海封图 | CSDN 付费下载于视觉中国前言我们每天都在用 Google, 百度这些搜索引擎,那大家有没想过搜索引擎是如何实现的呢,看似简单的搜索其实技术细节非常复杂,说搜索引擎是 IT 皇冠上的明珠也不为过,今天我们来就来简单…

阿里巴巴在应用性能测试场景设计和实现上的实践

本文是《Performance Test Together》(简称PTT)系列专题分享的第5期,该专题将从性能压测的设计、实现、执行、监控、问题定位和分析、应用场景等多个纬度对性能压测的全过程进行拆解,以帮助大家构建完整的性能压测的理论体系&…