一般情况下,使用关联(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》。

UML中依赖(Dependency)和关联(Association)之间的区别的更多相关文章

  1. Spring中Model、ModelMap及ModelAndView之间的区别

    Spring中Model.ModelMap及ModelAndView之间的区别   1. Model(org.springframework.ui.Model)Model是一个接口,包含addAttr ...

  2. C#中string.Empty、""和null 之间的区别

    1.C#中string.Empty.""和null 之间的区别 (http://blog.csdn.net/henulwj/article/details/7830615)

  3. Android中dip, dp, px,pt, sp之间的区别:

    Android中dip.dp.sp.pt和px的区别   1.概述 过去,程序员通常以像素为单位设计计算机用户界面.例如:图片大小为80×32像素.这样处理的问题在于,如果在一个每英寸点数(dpi)更 ...

  4. mysql 中execute、executeQuery和executeUpdate之间的区别

    在用纯JSP做一个页面报警功能的时候习惯性的用executeQuery来执行SQL语句,结果执行update时就遇到问题,语句能执行,但返回结果出现问题,另外还忽略了executeUpdate的返回值 ...

  5. C++中指针和引用、数组之间的区别

    指针指向一块内存,它的内容是所指内存的地址:而引用则是某块内存的别名,引用初始化后不能改变指向.使用时,引用更加安全,指针更加灵活. 初始化.引用必须初始化,且初始化之后不能呢改变:指针可以不必初始化 ...

  6. iOS中assign,copy,retain之间的区别以及weak和strong的区别

    @property (nonatomic, assign) NSString *title; 什么是assign,copy,retain之间的区别? assign: 简单赋值,不更改索引计数(Refe ...

  7. 详解UML中的聚合,关联,泛化等关系

    1. Overview UML设计类中,类的关系分为Generalization(泛化),Dependency(依赖关系).Association(关联关系).Aggregation(聚合关系).Co ...

  8. java中静态代理跟动态代理之间的区别

    文章转载于:http://www.cnblogs.com/xiaoluo501395377/p/3383130.html 在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另 ...

  9. Java中Scanner类和BufferReader类之间的区别

    java.util.Scanner类是一个简单的文本扫描类,它可以解析基本数据类型和字符串.它本质上是使用正则表达式去读取不同的数据类型. Java.io.BufferedReader类为了能够高效的 ...

随机推荐

  1. idea 到myeclipse

    在上一篇博客使用maven进行开发过程管理之准备篇中提到了maven的基本概念.IT男罗书全觉得概念我是懂了,但是那些东西似乎离我很远啊.先开发再说吧, 于是IT男罗书全就在svn上取了源代码,并开始 ...

  2. MFC中控制COMBOBOX控件的下拉框高度

    这是使用Visual Stiduo的小技巧哦.今天上网找来的.在界面设计面板上,点击ComboBox的下拉箭头,会另外出现一个虚边框.可以调整其大小.这个就是实现运行的时候下拉边框的默认值啦.

  3. VC++ 标准C++中的string类的用法总结

    相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯 ...

  4. Spring 4集成 Quartz2(转)

    本文将演示如何通过 Spring 使用 Quartz Scheduler 进行任务调度.Spring 为简化 Quartz 的操作提供了相关支持类.本文示例使用的相关工具如下: Spring 4.2. ...

  5. Lambda表达式的语法格式

    Lambda表达式的语法格式: 参数列表 => 语句或语句块 “Lambda表达式”是委托的实现方法,所以必须遵循以下规则: 1)“Lambda表达式”的参数数量必须和“委托”的参数数量相同: ...

  6. redis配置认证密码

    redis配置密码1.通过配置文件进行配置yum方式安装的redis配置文件通常在/etc/redis.conf中,打开配置文件找到 #requirepass foobared 去掉行前的注释,并修改 ...

  7. perl 入门的基础

    perldoc是在搜索手册中查找你要寻找的函数 例如(查找print函数):perldoc -tf print

  8. 常用JS汇总

    01. 取文档url参数值 function getQueryString(name) { var reg = new RegExp("(^|&)" + name + &q ...

  9. Ubuntu下配置和使用github

    一.配置github环境 1.环境:Ubuntu14.04 2.申请github账号 3.安装配置git服务器: (1)安装ssh:sudo apt-get install openssh-serve ...

  10. 第三十九章 微服务CICD(1)- gitlab搭建与使用(docker版)

    一.下载docker镜像 前提:docker引擎已经安装好. docker pull gitlab/gitlab-ce gitlab是8.13.1版本. 二.启动应用 docker run -d -h ...