简单理解UML中关联-聚合-组合

1、关联

  一个对象可以发送消息给另外一个对象,简单讲就是一个对象持有另外一个对象的指针或者引用,典型情况如下:

public class A{
  private B b;  
}

public class B{}

  或者这种情况:

public class A{
  public void f(B b){}  
}

public class B{}

2、聚合(aggregation

   聚合表示一种has-a关系,通常用于表示整体-部分关系,但是这个“部分”的生命周期并不依赖于“整体”,可以理解为一个弱化的has-a关系,也就是说,“整体”和“部分”是单独存在的,其UML图如下:

    

public class Person{
  private Address address;
  public Person(Address address){
    this.address = address;
  }
}

public class Address{}

  每一个Person都有一个Address,但是不能讲这个Address就是这个Person的,当Person搬家的时候(销毁Person对象),这个Address仍然存在.

  使用Person对象的代码:

Address address = new Address();
Person person = new Person(address);

  所以,从以上代码看,Person和Address的生命周期是相对独立的。

3、组合(Composition

  组合相对聚合来讲,是一种更加严格的has-a关系,当“整体”消亡后,“部分”也就消亡了,拿最常见的汽车和轮子或者房子和窗户的例子讲,组合的UML图如下:

  代码:

public class Car{
    private Wheel wheel = new Wheel();
}

public class Wheel{
}

  从代码可以看出,Wheel是在Car中建立的,所以当Car生命周期结束后,Wheel的声明周期也就结束了。

 

 

posted @ 2013-05-17 15:44  Simple Happiness  阅读(304)  评论(0编辑  收藏  举报