文档教程后端【免费下载链接】CodeGuide:books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总旨在为大家提供一个清晰详细的学习教程侧重点更倾向编写Java核心内容。如果本仓库能为您提供帮助请给予支持(关注、点赞、分享)项目地址https://gitcode.com/gh_mirrors/code/CodeGuide点击查看免费下载作者小傅哥 关联文档docs/md/about/study/2020-10-18-UML类图还不懂来看看这版乡村爱情类图一把学会.md导读UMLUnified Modeling Language统一建模语言是面向对象设计的建模工具而 UML 类图Class Diagram是其中使用频率最高的图之一用于表达类、接口以及它们之间的协作关系。本文以《乡村爱情》里谢广坤、刘能、赵四、赵玉田等角色的作妖比舞结婚开山庄等场景为案例用可运行的中文 Java 代码逐一演示继承、实现、组合、聚合、关联、依赖六种关系的写法与画法并给出继承 实现 组合 聚合 关联 依赖的强弱判断口诀。读完你不仅能看懂别人画的类图还能在自己的项目中画出规范、能指导编码的类图。一、为什么程序员要学 UML 类图背景铺垫小傅哥的这篇教程源自一次项目分享——谢飞机被组长安排做技术分享组长建议他用 UML 类图把核心功能类画出来帮助听众理解代码逻辑。很多同学第一反应是我代码都写不完还要画图 但请想一想如果我们要和外星人通信说地球人 1.75 米外星人根本不知道米是什么单位最后只能选取两个星球通用的标准来定义——比如1 米是光在真空中 1/299792458 秒内经过的距离。程序开发也是同样的道理为了减少理解新知识的沟通成本我们需要定义一些沟通标准UML 类图就是其中最重要的标准之一。在 UML 中所有描述由事务Things、关系Relationships、图Diagrams三部分构件组成。类图要表达的核心就是类与类之间的关系这也是本次学习的重点。从仓库中的实战项目也能看到类图的价值在 《大营销平台系统》系统设计图 中小傅哥强调一个系统会做出系统架构图、业务拓扑图、用户用例图、业务流程图、系统建模图之后就是细分实现功能的 UML 流程图在 《小型支付商城系统》第2-2节工程四色建模设计 中研发评审后要先画用例图、做领域拆分、画 UML 流程图然后才能指导编码。也就是说类图是设计先行的具体抓手——把类与类的关系画清楚代码结构自然就立起来了。二、类图模型接口、类、属性、方法怎么表达UML 类图由矩形框 分隔区构成一个类通常分三个区域表达分区内容示例第一区类名 / 接口名谢广坤、舞术接口用interface标注第二区属性字段private String 辈分第三区方法public void 作妖()可见性修饰符符号放在属性/方法前符号含义public公有-private私有#protected受保护子类可见技巧提示在仓库的设计模式教程中小傅哥会先用类图给出装配接口、逻辑接口、抽象类、实现类、工厂的结构再照着类图写代码例如 责任链模式类图 中先画AbstractLogicChain装配链路的类图再编码。先画图、再编码是保证代码结构不腐化的好习惯。三、六种关系逐一拆解乡村爱情版1. 继承关系泛化 Generalization代码public class 谢广坤 { private String 辈分; public void 作妖(){} } public class 谢永强 extends 谢广坤 { } public class 谢飞机 extends 谢广坤 { }类图画法┌─────────────┐ │ 谢广坤 │ ├─────────────┤ │ -辈分 │ ├─────────────┤ │ 作妖() │ └──────▲──────┘ │ (实线空心三角箭头指向父类) ┌────────┴────────┐ ┌─────┴─────┐ ┌─────┴─────┐ │ 谢永强 │ │ 谢飞机 │ └───────────┘ └───────────┘功能继承关系继承 / 泛化Generalization用于表示子类继承父类的所有功能。概念子类拥有父类的全部非私有成员并可扩展自己的新行为。场景谢广坤的作妖技能由谢永强和谢飞机继承。其中谢飞机继承得更好更能作。判断要点继承关系在类图中用实线 空心三角箭头表示箭头指向父类。这是类与类之间最强的关系是is-a是一个的体现。2. 实现关系Realization代码public interface 舞术 { void 招式(); } public class 刘能 implements 舞术 { private String 来将姓名; public void 招式() { } } public class 赵四 implements 舞术 { private String 来将姓名; public void 招式() { } }类图画法┌─────────────┐ │ interface 舞术 │ ├─────────────┤ │ 招式() │ └──────▲──────┘ │ (虚线空心三角箭头指向接口) ┌──────┴──────┐ ┌──┴───┐ ┌──┴───┐ │ 刘能 │ │ 赵四 │ └──────┘ └──────┘功能实现关系Realization。概念接口、抽象类声明的方法由具体类实现其功能。场景在赵四和刘能的一场比舞中赵四花式走位被刘能找准时机一踢撂倒——两个人都实现舞术接口但各自招式的具体实现不同。判断要点实现关系在类图中用虚线 空心三角箭头表示箭头指向接口。它表达的是类兑现接口契约的关系。3. 组合关系Composition代码public class 结婚证 { private 赵玉田 男方; private 刘英 女方; public void set男方(赵玉田 男方) { this.男方 男方; } public void set女方(刘英 女方) { this.女方 女方; } } public class 赵玉田 { private int 年龄; private String 性别; } public class 刘英 { private int 年龄; private int 性别; }类图画法┌─────────────┐ │ 结婚证 │ ├─────────────┤ │ -男方: 赵玉田 │ │ -女方: 刘英 │ ├─────────────┤ │ set男方() │ │ set女方() │ └───▲─────▲───┘ │ │ (实心菱形菱形在整体端) ┌──────┴─┐ ┌─┴──────┐ │ 赵玉田 │ │ 刘英 │ └────────┘ └────────┘功能组合关系Composition。概念组合关系表示类中整体与部分的关系整体与部分相依相存生命周期一致。场景赵玉田和刘英的结婚证缺一不可——没有男方或没有女方结婚证都不成立。判断要点组合关系在类图中用实心菱形表示菱形画在整体那一端实线连接到部分。它是强has-a拥有关系整体销毁部分也随之销毁。4. 聚合关系Aggregation代码public class 山庄 { private 宋晓峰 晓峰; private 李宝库 宝库; public void 药膳房(李宝库 宝库) { this.宝库 宝库; } public void 保安部(宋晓峰 晓峰) { this.晓峰 晓峰; } } public class 李宝库 { private String 职业; } public class 宋晓峰 { private String 职业; }类图画法┌─────────────┐ │ 山庄 │ ├─────────────┤ │ -晓峰: 宋晓峰 │ │ -宝库: 李宝库 │ ├─────────────┤ │ 药膳房() │ │ 保安部() │ └───▲─────▲───┘ │ │ (空心菱形菱形在整体端) ┌──────┴─┐ ┌─┴──────┐ │ 李宝库 │ │ 宋晓峰 │ └────────┘ └────────┘功能聚合关系Aggregation。概念聚合关系也是表示对象的整体和部分但成员对象可以与整体对象分离独立存在生命周期不必一致。场景山庄中药膳房有李宝库、保安部有宋晓峰但李宝库和宋晓峰都只是山庄的一员都可以离开山庄——人走了山庄还在。判断要点聚合关系在类图中用空心菱形表示菱形画在整体那一端。与组合的区别在于依赖的强弱组合更强共生共死聚合较弱可分可合。5. 关联关系Association代码public class 豆腐厂 { private 王小蒙 员工; public void 添加员工(王小蒙 小蒙){ this.员工 小蒙; } } public class 王小蒙 { private 豆腐厂 企业; public void 添加企业(豆腐厂 豆腐厂){ this.企业 豆腐厂; } }类图画法┌─────────────┐ 关联关系 ┌─────────────┐ │ 豆腐厂 │─────────────│ 王小蒙 │ ├─────────────┤ (实线) ├─────────────┤ │ -员工: 王小蒙 │ │ -企业: 豆腐厂 │ └─────────────┘ └─────────────┘功能关联关系Association。概念关联关系是类之间常用的一种关系表示一类对象与另一类对象的联系。组合、聚合也属于这种关系但关联关系更弱。场景豆腐厂里有王小蒙但豆腐厂里又不只是有王小蒙还有王老七。即使小蒙不在豆腐厂也可以正常运行而王小蒙还有自己的其他企业——你离不开我、我也离不开你的双向合作属于一种关联关系。判断要点关联关系在类图中用实线表示可以在两端标注多重性如1、1..*等。它强调的是彼此认识、互相协作比组合、聚合更弱。6. 依赖关系Dependency代码public class 招商引资 { public void 招商(王大拿 大拿){ } } public class 王大拿 { private String 资源; }类图画法┌─────────────┐ 依赖关系 ┌─────────────┐ │ 招商引资 │─────────────────────│ 王大拿 │ ├─────────────┤ (虚线箭头) ├─────────────┤ │ 招商(王大拿) │ │ -资源 │ └─────────────┘ └─────────────┘功能依赖关系Dependency。概念当表示一个事务需要使用另外一个事务时可以使用依赖关系。场景招商引资需要王大拿但并不仅仅只有这一个大拿。王大拿不来可能还有李大拿、张大拿——招商方法只是临时使用一下王大拿并不长期持有他。判断要点依赖关系在类图中用虚线 箭头表示箭头指向被依赖的一方。这是六种关系中最弱的一种通常表现为方法参数、局部变量、返回值或静态调用。四、赵家班全景类图与关系强弱排序综上这 6 种关系里组合、聚合、关联的代码结构类似都是类中持有另一个类可以从依赖的强弱进行理解。强弱关系依次是继承 实现 组合 聚合 关联 依赖为了更清楚地表达 UML 类关系可以把以上所有关系画到一整张赵家班全景类图中谢广坤与谢永强/谢飞机是继承刘能/赵四实现舞术接口结婚证组合赵玉田/刘英山庄聚合李宝库/宋晓峰豆腐厂关联王小蒙招商引资依赖王大拿。一张图就能看透整个系统的类结构。实战对照这张全景图就是项目设计阶段系统建模图的雏形。在 《大营销平台系统》 的设计流程中建模图会进一步细化为 DDD 的四色建模蓝色决策命令、黄色领域事件、粉色外部系统、红色业务流程、绿色只读模型、棕色领域对象而类图正是把建模结果落到代码结构上的关键一步。五、画类图的实用建议先画图再编码在动手写类之前先用类图确定核心类、接口和它们之间的关系。仓库中 手撸 Spring 系列 的每一章都是先给出工程结构和类图再照着类图写代码——这是保证代码立体化而不是扁平的 if...else 平铺的秘诀。关系别乱用能继承就继承、不能继承就实现接口成员对象与整体生命周期一致用组合、不一致用聚合只是临时用一下的传参用依赖。符号要标准实线空心三角是继承、虚线空心三角是实现、实心菱形是组合、空心菱形是聚合、实线是关联、虚线箭头是依赖。符号画错图就失去了沟通价值。勤加练习UML 类图是最常用的图稿非常易于掌握。为了把知识面铺设得更完善、技术栈掌握得更夯实也为了突破每一个阶段的瓶颈就需要不断学习、不断积累找机会破局。总结UML 类图是程序员之间降低沟通成本的标准语言——就像米是国际通用的长度单位一样。掌握这六种关系的画法与强弱判断你就能看懂架构师画的系统设计图也能在自己的项目中画出清晰、能指导编码的类图让技术分享、述职答辩、代码评审都更有说服力。赞分享文档教程后端【免费下载链接】CodeGuide:books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总旨在为大家提供一个清晰详细的学习教程侧重点更倾向编写Java核心内容。如果本仓库能为您提供帮助请给予支持(关注、点赞、分享)项目地址https://gitcode.com/gh_mirrors/code/CodeGuide点击查看免费下载相关推荐GitHub_Trending/ms/MS-DOS揭秘微软早期操作系统的原始源代码GitHub_Trending/ms/MS DOS揭秘微软早期操作系统的原始源代码 MS DOS作为个人计算机历史上最具影响力的操作系统之一其1.25和2.pyright继承链解析类继承关系中的类型信息传播pyright继承链解析类继承关系中的类型信息传播 引言Python类型检查的继承挑战 在Python的多继承体系中类型信息的正确传播是静态类型检查的核心开发工具静态分析代码质量SQLAlchemy表关联模式解析基于表继承的通用关联实现SQLAlchemy表关联模式解析基于表继承的通用关联实现 概述 在SQLAlchemy中处理不同实体间的关联关系有多种模式。本文将深入分析一种高效且灵活的数据库后端ORM上一篇终极指南如何使用gobreaker打造高可用Go应用的熔断器下一篇Go开发者必知Eino中Message消息模型与流式StreamReader实战创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
Python爬虫+pyecharts:电影票房与评分数据可视化实战 简介:一套基于Pythonpyecharts的国内上映电影票房与评分可视化分析项目,面向Python初学者及需要完成期末大作业、课程设计的学生,覆盖数据采集、清洗、可视化到报告生成的全流程,能够帮助快速搭建一个功能完整的电影数据分析系统。… · 2026/9/23 12:43:09
G6 图配置项 GraphOptions 完全指南:getOptions 与 setOptions 动态配置实战 G6 图配置项 GraphOptions 完全指南:getOptions 与 setOptions 动态配置实战 【免费下载链接】G6 ♾ A Graph Visualization Framework in JavaScript. 项目地址: https://gitcode.com/gh_mirrors/g6/G6
G6(antv/g6)是一款基于 JavaSc… · 2026/9/23 12:43:09
security-audit-skill:为编码助手注入安全审计能力实战 1. 从零拆解 security-audit-skill:一个给编码助手装上安全雷达的实战项目第一次看到security-audit-skill这个名字,我脑子里蹦出来的画面是:一个专门给 coding agent 用的安全审计技能包。说白了,就是让那些帮你写代码、改代码、… · 2026/9/23 12:43:08
深入解析 xxhash:wandb core 中 Go 实现的 XXH64 哈希算法(vendored 包) 机器学习深度学习数据可视化可观测性 【免费下载链接】wandb The AI developer platform. Use Weights & Biases to train and fine-tune models, and manage models from experimentation to production. 项目地址: https://gitcode.com/gh_mirrors/wa/wandb 点… · 2026/9/23 13:21:56
2026开发者必备的6款AI编程工具实战指南 1. 这6款AI工具不是“锦上添花”,而是2026年开发者生存的硬性配置 你有没有过这种体验:凌晨两点,盯着一段遗留的Java微服务代码,接口文档缺失、注释为零、调用链像毛线团——你花了47分钟才搞清一个 Transactional 为什么没生效… · 2026/9/23 13:21:56
MCP协议与Git Worktree:AI编程助手的协同范式革命 1. 这场“AI编程助手”的胜负手,根本不在模型参数上2026年下半年再看 Codex vs Claude Code,胜负已经开始变了——这句话不是预测,而是我过去18个月在真实开发场景中反复验证后的结论。我带过三个团队,从金融风控系统重构到工业Io… · 2026/9/23 13:21:56
CLI驱动的Diff-Aware代码评审工作流:LLM Agent如何精准理解Git变更 1. 项目概述:这不是一个“工具”,而是一套可落地的开源代码评审工作流“open-code-review”这个名称乍看像某个具体软件包或GitHub仓库名,但结合当前开发者社区的真实语境——尤其是高频出现的open-code-review、LLM Agent、CLI、git diffs这… · 2026/9/23 13:21:55
5个estee底层坑点与完整示例解析 5个estee底层坑点与完整示例解析 面对满屏红色的 StackTrace,很多开发者第一反应是懵圈。报错信息里混杂着内存地址、堆栈层级和奇怪的变量名,像天书一样难以解读。其实,绝大多数 estee… · 2026/9/23 13:21:49
数据中心微孔天花工程五大误区与解决方案 1. 机房微孔天花工程的核心价值与行业痛点机房微孔天花系统作为现代数据中心基础设施的重要组成部分,远不止是简单的吊顶装饰。这套系统需要同时满足气流组织、电磁屏蔽、防火防尘、设备检修等多重功能需求。在金融、电信、互联网等行业的数据中心建设中,… · 2026/9/23 13:21:43
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29