UML类关系图记不住?一篇搞定

前言背景

为什么要看UML,最近小编在准备架构师考试不得不再拾起来回顾看一看这块内容,毕竟谁也不会和考试的重点部分过意不去。之前也接触过这块的内容,总是搞混,关联关系用实线、泛化关系用实现空心箭头 ...... 表示,老记混淆。刚开始怀着只要干不坏,就往死里干心里记忆,结果打脸来的太快,真的太难了。

 UML类关系

6 种UML类图常见的关系

  • 泛化(Generalization)
  • 实现(Realization)
  • 聚合(Aggregation)
  • 组合(Composition)
  • 关联(Association)
  • 依赖(Dependency)

类关系定义

1、泛化 (is a)

 是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。JAVA代码中,关键字 extends

2、实现 

是一种类与接口的关系,表示类是接口所有特征和行为的实现。JAVA代码中,关键字 implements

3、聚合(has a)

  整体与部分的拥有关系,且部分可以离开整体而单独存在,
  它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享,所以聚合关系也常称为共享关系。
  是关联关系的一种特例,在代码实现上无法进行具体区分,只能考虑具体的业务与逻辑关系。
 【代码体现】 成员变量 ,即作为类的属性

4、组合 (contains a)

  整体与部分的关系,但部分不可以离开整体而单独存在,部分不能给其他整体共享,作为整体的对象负责部分的对象的生命周期。这种关系比聚合更强,也叫强聚合。
  也是关联关系的一种特例
 【代码体现】 成员变量 ,即作为类的属性

5、关联 

 是一种拥有关系,它是类知道另一个类的属性和方法;
 在Java中,关联关系的代码表现形式为一个对象含有另一个对象的引用。
 也就是说,如果一个对象的类代码中,包含有另一个对象的引用,那么这两个对象之间就是关联关系。
 关联关系有单向关联和双向关联,大多数关联都是单向关联,单向关联关系更容易建立和维护。
【代码体现】 成员变量 ,即作为类的属性

6、依赖 (use a)

 是一种使用关系,一种若对关联关系,即一个类的实现需要另一个类的协助,所以尽量不要双向依赖。如驾驶员和汽车关系,驾驶员使用汽车
【代码体现】方法或构造器的的参数、方法的返回值,局部变量或者对静态方法的调用

类关系的图像

1、记忆类关系的顺序

在评价软件架构的优劣时,使用的重要标准是高内聚,低耦合

  按照耦合程度的高到低依次为 泛化=实现>组合>聚合>关联>依赖

泛化实现 都是强耦合,组合、聚合都属于特殊的关联关系,整体与部分的关系。组合 生命周期一致要求更高,其次是 聚合,然后是 关联 关系,最后是 依赖 (作为 类方法的参数和局部变量出现)。

2. 记住类关系的图案

类关系图总结 TIps :6-24-222
6个关系
2条虚线,4条实线
2个箭头,2个三角形、2个菱形(一个实心一个空心)

组合、聚合 都是带菱形的实线

  1. 组合 耦合度更高(要求生命周期一致)带实心菱形的实线
  2. 聚合空心菱形的实线
  3. 关联箭头的实线
  4. 依赖带箭头的虚线
剩下的就是带三角的线了   
  1. 泛化  继承父与子的关系 带三角的实线。
  2. 实现 带三角的虚线。

 具体例子

示例一:

 示例二:

 箭头指向

菱形代表整体,其他总是指向非当前类

聚合 棱形 指向(代表)整体
组合 棱形 指向(代表)整体
关联 指向被关联类
依赖 指向被依赖类
泛化 继承 指向父类
实现 接口 指向接口

到此为止认真看的话,应该差不多能记住了,后面就是有机会多练习了。下图来源《大话设计模式》

 

 

posted @ 2023-09-10 17:48  e鸣惊人  阅读(26)  评论(0编辑  收藏  举报