程序员面试闪充--UML类图关系

我们曾借白茶清欢等一个人,曾借花开花落叹宠辱不惊。今天借着类图来了解面向对象又有何不可呢?

小视频传送门:小视频传送门

对象模型中,类图是来描述系统的静态结构,是对模拟客观世界的对象及对象见的联系的映射。

一、类的表示

UML中矩形表示类,用两条横向把矩形分成上、中、下3个区域。分别表示类名,属性和操作。

属性或者方法名称前加上 “+”、“-”或者“#”号则表示了这个属性或者方法的可见性。“+”表示public,“-”表示private私有的,而“#”号则表示protected也就是受保护的。

二、关联的表示

1)单向关联 单向关联用一个带箭头的直线表示。比如说亚当与肋骨,每个亚当类持有一个类型为肋骨类的成员变量类实现。

2)双向关联 所谓双向关联就是双方各自持有对方类型的成员变量,用不带箭头的直线表示。比如说顾客类中维护着一个产品数组,表示一个顾客购买了哪些产品,而在产品类中维护这一个顾客类型的成员变量表示这个产品被哪个顾客所购买。

3)多元关联 多元关联在绘制数据库相关的图形中常见,用一个菱形符号联结相关联的连线。 像图中所示一样,程序猿小哥哥们就会使用开发语言去开发项目呢!

4)受限关联 在UML类图中用一个带有箭头并且指向自身的直线表示。受限关联由两个类及一个限定词组成。限定词是一种特殊属性,用来减少关联的重数。比如说一个文件夹和文件两个类,一个文件只属于一个文件夹,在文件夹的内容中,文件名唯一确定一个文件,一个文件与文件夹及文件名有关。限定词“文件名”把一对多的关联简化为了一对一的关系。

5)自关联 在系统中可能会存在一些类的属性对象类型为该类本身,这种特殊的关联关系就称为自关联。

6)关联的重数 关联的重数可以用关联连线末端的特定符号表示。 “1+”也可以用“*”代替,表示一个或多个。如果没有符号的话就只表示一对一关联。

三、关系的表示

1)聚合关系 UML中聚合关系中用带空心菱形和箭头的直线表示。聚合关系表示has-a的关系,是一种不稳定的包含关系。它最大的特点就是两个类之间有整体和局部的关系,并且就算没有了整体,局部也可以单独存在。就像卡车与引擎的关系,离开了卡车,引擎还是能单独存在。有你,只是锦上添花,没你,我也能光芒万丈。

2)组合关系 组合关系是用带实心的菱形和箭头的直线表示。它与聚合最大的不同之处就是部分脱离了整体便不复存在。 就像大雁与翅膀的关系一样。翅膀不能脱离了大雁而单独存在。

3)依赖关系 依赖关系用带有指向的独立类箭头的虚线表示~~是虚线啊 一个类A只有依靠另一个类B才能发挥作用就称A依赖于B。 比如说司机这个类,必须要依靠一个车对象才能发挥作用,因此就说司机类依赖于车。

4)继承关系 继承关系用带空心三角形的直线表示。当项目中有多个类出现相同部分的实例变量和方法中,我们就考虑用继承的方法。比如说人类与学生类或者老师类都是继承关系。

既然用过继承,相信大家也一定听说过泛化。 泛化表示is-a的关系,是对象之间耦合度最大的一种关系。实际上,泛化关系是继承的反关系,也就是说子类是从父类继承的,而父类则是子类的泛化。

5)实现 实现是一种类与接口的关系,表示类是接口所有特征和行为的实现。在UML类图中用带空心三角形的虚线表示。

以上就是UML图中类与类之间的关系。

四、面试题

问题1:你认为UML重要么?为什么? 分析:(这不废话吗?没作用你会问我?)UML在设计过程中还是有一定作用的,只是不到真正写代码,永远都不可能明确所有细节。 回答:UML当然很重要。写软件就好像建造建筑物一样。系统越复杂,参与编写与配置软件的人员之间的交流也就越重要。而UML则提供了分析师,设计师和程序员之间在软件设计时的通用语言。现在已经成为了面向对象软件分析与设计建模的事实标准。

问题2:UML类图在系统中是用来做什么的? 回答:类图出现在系统中的不同类来描述系统的静态结构,它用来描述不同的类以及它们之间的关系。

问题3:在UML中,类图由哪几部分组成? 回答:类图由三部分组成。第一部分是类名,每个类必须有一个名字。第二部分是类的属性,属性是指类的性质,也就是类的成员变量。包含了可见性、属性名称、类型和默认值等信息。第三部分是类的操作,操作是类的任意一个实例对象都拥有的行为,是类的成员方法。

问题4:请说明一下组合与聚合的区别 回答:其实对于这些比较基础的题目,相信软件工程专业的小伙伴们是对答如流了。聚合与组合都表示整体与部分的关系,只不过在聚合关系中,成员对象可以脱离整体对象独立存在,而在组合关系中,成员对象与整体对象之间具有同生共死的关系,例如头与嘴巴,如果头没了,那么嘴巴自然也不复存在了。

古语有云:非学无以广才,非志无以成学。视频的最后祝大家Study well(hard) and make progress every day.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI科技大本营的专栏

你一定能看懂的算法基础书(代码示例基于Python)

本文引自图灵教育《算法图解》 你一定能看懂的算法基础书;代码示例基于Python;400多个示意图,生动介绍算法执行过程;展示不同算法在性能方面的优缺点;教会...

5397
来自专栏JadePeng的技术博客

从编辑距离、BK树到文本纠错

搜索引擎里有一个很重要的话题,就是文本纠错,主要有两种做法,一是从词典纠错,一是分析用户搜索日志,今天我们探讨使用基于词典的方式纠错,核心思想就是基于编辑距离,...

6376
来自专栏chenjx85的技术专栏

leetcode-40-组合总和 II

给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

1341
来自专栏苦逼的码农

从零打卡leetcode之day 3--最大子序列

看到三个for循环,时间复杂度的O(n3)。这速度,实在是太慢了。我们来优化优化。

681
来自专栏Brian

R语言性能Tips和GC

最近团队在使用R语言作为算法的实践语言,通过人工策略和xgboost算法进行一些价格算法的控制和输出,发现一些代码中对于内存、CPU、程序设计思想以及现代统计算...

1230
来自专栏Eugene's Blog

一文总结学习 Python的14 张思维导图分类目录文章标签友情链接联系我们

1294
来自专栏Crossin的编程教室

【每周一坑】乒乓数

刚从假期回来,又要迎接周末,各位看官想必都很辛苦,所以本周每周一坑为大家准备一道简单的甜点题目,本题取材于伯克利大学 CS61 课程 homework02。 求...

3056
来自专栏ACM算法日常

ACM之坑&套路

写在前边:这些梗都是敝人自己做题和比赛时曾经坑过自己的地方,特别在这里记录一下,所有的链接都是本博客中的题解链接(有大致题意说明和代码),原题请到OJ上自行寻找...

812
来自专栏前端吧啦吧啦

数据结构(一)之基础知识

36710
来自专栏数据结构与算法

2017.10.23解题报告

预计分数:100+60+0=160 实际分数:100+80+0=180 T1 题目描述 现在有一个字符串,每个字母出现的次数均为偶数。接下来我们把第一次出现的字...

3295

扫码关注云+社区

领取腾讯云代金券