UML类图还不懂?来看看这版乡村爱情类图,一把学会!
作者:小傅哥
博客:https://bugstack.cn
沉淀、分享、成长,让自己和他人都能有所收获!
一、码场心得
有个词叫内卷严重!
最开始听到这个词是有个小伙伴在我的一篇HashMap源码分析文章下的留言:“哥们,你这叫内卷!”。这篇文章深度解释了扰动函数、负载因子以及相关数学方式的结果验证,有兴趣的可以跳过去阅读。《HashMap核心知识,扰动函数、负载因子、扩容链表拆分,深度学习》
那什么叫内卷呢,乍一看这词还是有点新的。其实内卷化来自单词 involution,也可以称作“过密化”。这样就好解释了,比如;
- 100个人上卫生间就3个坑,没法公平分配,那就谁今天谁穿裤衩谁先上
- 100个700分以上的,就30%个名额能去清北。3万多600分以上的考生里,很多人可能连211都上不了。
- 道路拥堵,不能让每个人都开车,只能遥遥无期的摇号排队。
这些都可以解释为过密化带来的内卷严重问题,但好在这些都在不断的优化完善。
程序员也有内卷?!
其实大部分时候大家说的程序员内卷,指的是面试造火箭,求职越来越难。
其实从某种角度来说,我个人是不太认可说程序员有内卷的。就整个行业来看,程序员的工作就业情况和薪资待遇都是不错的。有人会觉得面试还得刷题、学源码、看框架、懂架构等等,可这些难道不应该是你做成程序员职业发展道路上,必经的突破吗?
可能每个人都会在某个时期感觉自己一直处于瓶颈期,做着重复的事情、码着CRUD的逻辑、接触不到核心的技术等等,都会猛的瞬间觉得自己快狒狒了。那这样的你似乎只能用内卷这个词让自己内心平衡了,试问自己,你对自己投入过学习成长的时间吗?你有计划破局突破自己的瓶颈吗?如果没有那不叫内卷!
二、会议室
谢飞机,小记,假期回来上班的一周的飞机,被组长安排了一次项目成长分享。
小组长:飞机,你分享的项目中,核心模块要给大家讲清楚。这块蛮有技术点的!
谢飞机:嗯嗯,我也在想怎么能让大家听懂。
小组长:最好借助一些工具,把代码逻辑、功能流程,通过图的方式表达出来。
谢飞机:流程图我会画了,但是这里的核心功能类,我还不知道怎么弄。
小组长:咳咳,用UML类图哇,把核心类体现出来。
谢飞机:...,没画过,我内卷了吗?
小组长:不要脸!等我画点资料,教你!
三、乡村爱情类图学习
UML(Unified Modeling Language),是一种面向对象设计的建模工具,建模的核心是模型,模型是现实的简化、真实的抽象。
在 UML 中,所有的描述包括:事务、关系、图这三部分构件组成,如下图为所有构件的关系。

接下来,我们就着重讲解UML中的类图关系,在乡村爱情人物里的体现。
1. 类图模型
UML 类图(Class Diagrams),是使用频率最高的 UML 图之一,类图可以表示出类、接口和它们之间的协作关系。各个接口、类、属性、方法,可以用如下方式表达。

2. 继承关系
代码
public class 谢广坤 {
private String 辈分;
public void 作妖(){}
}
public class 谢永强 extends 谢广坤 {
}
public class 谢飞机 extends 谢广坤 {
}
类图

- 功能:继承关系
- 概念:继承(Generaliztion)又叫泛化,用于表示子类继承父类的所有功能。
- 场景:谢广坤的作妖技能,谢永强和谢飞机继承。谢飞机继承的更好,更能作。
3. 实现关系
代码
public interface 舞术 {
void 招式();
}
public class 刘能 implements 舞术 {
private String 来将姓名;
public void 招式() {
}
}
public class 赵四 implements 舞术 {
private String 来将姓名;
public void 招式() {
}
}
类图

- 功能:实现关系
- 概念:接口、抽象类声明的方法,由类实现(Realiztion)其功能。
- 场景:在赵四和刘能的一场比舞中,赵四花式走位,被刘能找准时机一踢撂倒。
4. 组合关系
代码
public class 结婚证 {
private 赵玉田 男方;
private 刘英 女方;
public void set男方(赵玉田 男方) {
this.男方 = 男方;
}
public void set女方(刘英 女方) {
this.女方 = 女方;
}
}
public class 赵玉田 {
private int 年龄;
private String 性别;
}
public class 刘英 {
private int 年龄;
private int 性别;
}
类图

