UML中依赖(Dependency)和关联(Association)之间的区别
一般情况下,使用关联(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)之间的区别的更多相关文章
- Spring中Model、ModelMap及ModelAndView之间的区别
Spring中Model.ModelMap及ModelAndView之间的区别 1. Model(org.springframework.ui.Model)Model是一个接口,包含addAttr ...
- C#中string.Empty、""和null 之间的区别
1.C#中string.Empty.""和null 之间的区别 (http://blog.csdn.net/henulwj/article/details/7830615)
- Android中dip, dp, px,pt, sp之间的区别:
Android中dip.dp.sp.pt和px的区别 1.概述 过去,程序员通常以像素为单位设计计算机用户界面.例如:图片大小为80×32像素.这样处理的问题在于,如果在一个每英寸点数(dpi)更 ...
- mysql 中execute、executeQuery和executeUpdate之间的区别
在用纯JSP做一个页面报警功能的时候习惯性的用executeQuery来执行SQL语句,结果执行update时就遇到问题,语句能执行,但返回结果出现问题,另外还忽略了executeUpdate的返回值 ...
- C++中指针和引用、数组之间的区别
指针指向一块内存,它的内容是所指内存的地址:而引用则是某块内存的别名,引用初始化后不能改变指向.使用时,引用更加安全,指针更加灵活. 初始化.引用必须初始化,且初始化之后不能呢改变:指针可以不必初始化 ...
- iOS中assign,copy,retain之间的区别以及weak和strong的区别
@property (nonatomic, assign) NSString *title; 什么是assign,copy,retain之间的区别? assign: 简单赋值,不更改索引计数(Refe ...
- 详解UML中的聚合,关联,泛化等关系
1. Overview UML设计类中,类的关系分为Generalization(泛化),Dependency(依赖关系).Association(关联关系).Aggregation(聚合关系).Co ...
- java中静态代理跟动态代理之间的区别
文章转载于:http://www.cnblogs.com/xiaoluo501395377/p/3383130.html 在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另 ...
- Java中Scanner类和BufferReader类之间的区别
java.util.Scanner类是一个简单的文本扫描类,它可以解析基本数据类型和字符串.它本质上是使用正则表达式去读取不同的数据类型. Java.io.BufferedReader类为了能够高效的 ...
随机推荐
- shell_基础知识
参考: http://blog.csdn.net/kaizi318/article/details/9343551 开头程序必须以下面的行开始(必须方在文件的第一行):#!/bin/sh符号#!用来告 ...
- 使用imap协议接收邮件
之前一直使用PHPMail类进行发送邮件,这个是一个非常强大的类,但是其实底层就是使用mail()函数来进行发送的. 但是现在公司有个需求是 写个程序需要实时的接收邮件,主要是判断邮件发出去了,并且 ...
- css3颜色
镂空字的2种做法
- Mysql 存储过程基本语法
delimiter //一般情况下MYSQL以:结尾表示确认输入并执行语句,但在存储过程中:不是表示结束,因此可以用该命令将:号改为//表示确认输入并执行. 一.创建存储过程 1.基本语法: crea ...
- 设置表格td宽度
CSS布局,表格宽度不听使唤的实例.想把表格第一例宽度设为20,其他自适应.但CSS中宽度是等宽的.只设这一行也不起作用.但是在实际应用中总是等宽处理,并不按照样式来走. XML/HTML代码 & ...
- Linux 文件锁
当多个进程同时访问操作同一个文件时,我们怎么保证文件数据的正确性. linux通常采用的方法是文件上锁,来避免共享资源的产生竞争状态. 文件锁包括建议性锁和强制性的锁: 建议性的锁 :顾名思义,相对温 ...
- 第三方控件radupload 使用方式以及报错处理
使用方式: 1.web.config 中需要加入: <httpHandlers> <add verb="*" path="Telerik.Rad ...
- 获取 input 单选框和多选框的值
引用 jQuery的js <script> $(function(){ var arr = new Array(); $('#checkbox').click(function(){ a ...
- springMVC + Spring + MyBatis 整合
整理下SSM(基于注解)的整合 1. web.xml 配置文件 <?xml version="1.0" encoding="UTF-8"?> < ...
- C++队列中应该注意的一些问题
第一次在C++中写类,新手,见笑 #include<iostream.h>#include<iostream>template<typename T> class ...