抽象的多重性和聚合 class

Multiplicity and aggregation in abstract class

我可以在抽象 class 和具体 class 之间进行聚合吗?

示例:

Concrete class: Enterprise
- int cod;
- String name;
- List<Office> listoffice;
//methods

Abstract class: Office
- int cod;
- String name;
- List<Enterprise> listenterprise;
//Methods

记住,Office class 稍后将有一个具体的 class 实例对象与继承。

在这里,我假设Enterprise是聚合关系的所有者,Office是关系的目标。

在 UML 中,没有什么能阻止您在抽象 class 和具体 class 之间进行聚合。
如果从概念上讲,Office 的所有具体子 class 也是 Enterprise class 的聚合目标,则您应该进行该聚合。 你应该这样做,因为它分解了这些关系,它带来了你不需要为每个具体 Office subclass.

重复的信息

但是,如果从概念上讲,它至少存在 Office 的一个具体子 class,它可能不是 Enterprise 聚合的目标,请不要使用聚合以抽象为目标 class,否则你的模型将不准确。

UML 2.5 规范的第 9.2 分类器 部分指出

The isAbstract property of Classifier, when true, specifies that the Classifier is abstract, i.e., has no direct instances: every instance of the abstract Classifier shall be an instance of one of its specializations.

所以基本上,如果你有一个具体的 class 聚合抽象 classes,你可以实例化 class 本身,但是 none 它的聚合 class是的。这似乎毫无意义。

反之亦然,如果抽象 class 聚合了具体 classes 你仍然有一个抽象 class。那样就好了。