一贴看懂UML,不再发愁看不懂设计模式

2023-10-30

  在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)

         1. 泛化(Generalization)

        【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。例如:老虎是动物的一种,即有老虎的特性也有动物的共性。

        【箭头指向】:带三角箭头的实线,箭头指向父类

UML类图几种关系的总结 

        2. 实现(Realization)

        【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现.

        【箭头指向】:带三角箭头的虚线,箭头指向接口

UML类图几种关系的总结 

        3. 关联(Association)

        【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。

        【代码体现】:成员变量

        【箭头及指向】:带普通箭头的实心线,指向被拥有者

UML类图几种关系的总结 

        上图中,老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。但学生与某课程间的关系为单向关联,一名学生可能要上多门课程,课程是个抽象的东西他不拥有学生。 

        下图为自身关联: 

UML类图几种关系的总结

        4. 聚合(Aggregation)

        【聚合关系】:是整体与部分的关系,且部分可以离开整体而单独存在。如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。

        聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。

        【代码体现】:成员变量

        【箭头及指向】:带空心菱形的实心线,菱形指向整体

UML类图几种关系的总结 

        5. 组合(Composition)

        【组合关系】:是整体与部分的关系,但部分不能离开整体而单独存在。如公司和部门是整体和部分的关系,没有公司就不存在部门。

       组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。

【代码体现】:成员变量

【箭头及指向】:带实心菱形的实线,菱形指向整体

UML类图几种关系的总结

        6. 依赖(Dependency)

        【依赖关系】:是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖.

        【代码表现】:局部变量、方法的参数或者对静态方法的调用

        【箭头及指向】:带箭头的虚线,指向被使用者

UML类图几种关系的总结 

        各种关系的强弱顺序:

        泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖 

        下面这张UML图,比较形象地展示了各种类图关系:

UML类图几种关系的总结


看懂UML是更快理解设计模式的基础;

转自:http://blog.csdn.net/tianhai110/article/details/6339565

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

一贴看懂UML,不再发愁看不懂设计模式 的相关文章

  • 构建这些用例的最佳方法是什么?

    目前 我已经定义了 3 个不同的用例 它们实际上只是业务流程中的 3 个步骤 假设我有一份人员名单 所有这些人都对获得一个或多个有限资源感兴趣 例如 他们是音乐会的座位 最终 我希望自动且公平地将这些人分配到可用席位 我使用几种不同的算法来
  • XSD 转 UML 命令行工具

    我想知道 是否有人遇到过任何命令行工具 优先免费 用于将 xml 模式 xsd 转换为 UML 图 xsd 用于表示类 因此 UML 类图就适合该目的 我对命令行工具更感兴趣 因为我想让它成为一个自动任务 因此我宁愿不必打开 UI 来执行它
  • 如何在UML类图中描述包含的映射?

    我有一个 MyServer 类 其中包含一个 Map 其键是 MyClientType 对象 其值是 MyClient 对象 我想在类图中描述这种关系 但我找不到一种干净的方法来做到这一点 您可以使用合格的协会 1 MyServer Key
  • 用例图中的包含和扩展有什么区别?

    有什么区别include and extend in a 用例图 http en wikipedia org wiki Use case diagram Extend当一个用例向另一个一流用例添加步骤时使用 例如 假设 提取现金 是自动柜员
  • 是否可以从 MatLab 代码生成流程图? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我继承了一个 MatLab 项目 其中有一堆我需要重构的 MatLab 文件 能够生成流程图或类似的内容对我有很大帮助 我用谷歌搜索了
  • BPMN的优点和缺点?

    我希望您能告诉我从开发人员的角度来看 BPMN 的优点和缺点是什么 我将 UML 与 BPMN 进行比较 发现 UML 有很多优点和缺点 但 BPMN 却没有 这很大程度上取决于观众和目的 在建模语言方面 BPMN 和 UML 活动图涵盖了
  • “包含”、“扩展”和“使用”之间有什么区别?

    在用例图中 两者有什么区别 lt
  • 在序列/类图中将消费/生产事件表示为从微服务到消息队列[Kafka]的UML组件

    我有一个生成一些事件的用例 消费其他微服务生成的事件以及自己生成的事件 如何在序列图 类图中表示 Kafka 系统 运行中的微服务以及生产 消费事件 在 UML 中 我们有一个来自 DB 的特殊图表 我们有 Kafka 和 cron 作业的
  • 如何在重写方法中表示调用基类方法?

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

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

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

    我目前正在阅读 Martin Fowler 的 UML Distilled 我刚刚介绍了有关类图的部分 他在其中强调了在对类图进行建模之前理清自己的观点的必要性 然而 在实际绘制类图时 我对它的实际外观有点困惑 例如 我理解理论含义会改变关
  • 聚合、组合、关联、直接关联

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

    我正在 Python 中实现一个具有 MVC 模式的应用程序 具有以下类定义 class Controller object def init self model view self model model self view view
  • 如何在 UML 类图中表示“事件”?

    这是我的代码片段 public class Notation INotifyPropertyChanged public event PropertyChangedEventHandler PropertyChanged private N
  • 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 基数 因为我经常不得不争论它们 所以非常欢迎证明和来源 如果我想解释一下a Mother可以有几个Children but a Child有且仅有一个Mother 我应该写 Mother 1 Child
  • UML 到 Java 代码生成工具 [关闭]

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

    在 UML 类图中记录类的 C 属性的正确方法是什么 我还没有决定这是否是我的答案 但我想我会把它扔在那里以便讨论 这看起来可以接受吗 它是属性类型的实例 其中元数据值放入下面的标记值中 我刚刚弄清楚如何添加自定义立体类型 该箭头只是一个标

