UML类图还看不懂?来看看这版乡村爱情类图,一把学会!

Wesley13
• 阅读 403

持续坚持原创输出,点击蓝字关注我吧

UML类图还看不懂?来看看这版乡村爱情类图,一把学会!

作者:小傅哥
博客:https://bugstack.cn

沉淀、分享、成长,让自己和他人都能有所收获!😜

目录

  • 一、码场心得

  • 二、会议室

  • 三、乡村爱情类图学习

  • 1. 类图模型

  • 2. 继承关系

  • 3. 实现关系

  • 4. 组合关系

  • 5. 聚合关系

  • 6. 关联关系

  • 7. 依赖关系

  • 四、赵家班全景类图

  • 五、总结

  • 六、系列推荐

一、码场心得

🤔有个词叫内卷严重!

最开始听到这个词是有个小伙伴在我的一篇HashMap源码分析文章下的留言:“哥们,你这叫内卷!”。这篇文章深度解释了扰动函数、负载因子以及相关数学方式的结果验证,有兴趣的可以跳过去阅读。《HashMap核心知识,扰动函数、负载因子、扩容链表拆分,深度学习》

那什么叫内卷呢,乍一看这词还是有点新的。其实内卷化来自单词 involution,也可以称作“过密化”。这样就好解释了,比如;

  1. 100个人上卫生间就3个坑,没法公平分配,那就谁今天谁穿裤衩谁先上

  2. 100个700分以上的,就30%个名额能去清北。3万多600分以上的考生里,很多人可能连211都上不了。

  3. 道路拥堵,不能让每个人都开车,只能遥遥无期的摇号排队。

这些都可以解释为过密化带来的内卷严重问题,但好在这些都在不断的优化完善。

🤒程序员也有内卷?!

其实大部分时候大家说的程序员内卷,指的是面试造火箭,求职越来越难。

其实从某种角度来说,我个人是不太认可说程序员有内卷的。就整个行业来看,程序员的工作就业情况和薪资待遇都是不错的。有人会觉得面试还得刷题、学源码、看框架、懂架构等等,可这些难道不应该是你做成程序员职业发展道路上,必经的突破吗?

可能每个人都会在某个时期感觉自己一直处于瓶颈期,做着重复的事情、码着CRUD的逻辑、接触不到核心的技术等等,都会猛的瞬间觉得自己快狒狒了。那这样的你似乎只能用内卷这个词让自己内心平衡了,试问自己,你对自己投入过学习成长的时间吗?你有计划破局突破自己的瓶颈吗?如果没有那不叫内卷!

二、会议室

谢飞机,小记,假期回来上班的一周的🛩飞机,被组长安排了一次项目成长分享。

小组长:飞机,你分享的项目中,核心模块要给大家讲清楚。这块蛮有技术点的!

谢飞机:嗯嗯,我也在想怎么能让大家听懂。

小组长:最好借助一些工具,把代码逻辑、功能流程,通过图的方式表达出来。

谢飞机:流程图我会画了,但是这里的核心功能类,我还不知道怎么弄。

小组长:咳咳,用UML类图哇,把核心类体现出来。

谢飞机:...,没画过,我内卷了吗?

小组长:不要脸!等我画点资料,教你!

三、乡村爱情类图学习

UML(Unified Modeling Language),是一种面向对象设计的建模工具,建模的核心是模型,模型是现实的简化、真实的抽象。

在 UML 中,所有的描述包括:事务、关系、图这三部分构件组成,如下图为所有构件的关系。

UML类图还看不懂?来看看这版乡村爱情类图,一把学会!

UML 构件关系图,来自设计模式

接下来,我们就着重讲解UML中的类图关系,在乡村爱情人物里的体现。

1. 类图模型

UML 类图(Class Diagrams),是使用频率最高的 UML 图之一,类图可以表示出类、接口和它们之间的协作关系。各个接口、类、属性、方法,可以用如下方式表达。

UML类图还看不懂?来看看这版乡村爱情类图,一把学会!

UML 类图中,接口、类、属性、方法,表达方式

2. 继承关系

代码

`public class 谢广坤 {
    private String 辈分;
    public void 作妖(){}
}

public class 谢永强 extends 谢广坤 {
}

public class 谢飞机 extends 谢广坤 {
}
`

类图

UML类图还看不懂?来看看这版乡村爱情类图,一把学会!

