[UML] 类图介绍 —— 程序员(灵魂画手)必备画图技能之一

 
 
 

统一建模语言(Unified Modeling Language,UML) 可分类成:
 

  • 功能模型:从用户的角度展示系统的功能,包括用例图。
  • 对象模型:采用对象,属性,操作,关联等概念展示系统的结构和基础,包括类别图、对象图。
  • 动态模型:展现系统的内部行为。包括序列图,活动图,状态图。
     
                                            ——本文将带您深入浅出,详细透彻的了解类图

 
 
 
 

类图


 
 
 
 
 

 
   谈到 UML 家族中的 类图,不得不说其本身包含的细节相对确实有点多,并且你在网上看总能找到一些看似同属于类图,却又有点细微差别的表示方法,似乎各有各家的章法,它们之中要么就是结尾少个箭头,要么就是实线变成虚线,让人摸不着头脑 …
 
    那到底什么是类图 ?类图怎么画 ?有没有一个标准呢? 别慌,从广义上来说其实是有的,你也可以参考设计模式相关书籍中对类图的详细介绍。 因为经历过上述的困扰和摸索,为方便大家学习也为方便自己记忆,在这里我特意提炼总结了一下,并将其 划分成了 两个学习部分,分别是 —— 主要掌握 和 次要掌握 , 在坐的吃瓜群众切莫急躁, 相信我认真看完下文,以后不会再对类图有任何疑问 ~~~ 🦄​
 

 
 
 
 
 
 
 

【 主要需掌握的 】

  1. 类图基础属性

 
 
 
 
 
 
 

在这里插入图片描述

 
 
 
 
 
 

    类图概括起来主要由两部分组成 —— 类之间的关系, 其中对类的定义如上图所示, 主要由三部分组成, 它们是 类名、 类的属性(成员变量)、 类的相关操作(函数方法) , 分别对应图里的 上中下 三个分区内容。

 
 
 
 

[ 符号解释 ]

  • -: private
  • +: public
  • ~: default ( package 维度 )
  • #: protected
  • 下划线: static
  • 斜体: 抽象 (注意也可以用两个尖括号包裹来表示抽象,比如 —— <<我是抽象类or接口>>)
  • 冒号前是方法名/变量名(根据有无括号区分),冒号后是返回参数/变量类型(根据有无括号区分),如果没有冒号的话表示方法返回空(也有人通过:void表示返空)

 
 
 
 
 

2. 泛化关系(你可以理解为继承)

 
 

在这里插入图片描述
 
网上标准解释: 泛化关系为 is-a 的关系;两个对象之间如果可以用 is-a 来表示,就是泛化关系 。

笔者通俗解释: Mac is a 电脑,懂了吧 ? 也就是说Mac 继承 了电脑,是电脑的子类 。

总结: 空心三角 + 实线 (也有乱画成实心表示的,你反正记住这个 形状+ 实线 就行)== 继承关系

 
 
 
 
 
 

3. 实现关系

在这里插入图片描述
 
网上标准解释: 程序里面实现关系表现为继承抽象类 。

笔者通俗解释: 继承 抽象类实现 接口 都属于实现关系 。 需要特别注意的是实现关系有种 "棒棒糖" 表示法,就是被实现的那个对象是用圆形表示的(这个在下面巩固栏目里会说明)。

总结: 空心三角 + 虚线(也有乱画成实心表示的,你反正记住这个 形状+ 虚线 就行) == 实现关系

 
 
 
 
 
 
 

【 次要需掌握的 】

 

1. 关联关系(也叫简单关联关系)

在这里插入图片描述
 
网上标准解释: 通常用一条直线表示,当然 如果需要标明方向 可以添加箭头。它是描书不同的类对象之间的关系,通常不会随着状态的变化而变化,可以理解为被关联者属于关联者的一部分。
 
