UML中关联(Association)和依赖(Dependency)的区别
原文转自:http://blog.csdn.net/metasearch/article/details/2334853
在UMLCHINA精华区,看到了一些关联和依赖的讨论,似乎越讲越糊涂.我想谈一点自己的看法:
1、在《UML参考手册》第37页中,指出“关联和泛化都是依赖关系,但是它们有更特别的语义,故它们有自己的名字和详细的语义。我们通常用依赖这个词来指其他的关系。”
2、在《UML参考手册》30页中,定义了关联为“关联描述了系统中对象或实例之间的离散连接。最普通的关联是一对类元之间的二元关联。关联的实例之一是链。”
3、接着,又说明了“关联关系是整个系统中使用的“胶粘剂”,如果没有它,那么只剩下不能一起工作的孤立的类。”
依赖关系,简单地来说就是“动态”的关系,提供者可能要求或指示依赖关系中客户的变化,依赖者为了达成要求被依赖对象行动的目的,依赖首先要取得对方的引用,以便于实施这个依赖操作,对方对象的引用可以通过二种方法获得,一种是依赖对象之间也存在关联关系,所以它可以直接通过自己的关联找到对方对象的引用,第二种是依赖对象之间不存在直接关联关系,程序设计者有责任设计通过第三方对象的关联,经过一次或多次的关联导航获得目标对象的引用。最后,依赖对象通过这二种的任一种方法获得目标对象引用后,就可以向目标对象施加相应的依赖关系行为。
根据上述的分析,可以简单地作一个推论,仅对于这两个关系来说,对象之间存在四种关系:
1、无关联,无依赖
它们是无关的对象类。
2、有关联,无依赖
一般用来为其它对象类导航到关联端对象的桥梁。关联对象之间除了相互存储引用外,没有进一步的行为。也许,关联引用在程序中没有导航经过,这样的话,可以取消关联关系,就变成了(1)的情况。
3、无关联,有依赖
这是我们常常希望实现的松耦合关系的情景,对象之间没有直接的关联关系存在,所以它们没有直接存储对方的引用,使程序的可以更灵活地变动。但是为了获得对
象的引用以便实施依赖行为,比如调用,发消息,访问等依赖操作,可以通过间接关联来定位对方。一般情况下,设计者会为依赖关系提供一个存取方法,获取对象
引用。如果间接关联无法到达彼此对方,那么这个依赖是不可实现的,这种“伪依赖”要么是程序设计的逻辑错误(关系至少出现一个对象),要么是正常的
NULL对象(关系允许0个对象出现)。
4、有关联,有依赖
当然,这是最简单,也是最直接的实现了,它的意思也表达的最清楚。依赖的实施直接通过本身的关联引用进行。这时,对象间的耦合关系确实比较强了,看需要是否解耦或不变。
============================================================================
对类而言依赖存在的理由有:B作为一个参数被传递给A众所定义的一个方法(参数可见性);B在A的一个方法众被声明未局部对象(局部声明可见性);B对A全局可见(全局可见性)
而关联一般应来描述普通的属性可见性(B是A的一个属性, 是一种相对长久的可见性, 是普遍存在的,)
==============================================================================
依赖一般的表现方法是方法的局部变量,或者是方法内对静态方法的引用!
关联一般的表现方法是对象的全局变量!
依赖:
void methodA()
{
B b = new B();
b.methodB();
}
}
关联:
B b = new B();
void methodA()
{
b.methodB();
}
}
UML中关联(Association)和依赖(Dependency)的区别的更多相关文章
- UML的关联(Association), 聚合(Aggregation), 组合(Composition)区别
转载:http://blog.csdn.net/ocean181/article/details/6117369 UML的关联(Association), 聚合(Aggregation), 组合(Co ...
- UML中关联(Association)、聚合(Aggregation)和合成(Composition)之间的区别
本文为 Dennis Gao 原创技术文章,发表于博客园博客,未经作者本人允许禁止任何形式的转载. 现在,我们需要设计一个项目管理系统,目前我们收集到了如下这些需求: REQ1:一个项目内有多名项目成 ...
- UML中的依赖关系
UML中的五种关系和设计模式中的代码实现. 又重新听了一遍UML中的关系.感觉又是收获很大. UML中的关系有依赖,关联(聚合,组合),泛化(也叫继承),实现 现在一个一个的来实现: 一:依赖 依赖关 ...
- UML中关系的分类及其概念——总结备忘
UML中关系分类: 依赖:依赖是两个事物间的语义关系,其中一个事物(独立事物)发生变化会影响另一个事物(依赖事物)的语义. 关联:关联是类与类之间的联接,它使一个类知道另一类的属性和方法. 聚合:聚合 ...
- uml的关联多重度
UML中关联的多重度是指一个类的实例能够与另一个类的多少个实例相关联,这个“多少”被称为关联角色的多重度指定关联一端的多重度.也可以这样理解:在关联另一端的类的每个对象要求在本端的类必须有多 少个对象 ...
- UML中依赖(Dependency)和关联(Association)之间的区别
一般情况下,使用关联(association)来表示像类中的字段等.这个关系是始终存在的,因此你可以随时针对关联项进行访问调用,例如可以始终从 Customer 对象获取 Order 对象.但事实上它 ...
- 详解UML中的6大关系(关联、依赖、聚合、组合、泛化、实现)
UML中的6大关系相关英文及音标: 依赖关系 dependency --------> 关联关系 association ______> 聚合关系 aggregation ______ ...
- 分分钟弄明白UML中泛化 , 实现 , 关联, 聚合, 组合, 依赖
在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization), 关联(Association), 聚合(Aggregation), 组合(Compo ...
- UML中的关联,泛化,依赖,聚集,组合(转)
转自:http://blog.sina.com.cn/s/blog_5f8b45f20100dzjo.html 关联(association): 这是一种很常见的关系,这种关系在我们的生活中到处可见, ...
随机推荐
- crontab的相关设置&linux定时备份数据库
对于才了解crontab的人来说,应该按照以下的步骤来设置crontab 1.首先要检查是否装了crontab http://blog.sina.com.cn/s/blog_4881040d01011 ...
- MyBatis和Hibernate相比,优势在哪里?
1.开发对比开发速度 hibernate的真正掌握要比Mybatis来得难些.Mybatis框架相对简单很容易上手,但也相对简陋些.个人觉得要用好Mybatis还是首先要先理解好Hibernate. ...
- Python爬虫学习之获取网页源码
偶然的机会,在知乎上看到一个有关爬虫的话题<利用爬虫技术能做到哪些很酷很有趣很有用的事情?>,因为强烈的好奇心和觉得会写爬虫是一件高大上的事情,所以就对爬虫产生了兴趣. 关于网络爬虫的定义 ...
- 11154 LRC才不会告诉你们的事情
#include<stdio.h> #include<string.h> int main() { ,t=; ],sum[],k=,d=; ]; ]; scanf(" ...
- MySQL 主从复制与读写分离概念及架构分析 (转)
1.MySQL主从复制入门 首先,我们看一个图: 影响MySQL-A数据库的操作,在数据库执行后,都会写入本地的日志系统A中. 假设,实时的将变化了的日志系统中的数据库事件操作,在MYSQL-A的33 ...
- java虚拟机学习-JVM调优总结(6)
1.Java对象的大小 基本数据的类型的大小是固定的,这里就不多说了.对于非基本类型的Java对象,其大小就值得商榷. 在Java中,一个空Object对象的大小是8byte,这个大小只是保存堆中一个 ...
- CMT2300 收发一体 SUB 1G 支持灵活选频
CMT2300A 是一款超低功耗,高性能,适用于各种140 至1020 MHz 无线应用的OOK,(G)FSK 射频收发器.它是CMOSTEK NextGenRFTM 射频产品线的一部分,这条产品线包 ...
- pycharm5工具免费分享及安装教程
好东西,就要分享,最近在捣鼓Python,所以就找个pycharm5工具,感觉挺好用的. 废话不多说了,所见即所得: 百度云盘分享:http://pan.baidu.com/s/1sk9k4Nj 密码 ...
- 动手写个数字输入框1:input[type=number]的遗憾
前言 最近在用Polymer封装纯数字的输入框,开发过程中发现不少坑,也有很多值得研究的地方.本系列打算分4篇来叙述这段可歌可泣的踩坑经历: <动手写个数字输入框1:input[type=nu ...
- python 之走坑的道路
### python之 继续走函数的坑 上篇文章简单介绍了函数的一些简单的使用,这次继续踩函数的坑1.函数对象 函数其实也可以当做一个参数传给另一个函数,也可以使用赋值的方式来给另一个,而且这两个的内 ...