UML类图,继承关系


  • 功能:继承关系

  • 概念:继承(Generaliztion)又叫泛化,用于表示子类继承父类的所有功能。

  • 场景:谢广坤的作妖技能,谢永强和谢飞机继承。谢飞机继承的更好,更能作。

3. 实现关系

代码

`public interface 舞术 {
    void 招式();
}

public class 刘能 implements 舞术 {
    private String 来将姓名;
    public void 招式() {
    }
}

public class 赵四 implements 舞术 {
    private String 来将姓名;
    public void 招式() {
    }
}
`

类图

UML类图还看不懂?来看看这版乡村爱情类图,一把学会!

UML类图,实现关系


  • 功能:实现关系

  • 概念:接口、抽象类声明的方法,由类实现(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 性别;

}
`

类图

UML类图还看不懂?来看看这版乡村爱情类图,一把学会!

UML类图,组合关系


  • 功能:组合关系

  • 概念:组合(Combination)关系表示类中整体与部分的关系,整体与部分相依相存。

  • 场景:赵玉田和刘英的结婚证,缺一不可。

5. 聚合关系

代码

`public class 山庄 {

    private 宋晓峰 晓峰;
    private 李宝库 宝库;

    public void 药膳房(李宝库 宝库) {
        this.宝库 = 宝库;
    }

    public void 保安部(宋晓峰 晓峰) {
        this.晓峰 = 晓峰;
    }

}

public class 李宝库 {

    private String 职业;

}

public class 宋晓峰 {

    private String 职业;

}
`

类图

UML类图还看不懂?来看看这版乡村爱情类图,一把学会!

UML类图,聚合关系


  • 功能:聚合关系

  • 概念:聚合(Aggregate)关系,也是用于表示对象的整体和部分,但成员对象可以与整体对象分离独立存在。

  • 场景:在⛰山庄中药膳方有李宝库、保安部有宋晓峰。但李宝库和宋晓峰都只是其中的一员,都可以离开山庄。

6. 关联关系

代码

`public class 豆腐厂 {
    private 王小蒙 员工;
    public void 添加员工(王小蒙 小蒙){
        this.员工 = 小蒙;
    }
}

public class 王小蒙 {
    private 豆腐厂 企业;
    public void 添加企业(豆腐厂 豆腐厂){
        this.企业 = 豆腐厂;
    }

}
`

类图

UML类图还看不懂?来看看这版乡村爱情类图,一把学会!

UML类图,关联关系


  • 功能:关联关系

  • 概念:关联(Association)关系,是类之间常用的一种关系,表示一类对象与另一类对象的联系。组合、聚合也属于这种关系,但关联关系更弱。

  • 场景:豆腐厂里有王小蒙,但豆腐厂里又不只是有王小蒙,还有王老七。即使小蒙不在,豆腐厂也可以正常运行。而王小蒙还有自己的其他企业,所以这属于一种关联关系。

7. 依赖关系

代码

`public class 招商引资 {
    public void 招商(王大拿 大拿){
    }
}

