代码改变世界

uml类图的几种关系

2020-01-07 11:00  kk20161206  阅读(160)  评论(0编辑  收藏  举报

几种关系:

1. 实现:车是抽象概念,在现实中无法直接定义对象,需要具体子类实现它。空心箭头虚线

 

 实现为继承抽象类。

2. 继承:泛化关系is-a,就是继承关系。suv是小汽车,猫是动物。空心箭头实线

 

 

 

 

3. 组合:A组成B,B由A组成。整体由部分构成,整体不存在了,部分也不存在。比如公司不存在了,部门也不存在。实心菱形箭头直线表示。小汽车与发动机之间是组合关系

 

 

 

4. 聚合:A聚合到B上,B由A聚合。用于表示实体对象之间的关系,表示整体由部分构成的语义。比如一个部门由多个员工组成。与组合不同的是,整体和部分不是强依赖的,即使整体不存在了,部分依然存在。比如部门不在了,人员依然存在。空心菱形箭头直线表示:学生与班级之间是聚合关系

 

 

 

5. 关联:描述不同类的对象之间的关系;它是一种静态关系,通常与运行状态无关,一般由常识等因素决定的;一般用来定义对象之间静态的、天然的结构;所以,关联关系是一种“强关联”的关系。比如乘车人和车票、学生和学校之间是一种关联关系。关联关系不强调方向,表示对象间相互知道,用一条直线表示;如果特别强调方向,用带箭头的直线表示。最终代码中,关联关系通过以成员变量的形式实现的。

  • 学生与身份证之间为关联关系,使用一根实线表示;

 

 

 

6. 依赖:用一条带箭头的虚线表示的,如下,表示A依赖B,它描述一个对象在运行期间用到另一个对象的关系;与关联关系不同的是,它是一种临时性的关系,通常在运行期间产生,并随运行时的变化;依赖关系也可能发生变化。

显然,依赖关系有方向,双向依赖是一种比较糟糕的结构,我们应该保持单向依赖,杜绝双向依赖。

 

 注:在最终代码中,依赖关系体现为类构造方法及类方法的传入参数,箭头的指向为调用关系;依赖关系除了临时知道对方外,还是“使用”对方的方法和属性。

 

参考:https://design-patterns.readthedocs.io/zh_CN/latest/read_uml.html