一般情况下,使用关联(association)来表示像类中的字段等。这个关系是始终存在的,因此你可以随时针对关联项进行访问调用,例如可以始终从 Customer 对象获取 Order 对象。但事实上它并不需要是一个字段,如果从更偏向于接口建模的角度来看,它只是表示 Customer 中存在了一个可以返回 Order 的方法。

此处引用《UML Distilled》一书中的定义:

a dependency exists between two elements if changes to the definition of one element (the supplier) may cause changes to the other (the client)

两个元素之间存在依赖关系,是指如果改变其中一个元素(supplier)的定义可能会导致另一个元素的变化(client)

这是一个模糊和普通的关系定义,这就是为什么对 UML 有许多不同形式的依赖(dependency)定义。而在代码术语中,诸如命名一个参数类型和创建一个临时变量对象等也暗示着依赖关系。

你可能不想在 UML 图中显示所有的依赖 - 因为有太多的依赖。你需要有选择性地显示那些对你的沟通表达非常重要的依赖。

我倾向于不频繁的使用多种依赖形式定义。我发现大部分情况下我要展现的关键点是依赖的存在,而使用哪种形式来表述已经不是那么重要。

关联(association)也意味着依赖(dependency),如果两个类之间存在关联关系,则也存在依赖关系。但我无法想象你可能会用一条额外的线来表示这种情况。关联已经暗示了依赖,因此无需再泛化(generalization)了。

这种混淆的原因之一就是在 UML 1.0 中使用了瞬态链接(transient links),这似乎是由于 UML 1.0 的元模型的定义问题,通过使用关联关系形式来体现它们自身的依赖,例如参数。我一直不喜欢这种表示方式,因为我觉得一个永久的关系和一个仅在当前方法中存在的上下文关系之间存在着重要的区别。因此我会以依赖的形式来表示而非关联。在 UML 2.0 中这个问题不会再出现,因为元模型中采用了不同的形式来表示方法上下文的关系,所以上述的表示形式在 UML 2.0 中不在有效。

翻译自 Martin Fowler 文章 《Dependency And Association》。







本文转自匠心十年博客园博客,原文链接:http://www.cnblogs.com/gaochundong/p/uml_difference_between_dependency_and_association.html,如需转载请自行联系原作者

UML中依赖(Dependency)和关联(Association)之间的区别相关推荐

  1. UML中依赖,关联,聚合,组合的含义(结合UML图和实战代码详解)

    UML中各种关系的含义 1. 什么是UML图? 2. UML图中的各种关系含义 2.1 依赖 2.1.1 简单理解及画法 2.1.2 那么在UML中的依赖是怎样的呢? 2.1.3 实战中UML图的画法 ...

  2. IO多路复用中select、poll、epoll之间的区别

    本文来说下IO多路复用中select.poll.epoll之间的区别 文章目录 什么是IO多路复用 为什么有IO多路复用机制 同步阻塞(BIO) 同步非阻塞(NIO) IO多路复用(现在的做法) 3种 ...

  3. SQL Server中唯一索引和唯一约束之间的区别

    This article gives you an overview of Unique Constraints in SQL and also the Unique SQL Server index ...

  4. 解析java中方法的重载和重写之间的区别与联系

    解析java中方法的重载和重写之间的区别与联系 1 不同点 1.1 方法重写是在不同的类中(父子类),方法重载是在同一类中 1.2 方法重载最初的目的是构造方法的多样化,方法重写的目的是让重写的方法满 ...

  5. Java Persistence API中的FetchType LAZY和EAGER之间的区别?

    我是Java Persistence API和Hibernate的新手. Java Persistence API中的FetchType.LAZY和FetchType.EAGER什么区别? #1楼 我 ...

  6. Vue中computed、methods和watch之间的区别

    对于那些开始学习Vue的人来说,对于方法.计算属性和观察者之间的区别有点混淆. 尽管通常可以使用它们中的每一个来完成或多或少相同的事情,但了解每个人在哪里胜过其他人还是很重要的. 在这个快速提示中,我 ...

  7. .NET中小数,浮点数和双精度之间的区别?

    .NET中的decimal , float和double float什么区别? 有人什么时候会使用其中之一? #1楼 对我来说,这是一个有趣的话题,因为今天,我们遇到了一个讨厌的小错误,涉及到deci ...

  8. Hibernate中保存与持久性以及saveOrUpdate之间的区别

    保存与保存或更新与持久保存在Hibernate中 save和saveOrUpdate之间的区别是什么或save和persist之间的区别是任何Hibernate面试中常见的面试问题,就像Hiberna ...

  9. Scala中Unit、Nothing和Null之间的区别概述

    在Scala中,Unit.Nothing和Null是三个比较特殊的数据类型,三者之间的区别如下: Unit 类似于Java中的void,表示没有返回值,用于不返回任何结果的方法的结果类型. 只有一个实 ...

  10. 计算机关闭和注销的区别,你可知道windows系统中注销、关机、休眠之间的区别吗...

    我们在日常的使用计算机中,如果你有足够细心的话,也许你会好奇当你想关闭计算机的时候,注销.关机.睡眠这3者之间的区别是什么呢?我们在操作电脑的时候,会通过关机.注销.休眠等各种方式来让电脑停止工作.但 ...

最新文章

  1. 总算会用sphinx生成文档了
  2. C++ Primer 第10章 习题 10.18
  3. C++ string与数值的转换
  4. Why NoSQL?
  5. SAP CRM调查问卷的评分和图表显示功能介绍 1
  6. 线性代数问卷调查反馈——Find The Determinant III,Takahashi‘s Basics in Education and Learning
  7. 索引和未索引执行计划的比较_详解Oracle复合索引+实例说明
  8. 关于XShell 启动虚拟机的weblogic并在本地打开oracle-weblogic 有关部署
  9. vue 过滤器 filters
  10. bigdecimal除法保留4位小数_小猿圈分享-MySQL保留几位小数的4种方法
  11. 数据库工作笔记005---You have an error in your SQL syntax; check the manual that corresponds to y
  12. 5 questions
  13. Java工具类(获取当前主机操作系统名)
  14. 将浮点数转换为字符串
  15. 20172315 2018-2019-1《程序设计与数据结构》课程总结
  16. c# 添加外部程序集相对引用问题
  17. 智能电话机器人源码安装 部署好后,人工智能电话机器人,不仅仅是打电话而已!
  18. SQL Server2000安装教程
  19. 专访方立勋:开发者应该保持好奇和热情
  20. 巧妙利用回收站做文件隐藏

热门文章

  1. QT creator 编辑器快捷键
  2. composer.install
  3. JS中类方法、对象方法、原型方法
  4. 团队作业 -- beta版本
  5. Windows via C/C++ 学习(6)内核对象
  6. *P1108 低价购买 dp
  7. Python工程师面试题目
  8. 单调队列(数列中长度不超过k的子序列和的最值)
  9. jQuery 实现点击页面其他地方隐藏菜单
  10. B. Hierarchy