随机推荐

  • 【笔记】C++笔记

    1 书写HelloWorld include
  • ICML 2015压轴讨论总结:6大神畅谈深度学习的未来

    原文地址 http www csdn net article 1970 01 01 2825290
  • Error during WebSocket handshake: Unexpected response code: 404,springboot整合websocket出错

    Error during WebSocket handshake Unexpected response code 404 浏览器访问websocket出现错误 一 运行环境 二 需要引入的包 三 项目路径 四 工具类 五 静态页面以及js
  • CPU一级缓存L1 D-cache\L1 I-cache与二级缓存L2 cache深度分析

    CPU缓存 通过优化的的读取机制 可以使CPU读取缓存的命中率非常高 大多数CPU可达90 左右 也就是说CPU下一次要读取的数据90 都在缓存 SRAM 中 只有大约10 需要从内存 DRAM DDR等 读取 这大大节省了CPU直接读取内
  • 算法篇:贪心算法解决田忌赛马问题

    田忌赛马 贪心算法 问题分析 这是一道很经典的贪心算法入门题 这道题贪心的思想是 要把每一匹马的作用发挥到最大 把已 方赢的概率增加到最大 我是从双方慢马的角度来分析的 其实快马和慢马的思路差不多 用田忌最慢的马与王最慢的马相比较 1 如果
  • Spring 中如何为Bean注入集合呢?

    转自 Spring 中如何为Bean注入集合呢 下文讲述Spring中为Bean注入集合的方法分享 如下所示 常见的集合类型有 List Set Map 和 properties 标签 集合名称 说明
  • DC-DC电源转换电路设计

    第1条 搞懂DC DC电源怎么回事 DC DC电源电路 又称为DC DC转换电路 其主要功能就是进行输入输出电压转换 一般我们把输入电源电压在72V以内的电压变换过程称为DC DC转换 常见的电源主要分为车载与通讯系列和通用工业与消费系列
  • 【ES】多字段聚合分析

    public static Map
  • Vscode python配置了numpy包之后无法调用

    如果之前已经在vscode中配置好了numpy等其他库并且运行成功了 突然换了一个文件打开 如果发现找不到numpy库 很大可能是vscode将你的python解释器给更换了 如上所示 除了自己安装的python解释器之外 还有内置的和其他
  • 《QDebug 2023年6月》

    一 Qt Widgets 问题交流 二 Qt Quick 问题交流 1 Qt5 的 QML Settings 没有设置编码的接口 Qt6 虽然移除了 QSettings 的 setIniCodec 接口 默认为 utf8 但是 Qt5 这个
  • FPGA — BRAM 队列实践

    使用软件 Vivado 开发板 EGO1采用Xilinx Artix 7系列XC7A35T 1CSG324C FPGA BRAM 队列实践 功能描述 功能实现 1 添加BRAM的IP 2 数码管显示 3 时钟分频 4 按键消抖 5 顶层设计
  • Java-Exception-异常处理

    一 基本介绍 异常处理就是当异常发生时 对异常处理的方式 二 异常处理的方式 1 try catch finally 程序员在代码中捕获发生的异常 自行处理 2 throws 将发生的异常抛出 交给调用者 方法 来处理 最顶级的处理者就是J
  • 【Android】从SurfaceFlinger中获取各layer图片(4)再回顾

    从SurfaceFlinger中获取各layer图片的试验可以加深对GraphicBuffer和Layer的理解 dumpsys SurfaceFlinger中打印的Slot信息中有GraphicBuffer的指针 可以帮助我们了解Queu
  • thinkphp 用七牛云异步上传文件(前后端代码)

    1 首先创建一个七牛云帐号 完成后 添加对象存储 2 创建成功后 右上角 密钥管理 查看秘钥 找到AK SK 3 打开thinkphp的配置文件 将此代码加入 CONFIG QINIU gt array accessKey gt 你的AK
  • ARouter 使用教程,移动互联网开发工程师

    setContentView R layout activity one 第二步 调用 navigation 方法实现跳转 ARouter getInstance build ARouterConstants COM ACTIVITY1 n
  • whl文件安装库和pip换源

    作者介绍 作者 小刘在C站 每天分享课堂笔记 一起努力 共赴美好人生 夕阳下 是最美的绽放 目录 一 whell介绍 二 whell实现方式 三 whell安装实现 方式一 方式二 步骤1 步骤3 pip的换源 一 pip为什么要换源 二
  • 成功升级scikit-image的版本,从老版本0.13.0到0.17.2

    成功升级scikit image的版本 从老版本0 13 0到0 17 2 之前参考其他博客升级scikit image的版本没有成功 这次参考scikit image的github官网 顺利实现了升级 scikit image的githu
  • 线程和线程的创建

    一 线程的概念 1 实例 系统通过传感器采集数据 并通过显示屏将数据显示出来 在多线程实时系统中 可以将这个任务分解成两个子任务 如上图所示 一个子任务不间断地读取传感器数据 并将数据写到共享内存中 另外一个子任务周期性的从共享内存中读取数
  • [Mysql] 经典 50 题

    50道MySql练习题 本文档只有45道 流传自远古 相当经典 这套练习在多样性和难度上平衡的比较好 换句话说 基础sql查询练习有这套就够了 这套练习在互联网上存在时间悠久 有很多版本 本文档力图在可读性 规范性 可操作性上比这些版本做的
  • 一贴看懂UML,不再发愁看不懂设计模式

    在UML类图中 常见的有以下几种关系 泛化 Generalization 实现 Realization 关联 Association 聚合 Aggregation 组合 Composition 依赖 Dependency 1 泛化 Gene