UML类关系

2023-10-27

UML类关系


1.继承关系

继承也叫作泛化(Generalization),用于描述父子类之间的关系,父类又称为基类或者超类,子类又称作派生类。在 UML 中,泛化关系用带空心三角形的实线来表示。关于继承关系一共有两种:普通继承关系和抽象继承关系,但是不论哪一种表示继承关系的线的样式是不变的。

在这里插入图片描述

2.关联关系

关联(Assocition)关系是一种结构化的关系,表示一个对象与另一个对象之间有联系,如汽车和轮胎、师傅和徒弟、班级和学生等。在 UML 类图中,用(带接头或不带箭头的)实线连接有关联关系的类。在 C++ 中这种关联关系在类中通常是将一个类的对象作为另一个类的成员变量。类之间的关联关系有三种,分别是:单向关联、双向关联、自关联。

单向关联

如果是单向关联,使用的连接线是带单向箭头的实线 , 哪个类作为了当前类的成员变量,那么箭头就指向哪个类。

在这里插入图片描述

双向关联

一般使用没有箭头的实线来连接有双向关联关系的两个类,这两个类的对象分别作为了对方类的成员变量。

在这里插入图片描述

自关联

自关联指的就是当前类中包含一个自身类型的对象成员,

这在链表中非常常见,单向链表中都会有一个指向自身节点类型的后继指针成员,而双向链表中会包含一个指向自身节点类型的前驱指针和一个指向自身节点类型的后继指针。

在这里插入图片描述

3.聚合关系

聚合(Aggregation)关系表示整体与部分的关系。在聚合关系中成员对象是整体的一部分,但是成员对象可以脱离整体对象独立存在。在UML中,聚合关系用带空心菱形的直线表示,下面举两个聚合关系的例子:

  • 汽车与引擎、轮胎、车灯
  • 森林与植物、动物、水、阳光

代码实现聚合关系,成员对象通常以构造方法、Setter 方法的方式注入到整体对象之中,因为成员对象可以脱离整体对象独立存在。

表示聚合关系的线,有空心菱形的一端指向整体对象,另一端连接局部对象

在这里插入图片描述

4.组合关系

组合(Composition)关系表示整体和部分的关系,但是在组合关系中整体对象可以控制成员对象的生命周期,一旦整体对象不存在,成员对象也不存在。

  • 头和嘴巴、鼻子、耳朵、眼睛
  • 树和树根、树干、树枝、树叶

代码实现组合关系,通常在整体类的构造方法中直接实例化成员类,因为组合关系的整体和部分是共生关系,整体的实例对象被析构的时候它的子对象也会一并被析构。如果通过外部注入,即使整体不存在了部分还是存在的,这样的话就变成聚合关系了。

组合关系用带实心菱形的直线表示:

在这里插入图片描述

5.依赖关系

依赖(Dependency)关系是一种使用关系特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系,大多数情况下依赖关系体现在某个类的方法使用另一个类的对象作为参数

  • 驾驶员开车,需要将车Car对象作为参数传递给 Driver 类的drive方法。
  • 树木的生长,需要将空气Air、水Water、土壤Soil对象作为参数传递给Tree类的grow方法。

依赖关系通常通过三种方式来实现:

  1. 将一个类的对象作为另一个类中方法的参数
  2. 在一个类的方法中将另一个类的对象作为其对象的局部变量
  3. 在一个类的方法中调用另一个类的静态方法

依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方

在这里插入图片描述

最后总结

类之间的关系强弱顺序:继承(泛化) > 组合 > 聚合 > 关联 > 依赖(使用最强的关系描述即可)

关联关系、聚合关系和组合关系三者之间比较相似,最后就来总结一下这三者之间的区别:

  1. 关联和聚合的区别主要在于语义上:关联的两个对象之间一般是平等的,聚合则一般是不平等的。
  2. 聚合和组合的区别则在语义和实现上都有差别:
    • 组合的两个对象之间生命周期有很大关联,被组合的对象在组合对象创建的同时或者创建之后创建在组合对象销毁之前销毁,聚合则无需考虑这些事情。
    • 一般被组合对象不能脱离组合对象独立存在,而且也只能属于一个组合对象,聚合则不一样,被聚合的对象可以属于多个聚合对象。

