作者 | 码匠笔记

责编 | 胡巍巍

在团队协作过程中最常见的就是开会、开会最常用的就是图,而图中最常见的就是流程图、时序图、类图,这三个图可以清楚的描述你想解释的内容。

学好类图不仅仅能帮助自己更清楚的梳理业务,还能提高开会效率。

但是话说回来,你是否真的看懂别人画的图了?或者你真的会画吗?今天就和大家一起学习一下怎么画类图。

上图是我模拟出来的一个场景和大家具体说一下类图究竟应该怎么画才对。图中讲的是这样一个「故事」:

一个公司下面有很多部门,公司和部门是不可分割的。

码农属于一个部门,但是如果部门解散了,码农依然依然是码农。

码农无时无刻在用手机,只有工作时间才会使用 Mac。

Mac 是一种电脑,电脑是“可计算处理器”的一种实现。

下面我们就逐一介绍下这些关系。


泛化关系(generalization)

泛化关系为 is-a 的关系;两个对象之间如果可以用 is-a 来表示,就是泛化关系。

泛化关系用一条带空心箭头的直接表示。如图为例, Mac 和电脑就是泛化关系,通常在程序里面泛化表现为继承于非抽象类。


实现关系(realization)

实现关系用一条带空心箭头的虚线表示。如图为例,电脑和可计算处理器就是实现关系,通常程序里面实现关系表现为继承抽象类。比如我们平时写的 Readable,Printable等接口的实现。

聚合关系(aggregation)

聚合关系用一条带空心菱形箭头的直线表示,如图码农和部门就是聚合关系。与组合关系不同的是,整体和部分不是强依赖的,即使整体不存在了,部分仍然存在。如图为例, 部门撤销了,码农换一个工作还是码农嘛。

组合关系(composition)

组合关系用一条带实心菱形箭头直线表示,与聚合关系一样,组合关系同样表示整体由部分构成的关系,不同之处在于整体和部分是强依赖关系,如果整体不存在了,部分也不复存在。

如图为例,如果公司倒闭了,那么何来部门呢?

关联关系(association)

关联关系通常用一条直线表示,当然如果需要标明方向可以添加箭头。它是描书不同的类对象之间的关系,通常不会随着状态的变化而变化,可以理解为被关联者属于关联者的一部分。

如图为例,手机就是码农的一部分,不会因为他上班与否而变化所属关系。通常情况在程序里面以类变量的方式表现。

依赖关系(dependency)

依赖关系是用一套带箭头的虚线表示,他通常描述一个对象在运行期间会用到另一个对象的关系。

如图为例码农只有在工作的时候才会用到 Mac 电脑,所以这种依赖关系是依赖于运行状态的。通常情况下是在程序里面通过构造函数、形参等体现。

回顾总结

到这里我们再次回顾一下开篇的图片是不是更加理解里面的连线了?所以我们在绘图过程中一定要非常注意这个线和箭。

不过话说回来,死记硬背这些东西确实很难,于是我自己想了一个打油诗,帮助自己来记忆,你也可以来试一下。

实箭泛化虚实现

虚线依赖实关联

空菱聚合实组合

项目沟通图常见

所以你学会了吗?

作者:码匠笔记,老哥先后就职于 ThoughtWorks 、阿里巴巴等互联网公司 ,擅长 Java 、Scala 等多种语言 ,并熟悉前端开发 ,从事多年全栈开发工程师 。热衷于技术分享、博文创作、开源社区、开源工具等 。本文首发于个人公众号“码匠笔记” ,有兴趣的欢迎关注。

声明:本文为作者投稿,版权归其个人所有。

【END】

作为码一代,想教码二代却无从下手:

听说少儿编程很火,可它有哪些好处呢?

孩子多大开始学习比较好呢?又该如何学习呢?

最新的编程教育政策又有哪些呢?

下面给大家介绍CSDN新成员:极客宝宝(ID:geek_baby)

戳他了解更多↓↓↓

 热 文 推 荐 

☞ 消失的手机玩家

☞ JavaScript 太糟糕,JVM 有妙招!

☞ 他 25 岁进贝尔实验室,32 岁创建信息论,40 岁办达特茅斯会议 | 人物志

☞真の硬核粉丝!小学生也参加杨超越杯,作品优秀!

☞ 阿里半跪过,任正非差点跳楼,京东被骗光钱:成年人的生活哪有容易二字?

不改变比特币, 如何扩容?

☞强推!盘点阿里巴巴 15 款开发者工具 | 程序员硬核评测

☞17篇论文入选CVPR 2019,百度AI都在关注什么?(附论文地址)

☞ 她说:为啥程序员都特想要机械键盘?这答案我服!

System.out.println("点个在看吧!");
console.log("点个在看吧!");
print("点个在看吧!");
printf("点个在看吧!\n");
cout << "点个在看吧!" << endl;
Console.WriteLine("点个在看吧!");
Response.Write("点个在看吧!");
alert("点个在看吧!")
echo "点个在看吧!"

