程序员面试闪充--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.