实际中这三种关系的界限划分不必划分的如此清楚,只要能够利用对象之间的关系设计出可行的解决方案即可。

  • 参考课程:https://subingwen.cn/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UML类关系 的相关文章

  • 自动生成我的 C++ 代码的 uml 图

    不久前 我担任 Java 编程入门课程的助教 我们使用了一个名为BlueJ http www bluej org 它有一个很好的功能 即开发文件的概述是一个轻量级的 UML 图 其中绘制了 使用 指针和继承指针 这使得可以轻松查看程序的结构
  • 具有属性的 UML 建模枚举

    我想使用 Java 枚举 enum 创建一个 UML 图 它具有一个或多个属性 但我对如何做到这一点感到困惑 例如 可以这样声明枚举 public enum Enumeration type LITERAL A attr1 value at
  • 我可以使用 UML 来建模网站导航吗

    我可以使用 UML 对网站导航进行建模吗 如果是的话 有人给我一些书籍 链接以供参考 网站的 UML 之类的 如果不是的话 有哪些工具可以实现这一点 基本上我是一名程序员 当我设计以前的网站时 我只是在纸上勾勒出不同的页面设计想法 然后选择
  • 如何使用 NetBeans 6.8 UML 模块创建类图?

    在我看来 NetBeans 的 UML 模块隐藏得有点太多了 在 NetBeans 6 5 中 创建 UML 图非常容易 无需安装插件或其他东西 喜欢 读my post http karussell wordpress com 2010 0
  • 学习 UML 的最佳来源是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 UML 中建模协变关联类?

    In short 我想对两个类之间的协变关联进行建模 每个类都可以专门化 我需要展示相关关联类的专业化 但我想避免我的模型可能意味着存在冗余关联 即泛化之间的关联和专业化之间的关联 问题的逐步解释 我在 UML 类图中有一个多对多关联Per
  • 聚合、组合、关联、直接关联

    我正在复习面向对象编程方面的知识 在类之间的关系主题下 我遇到了一些对我来说有点模糊的关系 我知道依赖项 uses a 和继承 is a 但我对聚合 组合 关联和直接关联有点不熟悉 另外 其中哪一个是 has a 关系 有些可以与关联互换使
  • UML 聚合可以是双向的吗?

    我正在 Python 中实现一个具有 MVC 模式的应用程序 具有以下类定义 class Controller object def init self model view self model model self view view
  • 用例可以没有参与者吗?

    我正在研究全自动系统的用例图 外部系统只会触发该系统的一个用例 大多数其他用例都是计划任务并由计时器调用 我有一个由计时器调用的用例 它包含并扩展了其他两个用例 当我编写用例描述时 谁将成为 UC 2 和 UC 3 的参与者 用例可以在没有
  • 多个参与者,相同的用例 [用例]

    我试图描述一个用例 其中系统内的多个参与者可以执行相同的活动 例如 假设 作为示例 我想要使用 更新客户端 用例 但几个已确定的参与者可以执行此操作 Manager Chief Executive Customer Service Repr
  • 关联注入还是依赖注入?

    我正在研究依赖注入模式 我看过很多例子 其中一个典型的例子就是以XxxService XxxRepository为例 但我认为 根据UML概念 类XxxRepository应该是类XxxService的关联 为什么不称这种情况为关联注入 但
  • Dia:图表编辑器:盒子对象的限制?

    如标题所示 我尝试为 hte 3d 图形引擎 ogre3d 开发尽可能少的方案 问题是大图方案 Ogre Root 类需要相当多的从它下降的箭头 用关系箭头连接框的模型是它们只能通过边界周围的特定点 称为 关节 或其他东西 进入 退出 但现
  • UML三元关联实现java代码[重复]

    这个问题在这里已经有答案了 三元关联是结构关系 指定一个事物的对象连接到其他两个事物的对象 我理解这种关系 但我不知道如何实现显示这三个类之间关联的方法 让我们考虑下面的例子 项目有许多使用特定编程的开发人员 语言促进发展 开发人员使用特定
  • Android:从 Android Java 源代码创建 UML [已关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个可以从我的 Java Android 源代码自动创建 Uml 的程序 我测试过ArgoU
  • UML 到 Java 代码生成工具 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 这是正确的 UML 活动图吗?

    这是活动图截图 https i stack imgur com 575VU jpg 这是对的吗 如果不是 我做错了什么 从语法上讲 这个带有分区的活动图似乎几乎是正确的 起始节点应该是实心 黑色 圆圈 最终节点应该有一个内部实心 黑色 圆圈
  • UML 的 XMI 有 XSD 吗?

    是否有 UML XMI 文件的 XSD 标头仅包含名称空间引用
  • 创建UML图时应该编写构造函数吗?

    我有一项作业要求我为实际的 Java 程序创建 UML 图 但程序中有几个构造函数方法 我很困惑 我是否应该将这些构造函数方法添加到图中 根据 UML 规范 2 5 版第 11 4 4 节 构造函数是一个具有所属类类型的单个返回结果参数的操
  • Pear PHP UML 类图 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试创建现有代码的图形表示 我尝试使用 VS PHP 使用 Visual Studios 201
  • 是否有适用于 Java 的 Harel Statechart DSL 工具?

    我正在寻找一种能够理解 DSL 的工具 在其中我可以定义生成 Java 代码的状态图 或者 DSL 中的状态图可以按原样运行 该工具最好用 Java 编写 并且必须根据 Harel 状态图 或等效的 UML 2 状态机 的定义支持超级状态和

随机推荐

  • Panel三维数据结构丨Pandas数据分析基础(5)

    个人主页 互联网阿星 格言 选择有时候会大于努力 但你不努力就没得选 作者简介 大家好我是互联网阿星 和我一起合理使用Python 努力做时间的主人 如果觉得博主的文章还不错的话 请点赞 收藏 留言 支持一下博主哦 行业资料 PPT模板 简
  • 二叉树的遍历和统计二叉树中度为0、度为1、度为2的结点个数

    文章目录 实验五 树的应用 二叉树的遍历 一 实验目的 1 了解二叉树的逻辑结构和物理结构 2 掌握二叉树数据类型定义 3 熟练掌握二叉树在链式存储结构上的遍历操作 二 实验要求 三 实验任务 四 代码如下 五 实验结果图 实验五 树的应用
  • 重构改善既有代码设计----- 在对象之间搬移特性

    在对象之间搬移特性 常常我们只要使用 搬移函数 搬移字段 就可以解决大部分问题了 再使用两个重构手法时 尽量先使用搬移字段 再搬移函数 如果一个类变得没有足够的逻辑 可以考虑把它内联到一个和它关联最强的类中 如果一个类做的太多的事情 不利于
  • 二进制1010个Pycharm快捷键

    咱们写Python代码 至少得有一半是用 Pycharm 吧 这种傻瓜式的IDE学习成本低 不像VIM拿到手摸不着头脑 如果想让工具发挥出极致的效率 快捷键操作是必不可少的 有时候你敲几行代码 点几下鼠标 别人只要一个组合快捷键就能搞定 不
  • 自然语言处理之文本向量化(词袋模型、TF-IDF)

    目录 1 词袋模型 Bag of words 简称 BoW 2 词频向量化 3 TF IDF处理 3 1 TF 3 2 IDF 4 CountVectorizer与TfidfVectorizer的异同 5 sklearn中TfidfTran
  • Linux下安装配置maven

    参考链接 Linux下安装配置maven 配置maven的setting xml Linux下的复制粘贴等操作 一 Linux下安装配置maven 1 安装wget命令 如果需要通过使用wget命令 直接通过网络下载maven安装包时 需要
  • 计算机专业毕业设计题目哪个简单,计算机专业毕业设计题目计算机专业毕业设计的类型...

    不同的学校院系 不同的指导教师对计算机专业毕业设计有不同的指导方法 在计算机系 本科毕业设计通常以下面四种类型 1完成一个不太大的实际项目或在某一个较大的项目中设计并完成一个模块 如应用软件 工具软件或自行设计的板卡 接口等等 然后以工程项
  • Jeesite框架实用 如何实现本公司内数据权限功能使用

    文章目录 前言 一 数据库中创建一张视图表 非常重要 二 创建自己的表 三 使用jeesite导入表 生成代码 四 在此表生成的 service层中 加上过滤 五 在此表生成的 controller层中查看数据处 加上过滤 六 在此表生成的
  • SQL数据分析聚合及练习

    COUNT 不会考虑具有 NULL 值的行 SUM 忽略 NULL 值 最早的订单下于何时 SELECT MIN occurred at FROM orders 尝试执行和第一个问题一样的查询 但是不使用聚合函数 SELECT occurr
  • 基于ICP算法的三维点云数据拼接的MATLAB实现

    基于ICP算法的三维点云数据拼接的MATLAB实现 三维点云数据拼接是计算机视觉领域中的重要研究方向之一 随着三维扫描设备技术的不断发展 获取物体表面信息的三维点云数据已经成为一种常见的手段 但是由于采集时存在众多干扰因素 往往需要将不同位
  • 【华为OD机试真题 python】跳格子2【2023 Q2

    题目描述 跳格子2 小明和朋友玩跳格子游戏 有 n 个连续格子组成的圆圈 每个格子有不同的分数 小朋友可以选择从任意格子起跳 但是不能跳连续的格子 不能回头跳 也不能超过一圈 给定一个代表每个格子得分的非负整数数组 计算能够得到的最高分数
  • node---express框架详解

    一 简介 官方给出的概念 Express是基于Node js 平台 快速 开放 极简的Web开发框架 通俗的理解 Express 的作用和Node js 内置的 http模块类似 是专门用来创建Web服务器的 Express的本质 就是一个
  • VSCode中如何修改代码字体

    通过 File Preferences Settings Text Editor Font Font Family 中 修改对应的字体即可 因为比较喜欢 JetBrains Mono 所以设置的字体是这个 其中Jetbrains Mono字
  • 使用docker-compose与SpringBoot搭建ELK日志分析系统

    使用docker compose与SpringBoot搭建ELK日志分析系统 ELK对应Elasticsearch Logstash Kibana 版本7 17 7 Logstash作为日志采集工具 向Elasticsearch写日志信息
  • linux C之stat函数

    之前写过一篇关于stat命令的博客 介绍了stat命令的使用和输出信息表示 今天又见到了stat函数 因为输出原因 准备整理一下 stat函数介绍 根据 UNIX环境高级编程 中对于stat函数的解释 stat函数和stat命令一样 都是返
  • 插入、希尔、冒泡、快速、选择排序C++实现

    插入 希尔 冒泡 快速 选择排序C 实现 include
  • C语言——ATM系统项目

    实现效果如图 代码如下 include
  • 初学怎么看电路板

    电路板起支撑与固定无件的作用 同时又是各线路间的连线媒介 起到传送电信号重要作用 电路原理图为表达清晰起见 将功能电路集中在一起 而电路板要考虑电流大小 爬电距离 电磁兼容 热能耗 散热方式和外部接插件的位置等问题 需要有电路基础和电磁兼容
  • psi-probe安装手记

    作者 fbysssmsn jameslastchina hotmail com blog blog csdn net fbysss声明 本文由fbysss原创 转载请注明出处关键字 tomcat监控 probe 一 简介 psi probe
  • UML类关系

    UML类关系 OVERVIEW UML类关系 1 继承关系 2 关联关系 单向关联 双向关联 自关联 3 聚合关系 4 组合关系 5 依赖关系 最后总结 1 继承关系 继承也叫作泛化 Generalization 用于描述父子类之间的关系