UML中的四大关系

2023-05-16

前言:

        我们知道UML是一种通用的建模语言,建模能很好的帮助我们理解软件的功能和需求,在UML中画图就是我们要学习的重点。想要很好的学习UML画图就必须要理解UML中的四大关系。下面我就结合以下这张图来具体说说这四种关系。

图1
具体:
一、关联(Association)关系
        关联是描述具有共同结构特征、行为特征、关系和语义的链接。它是一种结构化的关系,它指明一个事物的对象与另一个事物的对象间的关系。在UML中关联用一条实线表示(),此外关联还可以有方向。见图2
 
 
图2
关联关系中的两个特例。
        1.聚合关系:聚合又称为聚集,它表示类与类之间的关系是整体与部分的关系。若该部分除了可以构成这个整体的一部分还可以是其他整体的一部分,那么这种聚合就是共享聚合。聚合关系用一端带有空心小菱形的直线表示,小菱形一端表示的模型元素是整体,另一端为部分。见图3
 
图3
 
        2.组合关系:若该部分是与整体共存,即整体消失了部分也就不存在了,那么这种聚合就是复合聚合,也就是组合关系。组合关系用一端带有实心小菱形的直线表示,小菱形端同样代表整体。见图4
 
 
图4
聚合与组合对比:
        相同点:都是部分与整体之间的关系。
        不同点:聚合表示的是若耦合关系,即部分脱离整体可以独立存在。而组合则为强耦合关系,整体消失了部分也就消失了。
 
二、依赖(Dependency )关系
        依赖表示的是两个或多个模型元素之间语义上的关系。其中一个模型元素是独立的,而另一个模型元素是不独立的,这个不独立的模型元素要依赖独立的模型元素。换句话说,就是依赖和被依赖的关系,而当被依赖的模型元素改变时,必然会是依赖的模型元素发生改变。见图5
 
 
图5
        在UML中定义了四种基本依赖类型,这里简单介绍一下它们的基本定义,如下:
        1、使用(Usage)依赖:使用依赖是非常直接的,它表示用户使用提供者提供的服务以实现它的行为。使用依赖是类中最常用的依赖。
        2、抽象(Abstraction)依赖:表示客户与提供者之间的关系,依赖于在不同抽象层次上的事物。
        3、授权(Permission)依赖:表示一个事物访问另一个事物的能力。提供者通过规定客户的权限,可以控制和限制对其内容访问的方法。
        4、绑定(Binding)依赖:是较高级的依赖类型,用于绑定模板以创建新的模型元素。
     
三、泛化(Generalization)关系
        泛化关系是一种存在与一般元素和特殊元素之间的分类关系。它描述的是“is a kind of”(是……的一种)关系。其中可以使用一般元素的地方可以用特殊元素的一个实例代替,但不能用一般代替特殊。泛化关系其实可以理解成是一种继承,这种继承只能使用在类型、用例和模型元素上,而不能是对象继承对象。泛化关系用一条从子类指向父类的空心三角箭头表示。见图6
 
图6
       泛化可以分为普通泛化和受限泛化,普通泛化与受限泛化的区别就在于有无约束条件。具体如下:
       1.普通泛化:没有给泛化添加约束。在UML中用一条带有空心箭头的实线来表示。
       2.受限泛化:给泛化关系附加约束条件,说明该泛化关系的使用方法或扩充方法。预定义的约束有4种,多重、不相交、完全和不完全。这些都是语义约束。
注:继承继承是指一个对象直接使用另一对象的属性和方法。即子类继承父类的属性和方法,子类还可以有自己的属性和方法。
四、实现(Realization)关系
        实现时规格说明和期实现之间的关系,它将一种模型元素与另一种模型元素连接起来。例如类和接口,其中接口只是行为的说明而不是结构或作实现。真正的实现由前一个模型元素来完成。通常会有实现的是在接口和实现它们的类或构件之间和在用例和实现它们的协作之间。在UML中,实现关系一般用一条带有空心箭头的虚线来表示。见图7
 
 
图7
       对比泛化和实现:
       泛化是类与类之间,而实现是类与接口之间。
 