笔者通俗解释: 其实就是一个类中的 对象与对象 之间的引用关系,你可以理解为一个类中的 所有 成员变量

 
    当然如果是多对多关系(比如一个类中的成员变量含有另一个对象的List, 另一个类的成员变量又含有当前对象的List), 那么就可以不用箭头表示, 也可以用双向箭头表示 —— 另外也有完 【全不用箭头】 表示,就是简单 【一条直线】 结合 【两头的数量符号】 来标识关系。
 

 

总结: 尖括号 + 实线 == 关联关系

 
 
 
 
 
 

1. 1 组合关系(组合关系是关联关系的一种,属于强关联关系)

在这里插入图片描述
 
网上标准解释: 与聚合关系一样,组合关系同样表示整体由部分构成的关系,不同之处在于整体和部分是强依赖关系,如果整体不存在了,部分也不复存在。
 
笔者通俗解释: 你可以理解为 非集合类的成员变量, 它与类共存亡 —— 比如这里的 部门 不能脱离 公司 独自存在(别跟我杠,我们这里讨论的是名词,你要想独自存在,不如干脆叫自己为叛徒小公司吧)总之 —— 公司亡,部门必亡 ~
 

 
总结: 实心 棱形 + 实线 == 组合关系

 
 
 
 
 
 
 

1. 2 聚合关系( 聚合关系也是关联关系的一种,属于弱关联关系 )

在这里插入图片描述
 
网上标准解释: 与组合关系不同的是,整体和部分不是强依赖的,即使整体不存在了,部分仍然存在。
 
笔者通俗解释: 你可以理解为 集合类的成员变量, 集合类中聚合的对象就代表了这层聚合关系 。 如 List<码农> ,这个集合中 聚合 的 “码农” 对象是可有可无的, 他不影响自身, 二者各自的存活时长完全独立 ,这就是聚合关系 。
 
总结: 空心 棱形 + 实线 == 聚合关系

 
 
 
 
 
 

2. 依赖关系

在这里插入图片描述
 
网上标准解释: 通常描述一个对象在运行期间会用到另一个对象的关系。
 
笔者通俗解释: 当一个对象依赖另一个对象提供的服务时,就是依赖关系 。 函数方法的入参 局部变量的引用 静态方法的直接调用 都属于这个范畴 。 一个对象中的函数方法依赖另一个对象作为实例入参的表现形式最为常见, 拿函数方法举例 —— 比如 A 函数方法的入参实例 B,就是需要依赖过来的调用对象。
 
总结: 尖括号 + 虚线 == 依赖关系

 
 
 
 
 

    在这里也对描述关联关系的绘画给出最佳建议: 1.用对应箭头标明关系的方向 2.标明数量符号 3.在关系线的上面写清楚你对这段关系的核心解释 4.如果有必要的话 —— 在关系指向的尽头标明对这个这个目标类的职责描述(这个类是干什么的)5.不管是对关系的额外注释还是对类的额外注释 —— 如果内容很多的话,建议写在一个 Note(注释图标) 里,并用虚线链接

 

数量符号 (Multiplicity) :
    0..1(0至1)、 n(规定数量) 、 0..* (0至多) 、 1..* (1至多)、 m..n(规定的数量区间) 比如一头是 1,而另一头是 1 … * —— 那它的意思就是 “1” 对 “多”,且这个“多”最少为一个

 
 
 
 
 

总结:


   如果你能理解下图,那基本上说明你已经把 [ UML-类图 ] 弄懂了,再去多结合一些代码和对应的类图巩固一下,以后再看到类图就不会懵圈圈了 ~

 
 
 
 
 

在这里插入图片描述

 
 
 
 
 
 
 

图中的意思概括就是:

  1. 一个 公司 中可以有多个 部门 —— 非集合类的成员变量(公司亡,部门必亡)
  2. 一个 部门 中可以有多个 码农 —— 集合类成员变量,如 List<码农>(码农可有可无,没了换掉就是了,不影响部门的存活)
  3. 一个 码农 可以有多个 手机 —— 成员变量
  4. 一个 码农 依赖多个 Mac —— 很简单,有了 Mac 我才能敲代码嘛,可以理解为需要 Mac 来完成自身的方法调用
  5. Mac电脑 的一种拓展 —— 继承关系
  6. 电脑可处理计算机 这个概念的一种实现 —— 实现关系

 
 
 
 
 

 

