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

如果你看不懂别人画的 UML 类图,看这一篇文章就够了

目录

1、UML 定义

2、类图中每个类的构成

3、UML类图中箭头的含义

3.1、实线空心箭头

 3.2、虚线空心三角箭头

3.3、 实线箭头

3.4、虚线箭头

3.5、尾部为空心菱形箭头 (也可没箭头)

3.6、尾部为实心菱形箭头 (也可没箭头)

4、结语


1、UML 定义

统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。UML是面向对象设计的建模工具,独立于任何具体程序设计语言。

可以帮助我们表示软件的结构:不同的模块、类和对象如何相互交互,以及它们之间的关系是什么。

UML 经常与面向对象的设计结合使用,但它具有更广泛的适用范围。

在 UML 中,我们可以定义系统的结构和行为,并且可以通过图表可视化全部或者部分模型。有两种类型的图表:

  • 结构图用于表示系统的结构。有许多类型的结构图,但我们只讨论类图。对象图、包图和组件图均类似于类图。
  • 行为图用于描述系统的行为。交互图是行为图的子集,用于描述系统的不同组件之间的控制流和数据流。在行为图中,顺序图广泛用于面向对象的设计中。

类图是面向对象设计和开发阶段中使用最多的图类型。

类图是一种结构图,用于说明类的结构及类之间的关系。

如图1-1所示:

 图 1-1

 类图用于描叙类在应用程序中的结构非常有用。大多数时候,仅仅查看结构就足以了解类如何交互,但有时这还不够。

那么这个时候,我们可以使用行为图和交互图,其中顺序图用于描叙类和对象的交互。让我们使用顺序图来显示 Car 对象和 Vehicle 对象如何在继承和多态示例中进行交互,如图 1-2 所示:

 图1-2

2、类图中每个类的构成

类图中,每个类由 3 个部分组成,上面的是类名,中间的是属性,下面的是方法

属性和方法可以用修饰符修饰:

  • 加号(+)表示public;
  • 减号(-)表示private;
  • 井号(#)表示protected

3、UML类图中箭头的含义

 

3.1、实线空心箭头

含义: 泛化=继承
泛化是一种一般与特殊、一般与具体之间关系的描述,具体描述建立在一般描述的基础之上,并对其进行了扩展。 

 3.2、虚线空心三角箭头

 含义: 实现
实现是一种类与接口的关系,表示类是接口所有特征和行为的实现,在程序中一般通过类实现接口来描述

3.3、 实线箭头

含义: 关联
表示类与类之间的联接,它使一个类知道另一个类的属性和方法,这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的。
java中一个类的全局变量引用了另一个类,就表示关联了这个类,A类的属性引用了B类。

3.4、虚线箭头

 含义: 依赖
是一种使用的关系,即一个类的实现需要另一个类的协助。
java中,方法参数需要传入另一个类的对象,就表示依赖这个类。
如图中所示A类中的方法参数需要传入B类的对象

3.5、尾部为空心菱形箭头 (也可没箭头)

含义: 聚合
上图中的Car类与Engine类就是聚合关系(Car类中包含一个Engine类型的成员变量)。由上图我们可以看到,UML中聚合关系用带空心菱形和箭头的直线表示。

聚合关系强调是“整体”包含“部分”,但是“部分”可以脱离“整体”而单独存在。比如上图中汽车包含了发动机,而发动机脱离了汽车也能够单独存在。 

3.6、尾部为实心菱形箭头 (也可没箭头)

含义: 组合
组合关系与聚合关系间的最大不同在于:这里的“部分”脱离了“整体”便不复存在。 

4、结语

在 UML 类图中,常见的就是六种关系:泛化(Generalization),实现(Realization),关联(Association),依赖(Dependency),聚合(Aggregation),组合(Composition)。

这篇文章主要想帮助大家了解一下 UML 类图的结构,这样在后续的学习或工作中,遇到别人画的类图,起码能看懂是啥意思。我这里也是帮大家温故一下。

相关文章:

  • 【论文】论文阅读记录
  • 【第三十九讲】Boot 启动流程
  • ApkScan-PKID 查壳工具下载使用以及相关技术介绍
  • 从BNB遭黑客攻击(跨链桥BSC Token Hub遭到攻击),看公链中心化问题
  • 【多线程实践】一、为何使用多线程三种线程创建方式利弊分析
  • LIFELONG LEARNING WITH DYNAMICALLY EXPANDABLE NETWORKS论文阅读+代码解析
  • 计算机网络——集线器与交换机
  • 用通俗易懂的方式讲解:CatBoost 算法原理及案例
  • 系统架构演变和SpringCloud的定义:
  • 后端必会的前端vue基础知识
  • VGG16 - 咖啡豆识别
  • 2022.10.7 英语背诵
  • 『Android』什么是Service
  • 【Windows核心编程+第一个内核程序】爆肝120小时整理-80%程序员最欠缺的能力,一半以上研究生毕业了还不懂?理解各种深度技术的基本功
  • 【微信小程序】事件传参与数据同步
  • 深入了解以太坊
  • flutter的key在widget list的作用以及必要性
  • HTML-表单
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Just for fun——迅速写完快速排序
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • spring security oauth2 password授权模式
  • 程序员最讨厌的9句话,你可有补充?
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 世界上最简单的无等待算法(getAndIncrement)
  • 由插件封装引出的一丢丢思考
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 怎样选择前端框架
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • # Panda3d 碰撞检测系统介绍
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • ###C语言程序设计-----C语言学习(6)#
  • #、%和$符号在OGNL表达式中经常出现
  • #Linux(帮助手册)
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (LeetCode) T14. Longest Common Prefix
  • (poj1.3.2)1791(构造法模拟)
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (翻译)terry crowley: 写给程序员
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (过滤器)Filter和(监听器)listener
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (七)Knockout 创建自定义绑定
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)关于多人操作数据的处理策略
  • (转载)虚函数剖析
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .gitignore文件设置了忽略但不生效
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)