UML类对象基本关系解析

我们平常要使用UML工具画类之间的关系,因此经常会见到依赖、关联、泛化、继承、实现、聚合、组合等概念,那么他们是怎么样的,区别在哪里呢?我在这里整理一下:

  •   依赖

       依赖是指类A要完成一定的功能,必须要类B的帮助,例如使用到类B的方法,而类A和类B之间并没有比较亲密的联系,只是要利用B而已,他们之间的关系是偶然的,临时性的,比较脆弱,体现在代码形式上:类B只需作为类A的方法参数,或者类A直接使用类B的静态方法,而类B不会形成类A的属性

    

   在UML类图关系表示上:

  

      虚线+箭头指向被依赖方,依赖关系好的实践是单向依赖,坏的实践的相互依赖,,千万不要出现双向依赖。

 

  •   关联

     关联是指类A和类B之间存在比较强的关系,与依赖相比,这种关系不是偶然性的,例如人和人的常用住址,就是一种比较强的关系,不是临时的,是长期的,体现在代码层面:类B作为类A的一个属性存在,体现出他们的关系比较紧密。

 

 在UML类图关系上:

 

实线+箭头指向被关联方,关联关系可以是双向,即A和B相互为对方的一个属性。

至于到底是用依赖还是关联关系,主要是看类之间关系的强弱,这个需要在一定的语境中来确定。

  • 泛化(继承)

泛化关系其实就是继承关系,包括接口继承和类继承,这个比较好理解。

  

  在UML关系图上表现:

   

  实线+空心三角箭头指向被继承的基类或接口

  •  实现

      实现关系也很好理解,类实现了一个接口。

UML关系图如下:

 

虚线+空心三角箭头指向被实现接口

 

  • 聚合

 聚合是关联的一种特例,语义上表示整体和个体 概念,表示has-a关系,整体和个体是可以分离的,整体和个体生命周期是独立的,例如,公司和员工,社团和成员,成员可以属于多个不同的整体,在代码层面上,聚合与关联是一样的,因此只能从语义上来区分。

 在UML类图关系如下:

 

  •    组合

组合也是关联的一种特例,语义上表示主体和部分 概念,表示contains-a关系,整体和部分是不可以分离的,他们的生命周期是关联在一起的,主体灭亡,部分也随着灭亡,代码层面上,组合关系与聚合和关联都是一样的,因此也只能从语义上进行区分。

 

 

可见,其实这几个区别还是比较明显的,他们之间的关系基本都体现在语义关系上,代码上的实现可能基本类似,不过有一点,有了语义上的区分,那么在代码层面上尽量体现出语义来,也是一个比较好的做法,例如,代码中最好不要带着hand对象单独到处跑,应该跟着person才是最好的选择。

 

posted @ 2010-04-17 10:52  lovingprince  阅读(274)  评论(0编辑  收藏  举报