Class Diagram概念辨析

1. 两种关联关系的特例:

 

    1)  聚合 Aggregation ——

Aggregation: b can live without its context (object of A).
============================================
==C++==
class B{
    B* b;
}
==java==
class B{
    B b;
    public A(B b){
       this.b = b;
    }
}

    聚合是整体与部分、拥有的关系,即 has-a 的关系,此时整体和部分之间可以分离,他们可以具有各自的生命周期 ,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与 CPU 、公司和员工的关系等;表现在代码层面上,和关联关系一致,只能从语义级别区分。



    

 

    2)  组合 Composition ——

Composition: b's lifetime is up to its context (object of A).
==C++==
class A{
    B b;
}
==java==
class A{
    B b;
    public A(){
       b = new B();
    }
}

    组合也是关联关系的一种特例,他体现一种 contains-a 关系,这种关系比聚合关系更强,也称为强聚合;它同样体现为整体和部分见的关系,但此时整体和部分是不可分割的, 整体的生命周期结束时部分的生命周期也结束 。比如,你和你的大脑。在代码层面上,和关联关系一样,只能从语义级别区分。



    

 

2. 几个例子:

 

演出售票系统

      在用例驱动的开发过程中,通过分析各个用例及参与者得到类图。分析用例图的过程中需要根据面向对象的原则设计类和关系,根据用例的细节设计类的属性和操作



 

 

Composite模式



 

 

 

    * 从演出售票系统理解 multiplication 的使用—— SubscriptionSeries Ticket 之间的多重性是“ 0...1 ”和“ 3...6 ”:

    A. 特定的 1 SubscriptionSeries 实例,在数据表中找得到它对应的 3...6 Ticket 实例;

    B. 特定的 3...6 Ticket 实例,在数据表中找得到他们对应的 1 SubscriptionSeries ;或者 0 SubscriptionSeries ,因为可能这些 Ticket 来自 IndividualReservation

猜你喜欢

转载自chuanwang66.iteye.com/blog/1335499