public class 王大拿 {
    private String 资源;
}
`

类图

UML类图还看不懂?来看看这版乡村爱情类图,一把学会!

UML类图,依赖关系


  • 功能:依赖关系

  • 概念:依赖(Dependency)关系当表示一个事务需要使用另外一个事务时,可以使用依赖关系。

  • 场景:招商引资需要王大拿,但并只是就只有这一个大拿。王大拿不来,可能还有李大拿、张大拿。

四、赵家班全景类图

综上,这6种关系里,组合、聚合、关联代码结构类似,可以从依赖的强弱进行理解。强弱关系依次是:继承 > 实现 > 组合 > 聚合 > 关联 > 依赖。

为了更清楚的表达出 UML 类关系,我们把这些画到一整张图中,如下;

UML类图还看不懂?来看看这版乡村爱情类图,一把学会!

UML类图,赵家班全景类图

五、总结

  • 有人说,如果我们和外星人👽非常友善的通信了。那么两个星球之间会进行一些交流,比如问,你好,地球人🌐人你多高呀?地球说1.75米。外星人晕了,米是什么单位? 这样就只能选取两个星球通用的标准来定义,比如:1米是光在真空中1/299792458秒内经过的距离。

  • 其实程序开发也是这样的,为了可以让大家减少对新知识内容的理解的沟通成本,需要定义一些沟通标准,比如UML类图。所以我们需要学习这些标准的工具化语言,来减少沟通成本,提升工作效率。

  • UML类图也是最常用的图稿,同时也非常易于掌握。为了可以把自己的知识面铺设的更加完善,技术栈掌握的更加夯实,也为了突破每一个阶段的瓶颈。那就需要不断学习,不断的积累,找机会破局。

六、系列推荐


bugstack虫洞栈

沉淀、分享、成长,让自己和他人都能有所收获!

作者小傅哥多年从事一线互联网Java开发,从19年开始编写工作和学习历程的技术汇总,旨在为大家提供一个较清晰详细的核心技能学习文档。如果本文能为您提供帮助,请给予支持(关注、点赞、分享)!UML类图还看不懂?来看看这版乡村爱情类图,一把学会!

UML类图还看不懂?来看看这版乡村爱情类图,一把学会!

感谢支持小傅哥原创,欢迎点击在看转发UML类图还看不懂?来看看这版乡村爱情类图,一把学会!

本文分享自微信公众号 - bugstack虫洞栈(bugstack)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
JDK、JRE、JVM,是什么关系?
持续坚持原创输出,点击蓝字关注我吧!(https://oscimg.oschina.net/oscnet/0961c354c3604cea88d918087803821d.jpg)作者:小傅哥博客:https://bugstack.cn❝沉淀、分享、成长,让自己和他人都能有所收获!😜❞
Wesley13 Wesley13
2年前
PPT画成这样,述职答辩还能过吗?
持续坚持原创输出,点击蓝字关注我吧!(https://oscimg.oschina.net/oscnet/7d996d57142743129c308bbeb0d9fbab.png)作者:小傅哥博客:https://bugstack.cn沉淀、分享、成长,让自己和他人都能有所收获!😜
Stella981 Stella981
2年前
AQS 共享锁,Semaphore、CountDownLatch,数据库连接池可以用到!
持续坚持原创输出,点击蓝字关注我吧!(https://oscimg.oschina.net/oscnet/061cf4239c1145d698c1aab0c18e9ecd.png)作者:小傅哥博客:https://bugstack.cn❝沉淀、分享、成长,让自己和他人都能有所收获!😜❞
Stella981 Stella981
2年前
JVM内存模型总结和上手实践,亲测学完没脱发!
持续坚持原创输出,点击蓝字关注我吧!(https://oscimg.oschina.net/oscnet/5ad6692db2494f18864abf6b490f4134.jpg)作者:小傅哥博客:https://bugstack.cn❝沉淀、分享、成长,让自己和他人都能有所收获!😜❞
Easter79 Easter79
2年前
Thread.start() ,它是怎么让线程启动的呢?
持续坚持原创输出,点击蓝字关注我吧!(https://oscimg.oschina.net/oscnet/78c1be0c0d2547fc88854a8d73d9fc1c.png)作者:小傅哥博客:https://bugstack.cn❝沉淀、分享、成长,让自己和他人都能有所收获!😜❞
Stella981 Stella981
2年前
BATJTMD,大厂招聘,都招什么样Java程序员?
持续坚持原创输出,点击蓝字关注我吧!(https://oscimg.oschina.net/oscnet/1ff569760b5c46afa7f103809ffe6aaf.png)作者:小傅哥博客:https://bugstack.cn沉淀、分享、成长,让自己和他人都能有所收获!😜
Easter79 Easter79
2年前
StringBuilder 比 String 快?空嘴白牙的,证据呢!
持续坚持原创输出,点击蓝字关注我吧!(https://oscimg.oschina.net/oscnet/54089346502e47d58a2e29165ba28d61.png)作者:小傅哥博客:https://bugstack.cn❝沉淀、分享、成长,让自己和他人都能有所收获!😜❞
Stella981 Stella981
2年前
JVM故障处理工具,使用总结
持续坚持原创输出,点击蓝字关注我吧!(https://oscimg.oschina.net/oscnet/f6e5942c41ee4278b0d90ebcee03adc9.png)作者:小傅哥博客:https://bugstack.cn❝沉淀、分享、成长,让自己和他人都能有所收获!😜❞
Wesley13 Wesley13
2年前
90%的程序员,都没用过多线程和锁,怎么成为架构师?
持续坚持原创输出,点击蓝字关注我吧!(https://oscimg.oschina.net/oscnet/11ef47d039514b59a87ee4f853c2bd3d.jpg)作者:小傅哥博客:https://bugstack.cn❝沉淀、分享、成长,让自己和他人都能有所收获!😜❞