巩固


 
 
 
 
 

 

   上面几乎把该有的标准都列举出来了,但你依然能在网上看到除上述展现形式之外的其他各种五花八门 又 看似熟悉 的类图展现形式,它们要么就是没标明箭头,要么就是线条对不上 …
 
 

    万变不离其宗,尽管其标识没有表示清楚,但在绝大多数情况下还是会留有注释的,只要你理解了,并把上面的 类图基础属性 记牢, 结合图里留下的 中/英文注释 一定能看懂。 OK,话不多说,下面再列出一些类图的例子,供大家巩固学习  ~ ~
 

 
 
 
 
 
 

[ 举例巩固 - 类定义 ]

 

在这里插入图片描述
 

上面的 MyClass 中说明了如下内容(这里只做举例概述,其他细节结合 类图基础属性 内容思考得出):

  • 一个叫做 Myclass 的类中,定义了 三个成员变量三个函数方法
  • 私有方法 op2形参 p3int 类型
  • 私有方法 op2 返回的结果float 类型
  • 受保护方法 op3 返回的结果自定义的 Class6 类型

 
 
 
 
 
 
 
 

[ 举例巩固 - 关系定义 ]
 
 

在这里插入图片描述
 

[ 依赖关系 ]

 
 
 
 
 
 
 
 
在这里插入图片描述 

[ 关联关系 ]

 
 
 
 
 
 
 
 
 
在这里插入图片描述
 

[ 聚合关系 ]

 
 
 
 
 
 
 
 
 
在这里插入图片描述
 

[ 组合关系 ]

 
 
 
 
 
 
 
 
 
在这里插入图片描述
 

[ 标明对应数量的组合关系 ]

 
 
 
 
 
 
 
 
 
在这里插入图片描述
 

[ 泛化(继承)关系 ]

 
 
 
 
 
 
 
 
 
 

在这里插入图片描述
 

[ 实现关系 —— 棒棒糖表示法 ]

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

   如果你通过上面的内容,自认为对类图有了一个更加深入的理解,那么可以抓住这个记忆点挑战一下自己。借助对类图的巩固理解,通过这篇文章 —— 【彻底搞懂建造者模式】, 进一步获取对 设计模式 方面思想和能力的提升 !!!

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

🎏 你学废了吗? 如果有帮助欢迎点赞收藏 ~
 


 
 
 
 
 
 
​🍹​ 另外如果觉得在 灵魂画手 这条路上走的还不过瘾,这里再额外送您两张机票:
 
【程序员必备画图技能之 —— 时序图介绍】 ✈️​

【程序员必备画图技能之 —— 流程图介绍】 ✈️​
 
 
 
 
 
 


 
 
 
 
参考资料:

 
https://www.visual-paradigm.com/guide/uml-unified-modeling-language/what-is-uml/
 
https://www.visual-paradigm.com/guide/uml-unified-modeling-language/what-is-class-diagram/
 
https://www.javatpoint.com/uml-class-diagram
 
https://www.jianshu.com/p/57620b762160
 
https://baike.baidu.com/item/%E7%B1%BB%E5%9B%BE/4670826?fr=aladdin
 
https://www.bilibili.com/video/BV1ct411U7hk
 
https://www.geeksforgeeks.org/unified-modeling-language-uml-introduction/
 
https://creately.com/blog/diagrams/class-diagram-tutorial/
 
http://c.biancheng.net/view/1319.html
 
https://creately.com/blog/examples/class-diagram-templates/
 
https://creately.com/blog/diagrams/class-diagram-relationships/
 
https://csdnnews.blog.csdn.net/article/details/89838014?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.baidujs&dist_request_id=&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.baidujs
注: 该篇文章中的图有明显错误,笔者已通过PS手段在当前博文修正过来

 
 
 

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

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

