首页 > 其他分享 >UML类关系图记不住?一篇搞定

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

时间:2023-09-10 17:55:54浏览次数:45  
标签:关系 搞定 聚合 泛化 实线 代码 关联 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. 实现 带三角的虚线。

 具体例子

示例一:

 示例二:

 箭头指向

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

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

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

 

 

标签:关系,搞定,聚合,泛化,实线,代码,关联,UML,记不住
From: https://www.cnblogs.com/it-ws/p/17691439.html

相关文章

  • 安卓如何设置开机启动某个程序?init.rc给你搞定
    一、如何设置开机启动某个程序?1.需求描述最近有个项目需要在Android开机启动之后,自动执行一个C语言编写的程序:pengd该程序运行时需要修改网络ip地址及其他网络操作,所以需要root权限根据需求描述,我们需要做一下操作:将pengd预置到Android中的某个路径下,比如放在/sbin/pengd......
  • 一文搞定>>、<<、>>>等位运算
    位运算在我们平时开发中很少会用到,以至于它被大多数人所忽略,因此在面试题中能频繁的看到位运算的身影。由于位运算本质是二进制运算,大多数开发者可能会对此比较陌生,本文旨在揭开位运算的神秘面纱,一同探究其本质,帮助大家掌握位运算的方法。位运算包括以下几类:运算符运算规......
  • 【技巧分享】如何获取子窗体选择了多少记录数?一招搞定!
    Hi,大家好久不见。我这个更新速度是不是太慢了呀,因为,最近又又又在忙,请大家谅解啦。现在更新文章、视频都要花好久去考虑,好不容易有个灵感了,一搜索,结果发现之前都已经分享过了(委屈脸)。那今天,给大家分享一个子窗体相应的示例。我们来看操作吧。01、创建窗体还是一样,我们先来创建几......
  • 实现Map批量赋值,我只需24秒搞定!
    函数的功能是将一组键值对批量赋值给Map中的键。在Java中,通常使用Map的put方法逐个将键值对赋值给Map,但在某些场景下,可能需要一次性将多个键值对赋值给Map。函数功能:Map批量赋值参数1:参数名称:target;参数类型:Map;参数描述:Map对象参数2:参数名称:keyAndValue;参数类型:Object;参数描述:k......
  • 统一建模语言UML
    “统一建模语言UML”课程教学大纲UnifiedModellingLanguageCourseOutline32学时2学分一、本课程的性质、目的、任务本课程以介绍面向对象的统一建模语言UML为主,目的是了解面向对象技术的基本概念,掌握面向对象的分析和设计方法,以及与面向对象技术相关的一些软件开发技术,同......
  • 一文搞定,PO设计模式详解
    PO模式:全称:pageobjece,分层机制,让不同层去做不同类型的事情,让代码结构清晰,增加复⽤性。PO模式的优势:1)效率⾼:同理,PO模式的逻辑层⽅法有具体定义,情况和元素发⽣变化⼀样修改逻辑层,业务层不变。这样看来结构简单清晰,舒服更符合⼈类习惯,普通⽅式就是继续堆case。2)复⽤多收益⼤:同样......
  • 【文件转存】百度网盘文件转存到夸克网盘【一步搞定】【一眼就会系列】【已实践已完成
     查了一堆网上没有一个靠谱的,没有一个能一下讲解清楚的(说一堆没重点哎)。言归正传:为啥要备份?大家都知道东西不能放一个篮子。重大项目都有备用方案。还是自己搞吧。我找到了一个非常简单的办法,一步就能搞定,非常简单请看:   登录PC端百度网盘和夸克网盘,......
  • 一键搞定WebAPI调试:推荐这款高效工具
    前后端分离前后端分离的起因为什么要有前后端分离呢?我们回想一下以前的开发是怎么开发的,在以前的时候,前端业务还没那么复杂,所以基本都是一个人包揽前后端,也就是全栈,而为了方便开发,就把前后端放在一个项目中去开发这对于一个人开发来说是确实挺方便,但是随着互联网飞速发展,前端业务......
  • 国内免费试用ChatGPT,三步搞定
    一、更改edge配置,将它改为已启用。配置地址:edge://flags/#extensions-on-edge-urls 二、下载压缩包,将解压文件直接拖进,然后打开。插件包地址:https://pan.baidu.com/s/1sYbN2sBzVMc3N_hqsAa_DQ?pwd=cfqw 三、登录账号即可使用 ......
  • 简单三步搞定 ChatGPT API 调用,轻松畅聊机器人!
    ChatGPTAPI是什么ChatGPT已经成为了很多人日常工作的一部分,帮你写周报,做翻译,查资料。但是,有很多事情是网页版的ChatGPT做不到的。比如,我想要做一个关于Apifox的知识的问答机器人,能在企业微信里访问。这个时候,我就需要用到ChatGPTAPI了。ChatGPTAPI是一种由OpenAI提供......