聚合与合成

来源:互联网 发布:笔记软件推荐 知乎 编辑:程序博客网 时间:2024/05/30 13:42

聚合和合成都是一种特殊的关联关系,聚合和合成都是对模型元素间的整体与部分关系的建模。聚合关系符号表示法是,在关联关系路径上,用位于整体一端的空心菱形表示,合成关系符号表示法是,在关系路径上,用位于整体一端的实心菱形表示。

聚合关系可能会形成一种共享的聚合关系,例如,客户和供应商实体都会有地址,在建模的时候客户与地址是一种聚合关系,供应商与地址也是一种聚合关系,那么客户和供应商就是共享地址实体,一个共享关系会形成一个图,整体就是树枝,部分就是树根

合成关系是一种很强的聚合关系,整体与部分的生命周期相同,没有部分就没有整体,这意味着形成合成关系的图中,树根为整体,树枝为部分

将地址建模为独立的实体类还是建模为属性?可以通过以下几点来确认,

  • 地址是否被大量的对象所引用
  • 是否有大量的类都有地址
  • 地址是否有复杂的结构和其自身的特征

使用关联关系还是聚合或合成关系?

  • 当类之间的部分与整体关系很强时用聚合或合成关系
  • 在没有把握的情况下,关联关系将更为合适;而聚合关系一般比较明显,所以选择聚合关系仅仅是为了更加明确。这对建模工作的成败并不具有决定性的意义。

自聚合关系

有时,一个类可以与它自身聚合关系。这不意味着该类的实例是由它自身组成的,而是指该类的某个实例是一个由该类的其他实例组成的聚合关系体。在自聚合关系的情况下,角色名称对于区分关联关系目的非常重要。

一个产品可能由多种其他产品组成。在这种情况下,被聚合关系的产品就称为子产品。该关联关系只能从聚合关系体导向到子产品,即子产品并不知道他们属于哪些产品(因为子产品可能属于多种产品)。