总结:
      刚开始接触这四种关系的时候,觉得有点难理解,但静下心来好好看看就会清楚的多。虽然现在自己对这四种关系的理解还不是很好,还存在很多问题,但已经不像之前那样云里雾里了。对自己来说这就是进步了,希望自己能够再接再厉吧!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UML中的四大关系 的相关文章

  • 关于 UML 类图的问题吗?

    您好 我有一些关于 UML 类图的问题 我们将不胜感激 1 如何在属性中显示指针 2 什么是多重性 3 构图箭头应该朝什么方向 4 如何放置枚举 根据当前的 UML 标准 2 4 1 和下一个 2 5 几乎仅在更简单的文档中有所不同 指针
  • 关联的遍历方向

    我正在读这本书领域驱动设计 of 埃里克 埃文斯 第5章 关于协会 他降低模型复杂性的建议之一是为关联施加遍历方向 I quote 尽可能地限制关系很重要 A 双向关联意味着两个对象都可以被理解 只有在一起 当应用需求不需要遍历时 在两个方
  • 实体控制边界(ECB)与模型视图控制器(MVC)[重复]

    这个问题在这里已经有答案了 我不确定我是否有正确的概念 人们告诉我 边界 视图 实体 模型 控制 控制器 然而基于我对 MVC 的了解 胖模型 瘦控制器 不是 Boundary Controller Control Model 业务逻辑 和
  • 如何避免类图中的循环关系

    Hi I have a question about some circular relationships that I am facing with my database design I read a few more simila
  • 我可以使用 UML 来建模网站导航吗

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

    有subset在部门类和人员类之间 但我不知道比是什么意思 家庭作业机会 查看由子集约束链接的两个关系 每个部门有多名成员 每个部门设经理一名 子集表示这两者之间的约束 如果后一个关系的元素是第一个关系的子集 那么你会如何描述其含义 EDI
  • 在 Visual Studio 2017 中的类图中创建聚合和组合

    我正在考虑在 Visual Studio 中创建类图 我注意到工具箱似乎只允许类之间的关联关系 是否可以在类图中创建更强的关系 即聚合和组合关系 另外 是否可以从代码自动创建类图 好问题 首先 Visual Studio VS 类设计器不是
  • 模板继承的 UML 图

    在我的库的文件中 我有一个继承自模板的类 我的代码示例 class data class dataA public data class dataB public data inheritance from a template templ
  • 学习如何分析项目

    我刚刚偶然开始为我公司的一个客户 中小企业 分析一个项目 我是一名 Net 开发人员 5 年 在分析软件方面经验很少 来自学校的 UML 我们刚刚结束了与用户两周的交谈 并得到了一份不错的需求清单 显然 我们已经过滤掉了最重要的需求 并且必
  • 如何在重写方法中表示调用基类方法?

    我有一个子类想要向基类函数添加更多功能 我如何表示它也执行基类函数而不仅仅是新添加的功能 有趣的问题 我用 Enterprise Architect 尝试过 它确实让我选择了父级的操作 但图中的显示没有改变 看来您需要为此使用注释 如你看到
  • 类图转换为关系模型;继承和匹配表

    对于一个学校项目 我应该设计上学期项目的系统 我们使用 UML 创建一个极其简单的用例图 没有 lt
  • 如何在 UML 属性中指定枚举文字作为默认值?

    我目前使用 EMF UML Implementation 进行一些模型转换 在我的模型转换中 我创建了一个具有一些属性的 uml 类 这些属性是我也创建的枚举类型 某些属性应该获得默认值 默认值应该是枚举文字 现在的问题是 如何将枚举文字获
  • 如何绘制java uml类图并在另一个类中创建枚举[重复]

    这个问题在这里已经有答案了 假设我有一个类名 A 在这个类中我定义了枚举 Bpublic enum B AA BB CC 现在我想画一个uml来体现这种关系 应该怎么做呢 在类类图中 表示使用 例如
  • UML 类图概念、规范、实现

    我目前正在阅读 Martin Fowler 的 UML Distilled 我刚刚介绍了有关类图的部分 他在其中强调了在对类图进行建模之前理清自己的观点的必要性 然而 在实际绘制类图时 我对它的实际外观有点困惑 例如 我理解理论含义会改变关
  • 学习 UML 的最佳来源是什么? [关闭]

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

    我即将绘制 记录一些客户端 服务器连接建立代码 以更好地理解它 有几个操作是在单独的线程中异步完成的 连接线程 数据接收线程等 我应该在单独的图表上显示它们吗 我更愿意将其放在单个图表上以掌握整体视图 但不知道如何在活动图上表示它 我不确定
  • 如何用序列图来展示一个类与另一个类之间的关系,以该类的实例的实例作为输入?

    我将使用之前的相同示例question https stackoverflow com questions 66934927 how to represent the relationship between an instance of
  • 如何使用 js/uml 对 JavaScript 文件进行逆向工程?

    Goal 我的目标是从我的 JavaScript 项目 由多个 js 文件组成 中获取 UML 模型并将其存储为 XMI 我已经走了多远 我在网上搜索了一下 发现js uml是第一个去的地方 我已经设法让 js uml 插件与 Eclips
  • 绘制 UML 时何时使用属性(属性)而不是关联/聚合/组合

    好吧 我有点困惑 当尝试在 UML 图中显示关系时 我应该向类添加属性 还是绘制与类的关联 例如 假设我有一个 DFA 类 其中包含 10 个状态对象 每个状态对象都有一组不同的通往 DFA 中各种状态的路径 我应该绘制从 DFA 到 St
  • 在用例建模中分解 CRUD

    我有一个后续问题用例图中的 CRUD https stackoverflow com questions 7772399 crud in a use case diagram 如果我需要分解复杂的用例 例如 管理用户 假设这很复杂 可以将它

