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 类图中意味着什么

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

    在我的库的文件中 我有一个继承自模板的类 我的代码示例 class data class dataA public data class dataB public data inheritance from a template templ
  • 用例图包括

    我有一个关于用例图的问题 如图所示 用户可以输入或更新他的姓名和问题 正如您所看到的 用户在第一次输入信息时需要输入姓名和问题 因此包括在内 但是 如果他希望更新他的信息 图表是否表明他必须修改名称和问题 因为它们包含在内 例如 如果他拼错
  • 在 NetBeans 7.1.1 中创建 UML 类图

    我想安装 启用 NetBeans 插件来创建和查看 UML 图 如图所示here http wiki netbeans org wiki images b b8 Vista Nimbus Uml Screenshot NBLookAndFe
  • 主动类与被动类

    在 UML 规范上层结构 2 5 仍为 Beta 第 203 页 中 可以通过将 isActive 设置为 true 来指定类为活动类 即 它的每个实例都是一个活动对象 当 isActive 为 false 时 类是被动的 即 它的每个实例
  • 如何绘制java uml类图并在另一个类中创建枚举[重复]

    这个问题在这里已经有答案了 假设我有一个类名 A 在这个类中我定义了枚举 Bpublic enum B AA BB CC 现在我想画一个uml来体现这种关系 应该怎么做呢 在类类图中 表示使用 例如
  • 从 umbrello 中的 java 代码自动创建类图?

    我能够将 java 代码导入到 umbrello 中 但是 如何自动生成类图呢 也许雨伞可以not有那个功能 来自handbook http docs kde org stable en kdesdk umbrello code impor
  • 聚合、组合、关联、直接关联

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

    我正在 Python 中实现一个具有 MVC 模式的应用程序 具有以下类定义 class Controller object def init self model view self model model self view view
  • Eclipse:如何安装 UML2 工具

    我想尝试 UML2 Tools for Eclipse 如图所示本教程 http www vogella de articles UML article html 我目前拥有面向 Java EE 开发人员的 Eclipse 3 6 Heli
  • 多个参与者,相同的用例 [用例]

    我试图描述一个用例 其中系统内的多个参与者可以执行相同的活动 例如 假设 作为示例 我想要使用 更新客户端 用例 但几个已确定的参与者可以执行此操作 Manager Chief Executive Customer Service Repr
  • UML 设计类图:具有另一个类作为属性的类?

    我很难弄清楚如何将特定场景建模为 UML 设计类图 假设我有以下情况 我有一个名为 CPoint 的类 它有两个属性 x 和 y R2 平面中的坐标 另外 我有一个名为 CLine 的类 它应该有两个 CPoint 作为属性 这对代码来说非
  • 在 Papyrus UML 模型中使用 MARTE GQAM 构造型

    我正在尝试使用 MARTE GQAM 构造型来构造模型的某些元素 但在为其某些属性赋值时遇到麻烦 例如 我将两条生命线之间的消息定型为 我想为其 hostDemand 属性分配一个值 该属性应为 NFP Duration 实例 我看不到如何
  • 关联注入还是依赖注入?

    我正在研究依赖注入模式 我看过很多例子 其中一个典型的例子就是以XxxService XxxRepository为例 但我认为 根据UML概念 类XxxRepository应该是类XxxService的关联 为什么不称这种情况为关联注入 但
  • 如何在 Windows 上使用 Pyreverse

    我想使用pyreverse 创建图表类 我下载它 当我使用这个命令时 pyreverse bat c PyreverseCommand a1 s1 f ALL o png test py 我收到错误 名称 点 无法识别 什么是 点 如何创建
  • 如何表示类的实例与将其作为输入的类之间的关系?

    我有一堂课叫House 这个类的实例是house class House def init self height length self height height self length length def housePlan hou
  • 用例 - 帮助 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我是编写用例的新手 我听说用例是非技术表达 我有以下任务 我必须为其编写用例 我降低了对你理解的要求 ABC公司的注册客户使用凭据登录系统以检索
  • UML 只能用于面向对象吗?

    目前 在我的论文期间 存在着关于 UML 是否仅用于 OO 开发 的激烈争论 我从一些来源进行了搜索 其中给出了很多关于它的论点 就我自己而言 我相信并非所有 UML 图都是专门为 OO 系统 软件开发而制作的 即 状态图 因此 我希望得到
  • UML:一对多关系表示?

    我是 UML 新手 还不太理解其表示法 这是我对图的理解 The system has many doctors Doctors can have many patients however patients can only have o
  • 有什么好的+免费+轻量+Linux UML设计工具吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个UML设计工具 仅用于设计 不需要代码生成 主要特征 Free 对于Linux 便于使用

随机推荐

  • 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中的四大关系 下面我就结合以下这张图来具体