相关文章

人工智能存在安全隐患?网络安全还得靠人来维护!

前言 继今年3月对ChatGPT进行安全审查后&#xff0c;意大利隐私监管机构表示将计划创建一个人工智能咨询委员会&#xff0c;对目前所有人工智能平台的数据搜集行为进行密切审查。 意大利数据保护机构 Garante 某高级官员表示&#xff0c;该委员会将加入目前由四人组成的隐私法…

短信接收流程分析

5,短信接收 如果有信息,RIL层会主动上报消息,RIL.java 的processUnsolicited方法会进行分发,根据网络制式,信息分为GSM和CDMA, 在此就以GSM信息为例论述, processUnsolicited方法对RIL_UNSOL_RESPONSE_NEW_SMS消息处理逻辑如下, 1,调用responseString方法从ril层读取消息内容…

Android 发送短信

一、发送短信的方法 使用 Intent 隐式调用系统短信应用进行发送 Uri uri Uri.parse("smsto:10086");Intent it new Intent(Intent.ACTION_SENDTO, uri);it.putExtra("sms_body", "Hello World&#xff01;");startActivity(it); 使…

量化策略和level2行情数据股票市场需求大吗?

国内量化交易起步较晚&#xff0c;大约15年开始&#xff0c;20年开始爆发&#xff0c;21年量化私募规模飙升。由于容量过大&#xff0c;出现了一个头部量化私募中性策略导致大幅回调的问题。对于a股来说&#xff0c;量化交易仍然是一种相对较新的投资方式。自20年以来&#xff…

DFQ量化论文阅读

Data-Free Quantization Through Weight Equalization and Bias Correction 高通的训练后量化&#xff0c;提高性能 量化的不同水平 水平1&#xff1a;无需数据和反向传播 水平2&#xff1a;需要数据但不需要反向传播&#xff0c;例如IAO的校准 水平3&#xff1a;需要数据也…

【vn.py】量化策略历史回测(基于本地csv数据)

文章目录 写在前面获取数据csv数据导入历史回测写在后面REF 写在前面 策略研发之后&#xff0c;为了检测我们策略的效果&#xff0c;不可能一上来就接入实盘&#xff0c;所以需要的就是通过历史数据对我们的策略进行检验&#xff0c;也就是历史回测。vn.py也有推出历史回测的教…

「量化技术」Inv_Strategy 胜率76%的趋势反转策略

0 简介 Inv_Strategy为自研的趋势反转策略&#xff0c;能够有效识别到时间序列的趋势拐点&#xff0c;能辅助进行交易决策&#xff0c;规避风险、降低持仓成本。策略基于深度神经网络技术&#xff0c;利用前2个月的量价关系进行inference&#xff08;推理&#xff09;&#xf…

基于BigQuant的量化策略实现

文章目录 一、BigQuant的重要模块说明 1.回测模块 二、基于技术指标的策略实现 1.库函数导入与全局变量初始化 2.每日逻辑函数编写 策略1: MACD金叉MA多头买入 策略2: 利用MA指标进行择股 3.策略结果展示 策略1: MACD金叉MA多头买入 策略2: MA择股 三、基于QP优化的策略实现 …

【定量分析、量化金融与统计学】纵向数据分析(1)——截面数据、时间序列数据和纵向数据

一、截面数据&#xff08;Cross-sectional Data&#xff09; 截面数据就是固定时间来分析其他变量同一时间内的关系。 例如&#xff1a;比较2022年的全国20个省市的GDP与人口&#xff0c;那么我们就是限定了2022年&#xff0c;去找GDP和人口的可能关系。 再例如&#xff1a;…

gdp数据分析

1 概述 本文主要分析china,usa,king,japan,russia5个国家的gdp&#xff0c;时间从1800-2040&#xff0c;后面的数据为预测数据&#xff0c;不准确。 2 绘制折线图 import pandas as pd import matplotlib.pyplot as pltdata pd.read_csv("line_animation.csv") x…