随机推荐

  • Go语言入门2-指针问题:同一地址取值,*(&a)与*ip值不同?

    一 测试结果 二 测试代码 package main import 34 fmt 34 func main var a int 61 20 声明实际变量 var ip int 声明指针变量 ip 61 amp a 指针变量的存储地址 fmt
  • Google 用搜索追踪流感趋势

    Google 周二发布了一个新网站 http www google org flutrends 用来追踪流感趋势 该服务使用了与 Google Trends 一样的关键词追踪技术 xff0c 对人们输入的 flu 一类的词汇进行追踪 xff
  • openCV(Java版):直接操作像素点的实例

    最近看了平均脸的一些东西 xff0c 试了一下午没有装成功dlib xff0c 因此就简单的将两张图片对应位置相加 xff0c 然后取平均 xff0c 虽然很简单 xff0c 但是一直纠结在如何操作像素的问题 程序具体如下 xff1a im
  • openCv+Java实现人脸剪切

    学习需要 xff0c 对手里人脸图片进行了剪切 xff0c 将人脸图像铺满整张图片 FaceCrop java import org opencv core Core import org opencv core Mat import or
  • selenium之ChromeDriver与版本下载

    最近开始学习爬虫 xff0c 遇到使用selenium工具 xff0c 需要下载ChromeDriver xff0c 我的Chrome版本是65 xff0c 网上大多信息是60版本的 xff0c 但是Driver很多 xff0c 然后发现D
  • 视觉场景理解论文阅读笔记2:Hierarchically Structured Reinforcement Learning for Topically Coherent Visual Story

    一 文章相关资料 论文地址 点击打开链接 二 阅读笔记 1 论文思想 针对序列图像生成故事描述的需求 xff0c 使用层次结构的网络进行解码学习 高级网络用于学习序列中每幅图像的语义信息 xff0c 所属主题 xff1b 低级网络用于根据学
  • 自动驾驶数据集梳理

    1 Kitty数据集 数据链接 xff1a http www cvlibs net datasets kitti 主要应用方向 xff1a 用于评测立体图像 stereo xff0c 光流 optical flow xff0c 视觉测距 v
  • 去除Chrome空白页的缩略图

    文章目录 Chrome 74 0 xx xff08 2019 05 08更新 xff09 Chrome 73 0 3683 103 xff08 2019 04 15更新 xff09 Chrome 新版本处理 xff08 2018 11 16
  • “数字化”与“信息化”的区别是什么?

    大家应该都注意到了 xff0c 前些年都在提信息化 xff0c 近几年又在提数字化 xff0c 数字孪生 xff0c 但是 数字化 和 信息化 到底有什么区别呢 xff1f 今天看到了数字化专家付晓岩老师的回答 xff0c 感觉非常经典受用
  • oauth2密码授权模式

    Oauth2提供的默认端点 oauth authorize xff1a 授权端点 oauth token xff1a 令牌端点 oauth confirm access xff1a 用户确认授权提交端点 oauth error xff1a
  • 全屏网页时钟屏保flipclock-beautify,简约风格,电脑手机均支持访问

    简介 这是一个全屏网页时钟屏保 xff08 桌面时钟 xff09 xff0c 简约风格 爱学习爱工作的你一定会喜欢它滴 全屏时钟显示效果 特点 支持背景图片显示与隐藏支持不同的时钟样式显示支持本地图片加载支持随机互联网超清图片及分辨率切换支
  • ROS-学习笔记-06- Docker安装ROS、ROS VNC & Docker常用命令

    使用Docker安装ros可以避免需要同时开多个虚拟机模拟不同版本ros和不同版本机器人的情况 目录 安装DockerDAOCloud一键安装其他安装方法注意要卸载旧docker用户设置问题 拉取ROS镜像1 Xserver 显示2 打包好
  • RuntimeError: cuDNN error: CUDNN_STATUS_NOT_INITIALIZED

    问题 xff1a 调用显卡时 xff0c 出现RuntimeError cuDNN error CUDNN STATUS NOT INITIALIZED 问题分析 xff1a 出现这种问题 xff0c 一般是因为cuda cudnn 显卡驱
  • 学习PCL库:PCL库中surface模块

    公众号致力于点云处理 xff0c SLAM xff0c 三维视觉 xff0c 高精地图等领域相关内容的干货分享 xff0c 欢迎各位加入 xff0c 有兴趣的可联系dianyunpcl 64 163 com 未经作者允许请勿转载 xff0c
  • Android硬编解码接口MediaCodec使用完全解析(一)

    0 本文概述 MediaCodec是android api 16以后开放的硬编解码接口 xff0c 英文文档参照这个链接 xff0c 中文翻译可以参考这个链接 本文主要记录的是如何使用MediaCodec对视频进行编解码 xff0c 最后会
  • 【Python】闭包的实现原理,如何在内部函数修改外部函数的变量

    什么是闭包 xff1f 闭包是指在一个函数中定义了一个另外一个函数 xff0c 内函数里运用了外函数的临时变量 xff0c 并且外函数的返回值是内函数的引用 xff0c 这样就构成了一个闭包 闭包的使用 xff0c 可以隐藏内部函数的工作细
  • 2016你配得上更好地自己

    传统里我一直觉得过完春节才是一年结束的时候 xff0c 但是现在慢慢习惯阳历的计算 xff0c 2017年1月1日 xff0c 看着空间里面新年祝福和期待 xff0c 突然觉得这才是过年 2016年就这样走了 xff0c 以后我再也回不到2
  • 【图像处理】【去模糊】代码资源汇总

    1 Efficient Deblurring for Shaken and Partially Saturated Images 2 Non uniform Deblurring for Shaken Images 3 Examples o
  • 程序猿小白的2016—不忘初心,继续奋斗

    回顾过去的一年 xff0c 酸甜苦辣各种滋味 这一年很不一样 xff0c 离开了大学校门 xff0c 在社会上也体验了一把 思想逐渐成熟起来 xff0c 2016已然成为过去 xff0c 却带给了自己很多难忘的经历 完美的毕业设计 作为一名
  • UML中的四大关系

    前言 xff1a 我们知道UML是一种通用的建模语言 xff0c 建模能很好的帮助我们理解软件的功能和需求 xff0c 在UML中画图就是我们要学习的重点 想要很好的学习UML画图就必须要理解UML中的四大关系 下面我就结合以下这张图来具体