现在的位置: 首页 > 综合 > 正文

UML类图五种关系与代码的对应关系

2013年01月30日 ⁄ 综合 ⁄ 共 2140字 ⁄ 字号 评论关闭

UML类图中的五种关系的耦合强弱比较:依赖<关联<聚合<组合<继承

一、依赖关系:

(一)说明

虚线+箭头

可描述为:Uses a

依赖是类的五种关系中耦合最小的一种关系。

因为在生成代码的时候,这两个关系类都不会增加属性

(二)依赖关系图与代码的对应关系

PS:依赖关系:Animal依赖于Water(动物依赖于水))

  1. Public class Animal()  
  2. {  
  3.         Public Animal(){}  
  4. }  
  5.   
  6. Public class Water()  
  7. {  
  8.         public Water(){}  
  9. }  

     可以看到生成的两个类的代码中什么都没有添加

(三)思考:

Animal类如何使用Water类呢?或者说依赖关系到底是如何体现的呢?

1、表现形式1

Water类是全局的,则Animal类可以调用它

2、表现形式2

Water类是 Animal类的某个方法中的变量,则Animal类可以调用它。

  1. Public class Animal {  
  2.       Public void Grownup() {  
  3.                Water water =null;  
  4.       }  
  5. }  

注意1 Water类的生命期,它是Animal类的GrounUp方法被调用的时候,才被实例化

注意2持有Water类的是Animal的一个方法而不是Animal,这点是最重要的!

3、表现形式3

Water类是作为Animal类中某个方法的参数或者返回值 

  1. Public Animal {  
  2.    Public Water Grownup(Waterwater) {  
  3.               return null;  
  4.       }  
  5. }  


注意: Water类被Animal类的一个方法持有。生命期随着方法的执行结束而结束

 

二、关联关系

(一)说明

实线+箭头

可描述为:Has a

关联关系用实线,表示类之间的耦合度比依赖强

在生成代码的时候,关联关系的类会增加属性。

(二)关联关系与代码的对应关系

      

           PS:Water类与Climate类关联(水与气候关联)。 

  1. Public classWater {  
  2.      public Climate m_Climate;  
  3.      public Water(){}  
  4. }  
  5.    
  6. Public class Climate {  
  7.      public Climate() {}  
  8. }  

可见生成的代码中,Water类的属性中增加了Climate类。

(三)关联关系的种类

关联既有单向关联又有双向关联。

1、单向关联: Water类和Climate类单向关联(如下图),则Water类称为源类,Climate类称为目标类。源类了解目标类的所有的属性和方法,但目标类并不了解源类的信息。

        

2、双向关联:源类和目标类相互了解彼此的信息。如将Water类和Climate类之间改为双向关联。

  1. Public class Water {  
  2.     public Climate m_Climate;  
  3.     public Water(){}  
  4. }  
  5. Public class Climate {  
  6.     public Water m_Water;  
  7.     public Climate() {}  
  8. }  


可见生成的代码中,两个类的属性都添加了!

(四)思考:

依赖关系和关联关系的区别在哪里?

1、从类的属性是否增加的角度看

  1)发生依赖关系的两个类都不会增加属性。其中的一个类作为另一个类的方法的参数或者返回值,或者是某个方法的变量而已。

  2)发生关联关系的两个类,其中的一个类成为另一个类的属性,而属性是一种更为紧密的耦合,更为长久的持有关系。

2、从关系的生命期角度看:

  1)依赖关系是仅当类的方法被调用时而产生,伴随着方法的结束而结束了。

  2)关联关系是当类实例化的时候即产生,当类销毁的时候,关系结束。相比依赖讲,关联关系的生存期更长。

(五)关联关系的细化:聚合、组合

1、说明

1)聚合关系,用空心菱形加箭头表示

2)组合关系,用实心菱形加箭头表示,类之间的耦合关系比聚合强!

2聚合和组合都是关联关系的一种,到底如何区分二者呢?

1)聚合和组合生成的代码

         (PS:此图表明雁群类是由大雁类聚合而成)

  1. Public classGooseGroup {  
  2.     public Goose goose;  
  3.     Public GooseGroup(Goose goose) {  
  4.               this.goose = goose;  
  5.        }  
  6. }  

    

        (PS:此图表明大雁类是由翅膀类组合而成)

抱歉!评论已关闭.