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的一个属性, 是一种相对长久的可见性, 是普遍存在的,)
==============================================================================
依赖一般的表现方法是方法的局部变量,或者是方法内对静态方法的引用!
关联一般的表现方法是对象的全局变量!
依赖:
  class   A  {   
        void   methodA()   
        {   
                B   b   =   new   B();   
                b.methodB();     
        }   
  } 

关联:

 class A {   
        B   b   =   new   B();   
        void   methodA()   
        {   
              b.methodB();   
        }   
  } 


Kyle Wang

posted on 2012-10-30 23:08 王树东 阅读(3524) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

公告

常用链接

留言簿

随笔分类(17)

随笔档案(15)

文章分类(4)

文章档案(5)

收藏夹(4)

Algorithm

Design

Environment Setup

Installer

Maven

MINA

OS

Skills for Java

VIM

搜索

最新评论

阅读排行榜

评论排行榜