查看原文
其他

面试官:请在纸上用UML语言描述一下类与类之间的关系图。

以下文章来源于码匠笔记 ,作者码匠笔记

前语:不要为了读文章而读文章,一定要带着问题来读文章,勤思考。在此,建议大家为本公众号加“星标”。如文章写得好,望大家阅读后在右下边“在看”处点个赞,以示鼓励!

本文转自:码匠笔记

在团队协作过程中最常见的就是开会、开会最常用的就是图,而图中最常见的就是流程图、时序图、类图,这三个图可以清楚的描述你想解释的内容。学好类图不仅仅能帮助自己更清楚的梳理业务,还能提高开会效率。但是话说回来,你是否真的看懂别人画的图了?或者你真的会画吗?今天就和大家一起学习一下怎么画类图。


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

一个公司下面有很多部门,公司和部门是不可分割的。 码农属于一个部门,但是如果部门解散了,码农依然依然是码农。 码农无时无刻在用手机,只有工作时间才会使用 Mac。 Mac 是一种电脑,电脑是“可计算处理器”的一种实现。 下面我们就逐一介绍下这些关系。


泛化关系(generalization)


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

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


实现关系(realization)

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


聚合关系(aggregation)

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


组合关系(composition)

组合关系用一条带实心菱形箭头直线表示,与聚合关系一样,组合关系同样表示整体由部分构成的关系,不同之处在于整体和部分是强依赖关系,如果整体不存在了,部分也不复存在。如图为例,如果公司倒闭了,那么何来部门呢?


关联关系(association)

关联关系通常用一条直线表示,当然如果需要标明方向可以添加箭头。它是描书不同的类对象之间的关系,通常不会随着状态的变化而变化,可以理解为被关联者属于关联者的一部分。如图为例,手机就是码农的一部分,不会因为他上班与否而变化所属关系。通常情况在程序里面以类变量的方式表现。


依赖关系(dependency)

依赖关系是用一套带箭头的虚线表示,他通常描述一个对象在运行期间会用到另一个对象的关系。如图为例码农只有在工作的时候才会用到 Mac 电脑,所以这种依赖关系是依赖于运行状态的。通常情况下是在程序里面通过构造函数、形参等体现。


# 回顾总结


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


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


实箭泛化虚实现

虚线依赖实关联

空菱聚合实组合

项目沟通图常见


图是最形象的,也是最节省时间的一种沟通方式,建议各位同学都去好好学习一下。




最后,也欢迎各位读者入群来交流切磋技术,戳这里:咱们来一起抱团取暖,好吗?


---END---



热文推荐

漫画:老板扣了我1000,因为我没记住阿里巴巴开发手册的这条规则。

一位程序员妹纸讲述她是如何拿到美团offer的?

用 IDEA 跟踪 Java 源码的技巧 | 内部资料

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存