- 功能:组合关系
- 概念:组合(Combination)关系表示类中整体与部分的关系,整体与部分相依相存。
- 场景:赵玉田和刘英的结婚证,缺一不可。
5. 聚合关系
代码
public class 山庄 {
private 宋晓峰 晓峰;
private 李宝库 宝库;
public void 药膳房(李宝库 宝库) {
this.宝库 = 宝库;
}
public void 保安部(宋晓峰 晓峰) {
this.晓峰 = 晓峰;
}
}
public class 李宝库 {
private String 职业;
}
public class 宋晓峰 {
private String 职业;
}
类图

- 功能:聚合关系
- 概念:聚合(Aggregate)关系,也是用于表示对象的整体和部分,但成员对象可以与整体对象分离独立存在。
- 场景:在⛰山庄中药膳方有李宝库、保安部有宋晓峰。但李宝库和宋晓峰都只是其中的一员,都可以离开山庄。
6. 关联关系
代码
public class 豆腐厂 {
private 王小蒙 员工;
public void 添加员工(王小蒙 小蒙){
this.员工 = 小蒙;
}
}
public class 王小蒙 {
private 豆腐厂 企业;
public void 添加企业(豆腐厂 豆腐厂){
this.企业 = 豆腐厂;
}
}
类图

- 功能:关联关系
- 概念:关联(Association)关系,是类之间常用的一种关系,表示一类对象与另一类对象的联系。组合、聚合也属于这种关系,但关联关系更弱。
- 场景:豆腐厂里有王小蒙,但豆腐厂里又不只是有王小蒙,还有王老七。即使小蒙不在,豆腐厂也可以正常运行。而王小蒙还有自己的其他企业,所以这属于一种关联关系。
7. 依赖关系
代码
public class 招商引资 {
public void 招商(王大拿 大拿){
}
}
public class 王大拿 {
private String 资源;
}
类图

- 功能:依赖关系
- 概念:依赖(Dependency)关系当表示一个事务需要使用另外一个事务时,可以使用依赖关系。
- 场景:招商引资需要王大拿,但并只是就只有这一个大拿。王大拿不来,可能还有李大拿、张大拿。
四、赵家班全景类图
综上,这6种关系里,组合、聚合、关联代码结构类似,可以从依赖的强弱进行理解。强弱关系依次是:继承 > 实现 > 组合 > 聚合 > 关联 > 依赖。
为了更清楚的表达出 UML 类关系,我们把这些画到一整张图中,如下;