你点的每个“在看”,我都认真当成了喜欢

程序员都该懂的 UML 规范!相关推荐

  1. resultset需要关闭吗_Java程序员都需要懂的「反射」

    前言 只有光头才能变强.文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 今天来简单写一下Java的反射.本来没打算写反射这 ...

  2. 每一个开发人员都应该懂的 UML 规范

    欢迎关注方志朋的博客,回复"666"获面试宝典 在团队协作过程中最常见的就是开会.开会最常用的就是图,而图中最常见的就是流程图.时序图.类图,这三个图可以清楚的描述你想解释的内容. ...

  3. 程序员都该懂点 HTTP

    作者:developerHaoz Github 地址:developerHaoz 说明:本文主要是对 HTTP 基础知识进行总结和归纳,毕竟做 IT 的,网络这一块还是很重要的 本文的主要内容 HTT ...

  4. 程序员都需要懂的10种常见安全漏洞

    前言 我们日常开发中,很多小伙伴容易忽视安全漏洞问题,认为只要正常实现业务逻辑就可以了.其实,安全性才是最重要的.本文将跟大家一起学习常见的安全漏洞问题,希望对大家有帮助哈.如果本文有什么错误的话,希 ...

  5. Java 程序员都该懂的 HashMap

    HashMap 一直是非常常用的数据结构,也是面试中十分常问到的集合类型,今天就来说说 HashMap. 但是为什么要专门说明是 Java8 的 HashMap 呢?我们都知道,Java8 有很多大的 ...

  6. 每个程序员都可以「懂」一点 Linux

    点击上方"马蜂窝技术",关注订阅更多优质内容 提到 Linux,作为程序员来说一定都不陌生.但如果说到「懂」Linux,可能就没有那么多人有把握了.到底用 Linux 离懂 Lin ...

  7. 程序员都在读的实战书,你看懂封面了吗?

    相比于理论知识,实战类的图书更受程序员们的喜爱.所以,几乎每个程序员的书架上都有一两本名为"XX实战"的技术图书,就算你没没有,那一定看到过Manning出版的"in A ...

  8. 算法精解 c语言描述 豆瓣,斯坦福大学教授亲授,这本美亚4.7星的算法书,新手程序员都看得懂!...

    原标题:斯坦福大学教授亲授,这本美亚4.7星的算法书,新手程序员都看得懂! "算法会扩展并提高大家的编程技巧,而学习基本的算法设计范式,可以和许多不同领域的不同问题密切相关,还能作为预测算法 ...

  9. 每个程序员都必读的10篇文章

    作为一名Java程序员和软件开发人员,那些每个程序员都应该知道的XXX的文章教会了我不少东西,它们提供了某个特定领域的一些实用的并且有深度的信息,这些东西通常很难找到.在我学习的过程中我读到过许多非常 ...

最新文章

  1. 详解math.isclose()用法
  2. 新能源汽车:大变革催生十万亿市场空间
  3. CDN监控系统(三 业务架构)
  4. [活动 3.30]MAUI 跨平台应用开发实战
  5. springboot Autowired BeanNotOfRequiredTypeException
  6. (3)散列函数设计:直接定址法
  7. 学会学习比学习什么更重要
  8. 第十三届蓝桥杯大赛个人赛全国总决赛准考证开放下载
  9. 系统架构改进--多系统用户整合
  10. WinPE下修改本地系统注册表
  11. Arduino 入门学习笔记5 按键控制激光发生器
  12. 【青松资讯】Anonymous匿名者黑客组织公布攻击新目标:100家中国政府网站
  13. linux程序内码,Linux操作系统下如何转换文本文件的内码
  14. 从“女记者”到“地产一姐”,龙湖吴亚军的“三不”人生
  15. MMD导入Unity利用MMD4Mecanim转化MMD模型
  16. 抖音、快手最火爆的拍摄技巧,拍出点赞10万+的视频、照片同样可用
  17. 【全网首发】FISCO-BCOS从底层讲起链从配置文件开始解析,拆开build_chain.sh,从配置文件解读,起链时会有哪些文件产生,区块链端口解读RPC,P2P,channel,账本文件
  18. jq 修改swal的标题_JQuery swal确认没有提交
  19. websocket中自动断开连接
  20. cacti监控windows服务器

热门文章

  1. 2021年青海高考一分一段成绩查询,最新2021年青海高考一分一段公布
  2. 强化学习的数学基础2---PPO算法
  3. Unity5 Roll A Ball项目笔记
  4. Effective Modern C++ 第二章 auto的使用
  5. 中国1-(4-羟基苯基)乙酮市场趋势报告、技术动态创新及市场预测
  6. 中国冷凝管行业市场供需与战略研究报告
  7. c语言课程设计小时钟,【图片】发几个C语言课程设计源代码(恭喜自己当上技术小吧主)【东华理工大学吧】_百度贴吧...
  8. 2017级C语言大作业 - 元气骑士
  9. javaweb——Servlet开发
  10. 监控系统可以终结酒驾吗?