Python量化策略入门1-如何利用聚宽(JoinQuant)下载金融数据

[TOC]量化策略入门1-如何利用聚宽(JoinQuant)下载金融数据 前言 量化策略入门系列文章是本人学习股票量化笔记&#xff0c;最终输出结果希望是一个可在本地运行的回测框架&#xff0c;包含数据获取&#xff0c;数据处理&#xff0c;策略回测等。 本文主要为了介绍如何利用聚…

金 融 量 化 分 析 • 外 篇 • 绘 制 行 情 数 据 数 据 图

文章目录 前言一、k 线 图 是 什 么 &#xff1f;二、K 线 图 结 构&#xff08;1&#xff09; 影 线 和 实 体&#xff08;2&#xff09; 十 字 线 四、 双 均 线 策 略&#xff08;一&#xff09;、金叉&#xff08;二&#xff09;、死叉&#xff08;三&#xff09;、均 线 策…

老板,摊牌了,不装了,pyechart高端实现我国GDP大数据图

pyechart实现我国GDP大屏展示图 from typing import Listimport pyecharts.options as opts from pyecharts.globals import ThemeType from pyecharts.commons.utils import JsCode from pyecharts.charts import Timeline, Grid, Bar, Map, Pie, Linedata [{"time"…

将《2020中国统计年鉴》中的GDP数据换算成不变GDP数据

文章目录 前言一、数据来源二、计算步骤1.理解一下公式和不同的指数国内生产总值指数&#xff08;上一年100&#xff09;国内生产总值指数&#xff08;1978年100&#xff09;现价GDP: 即当年价GDP&#xff0c;也叫名义GDP&#xff0c;包含价格浮动因素&#xff0c;不可比不变价…

【qstock量化】数据篇之宏观指标和财经新闻文本

qstock简介 qstock由“Python金融量化”公众号开发&#xff0c;试图打造成个人量化投研分析开源库&#xff0c;目前包括数据获取&#xff08;data&#xff09;、可视化(plot)、选股(stock)和量化回测&#xff08;backtest&#xff09;四个模块。其中数据模块&#xff08;data&a…

使用Postman模拟发送get、post、delete、put请求

使用Postman模拟发送get、post、delete、put请求 现在的模拟发送请求插件很多&#xff0c;包括在idea上都自带了Test restful web service来模拟请求&#xff0c;但亲测postman更好用一些 今天来分享如何使用postman发送各种请求 1.下载 postman是谷歌的一款插件&#xff0…

使用hutool发送POST请求

之前使用Java程序发送请求都是使用的HttpURLConnection&#xff0c;不太方便&#xff0c;可以使用hutool封装好的方法。 引入依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.0.M4</…

10小时训练数据打造多语种语音识别新高度

本文联合撰写&#xff1a; 腾讯&#xff1a;吕志强&#xff0c;颜京豪&#xff0c;胡鹏飞&#xff0c;康健&#xff0c;阿敏巴雅尔 导语&#xff5c;在刚刚结束的NIST OPENASR评测中&#xff0c;TEG AI语音联合清华大学&#xff0c;刷新世界小语种语音识别比赛6项第一。从2000年…

Python开发智能语音机器人——小O同学

本篇代码存在部分错误 &#xff0c;现已经更新 &#xff08;https://blog.csdn.net/aqqwvfbukn/article/details/131277668&#xff09; 这次项目开发能按部就班顺利完成&#xff0c;主要是靠队友成功在软件的前期设计阶段&#xff0c;需求分析和用例设计起到了重要的作用。当…

微信小程序实现图林机器人聊天和百度AI语音识别的简单人工客服

用微信小程序实现简单的人工客服 最近在做软件工程的课程设计&#xff0c;选择性的做了微信小程序的简单的人工客服。在这里对该课程设计的原理和实现进行一个讲解&#xff0c;也算做一个总结和笔记&#xff0c;方便自己以后查看、复习和帮助大家的学习。 工具&#xff1a;微信…