五、总结
- 有人说,如果我们和外星人非常友善的通信了。那么两个星球之间会进行一些交流,比如问,你好,地球人人你多高呀?地球说1.75米。外星人晕了,米是什么单位?这样就只能选取两个星球通用的标准来定义,比如:1米是光在真空中1/299792458秒内经过的距离。
- 其实程序开发也是这样的,为了可以让大家减少对新知识内容的理解的沟通成本,需要定义一些沟通标准,比如UML类图。所以我们需要学习这些标准的工具化语言,来减少沟通成本,提升工作效率。
- UML类图也是最常用的图稿,同时也非常易于掌握。为了可以把自己的知识面铺设的更加完善,技术栈掌握的更加夯实,也为了突破每一个阶段的瓶颈。那就需要不断学习,不断的积累,找机会破局。
六、系列推荐
- 握草,你竟然在代码里下毒!
- 一次代码评审,差点过不了试用期!
- 程序员为什么热衷于造轮子,升职加薪吗?
- 全网最火10万下载量,《重学Java设计模式》(22个真实开发场景)
- 面经手册(上最快的车,拿最贵的offer)
UML类图还不懂?来看看这版乡村爱情类图,一把学会!的更多相关文章
- 《火球——UML大战需求分析》(第3章 分析业务模型-类图)——3.8 小结与练习
摘要:类图(Class Diagram)可能是用得最多的一种UML图.类图的基本语法并不复杂,你可能最多学习两三天就可以掌握,然而要真正做到活用类图则可能需要几年的功力.类图是锻炼面向对象分析(OOA ...
- 看完此文还不懂NB-IoT,你就过来掐死我吧...【转】
转自:https://www.cnblogs.com/pangguoming/p/9755916.html 看完此文还不懂NB-IoT,你就过来掐死我吧....... 1 1G-2G-3G-4G-5G ...
- 看完此文还不懂NB-IoT,你就过来掐死我吧...
看完此文还不懂NB-IoT,你就过来掐死我吧....... 1 1G-2G-3G-4G-5G 不解释,看图,看看NB-IoT在哪里? 2 NB-IoT标准化历程 3GPP NB-IoT的标准化始于20 ...
- Rational Rose正逆向工程(类图转Java代码,Java代码转类图)
一,正向工程 1.设置默认语言为Java,Tools->Options->Notation->default:选择Java. 2.设置环境变量Class ...
- C++的类型转换:static_cast、dynamic_cast、reinterpret_cast和const_cast(dynamic_cast还支持交叉转换,const_cast将一个类的const、volatile以及__unaligned属性去掉)
在C++中,存在类型转换,通常意味着存在缺陷(并非绝对).所以,对于类型转换,有如下几个原则:(1)尽量避免类型转换,包括隐式的类型转换(2)如果需要类型转换,尽量使用显式的类型转换,在编译期间转换( ...
- 还不懂java类加载机制的,建议看下这份阿里技术官总结的笔记!
类加载机制 把class文件加载到内存,并对数据进行校验,准备,解析,初始化,形成可以被虚拟机直接使用的字节码 类加载的时机(触发类的初始化) 使用new关键字实例化对象 读取一个类的静态代码块 使用 ...
- 什么?还不懂c++vector的用法,你凭什么勇气来的!
- Block、委托、回调函数原理剖析(在Object C语境)——这样讲还不懂,根本不可能!
开篇:要想理解Block和委托,最快的方法是搞明白“回调函数”这个概念. 做为初级选手,我们把Block.委托.回调函数,视为同一原理的三种不同名称.也就是说,现在,我们把这三个名词当成一回事.在这篇 ...
- 《Java从入门到失业》第四章:类和对象(4.1):初识类和对象
4类和对象 在第一章曾经简单介绍过,在面向对象的世界里,一切事物皆对象,当解决一个问题的时候,我们先会考虑这个问题会涉及到哪些事物,然后把事物抽象成类,当时还画了一张图如下: 从本章开始,我们一点一点 ...
随机推荐
- liunx配置本地yum源和更新aliyun yum源
1.挂载DVD光盘到/mnt 因为配置时候路径名里面不能有空格,否则不能识别 [root@ mnt]# mount /dev/cdrom /mnt [root@ mnt]# umount ...
- [leetCode]5. 最长回文子串(DP)
题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 题解 dp.先初始化长度为1和长度为2的串.再依次算长度为3,4,5.... 当找到回文串时,若长度比当 ...
- Linux实战(15):Centos 防火墙常见端口命令
开启命令 firewall-cmd --zone=public --add-port=80/tcp --permanent 关闭命令 firewall-cmd --zone=public --remo ...
- Java基础一篇过(四)List这篇就够了
文章更新时间:2020/08/03 一.List介绍 list是Java的一个接口,继承了Collection,常用到的有3个子类实现: ArrayList 底层数据结构是数组.线程不安全 Linke ...
- 刷题[b01lers2020]Life on Mars
解题思路 打开网站,检查常见的信息泄露,漏洞扫描等,都无hint.这时候有点难办了,又找了一会儿,发现抓包标签时,get的值会有参数 尝试访问,发现有如下内容: 因为实在其他地方找不到任何思路了,看着 ...
- DeRPnStiNK靶机渗透
DeRPnStiNK靶机渗透 常规的信息搜集 扫到了phpmyadmin以及wordpress并在后台发现弱密码,即admin,admin 这里对wordpress进行了扫描: 扫描插件: searc ...
- 初识ABP vNext(11):聚合根、仓储、领域服务、应用服务、Blob存储
Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章. 目录 前言 开始 聚合根 仓储 领域服务 BLOB存储 应用服务 单元测试 模块引用 最后 前言 在前两节中介绍了ABP模块开发的基本步 ...
- kafka-Reblance
谁来执行Rebalance以及管理consumer的group呢 coordinator来执行对于consumer group的管理,当consumer group的第一个consumer启动的时候, ...
- Redis 4.0.2分布式锁的Java实现
简介 Redis分布式锁算法有两种,一种是单个Redis实例下的,一种是多个Redis实例的Redlock算法. 官方推荐Redlock算法,但是这个算法需要比较多的Redis实例而且是完全互相独立, ...
- 灵感来袭,基于Redis的分布式延迟队列(续)
背景 上一篇(灵感来袭,基于Redis的分布式延迟队列)讲述了基于Java DelayQueue和Redis实现了分布式延迟队列,这种方案实现比较简单,应用于延迟小,消息量不大的场景是没问题的,毕竟J ...