抽象类中的多重性和聚合

问题描述 投票:0回答:2

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

示例:

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

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

记住,Office 类稍后将有一个具体的类来实例化对象并继承。

java uml aggregation class-diagram multiplicity
2个回答
2
投票

这里,我假设

Enterprise
是聚合关系的所有者,
Office
是关系的目标。

在 UML 中,没有什么可以阻止您在抽象类和具体类之间进行聚合。
如果从概念上讲,

Office
的所有具体子类也是
Enterprise
类聚合的目标,那么您应该进行该聚合。 您应该这样做,因为它分解了这些关系,并且带来了您不需要为每个具体
Office
子类重复的信息。

但是,如果从概念上讲,它至少存在一个

Office
的具体子类,它可能不是
Enterprise
的聚合目标,请勿将聚合与抽象类一起使用,否则您的模型将不准确.


2
投票
UML 2.5 规范的

9.2 分类器节指出

分类器的 isAbstract 属性为 true 时,指定分类器是抽象的,即没有直接实例:抽象分类器的每个实例都应是其专业化之一的实例。

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

反之亦然,如果抽象类聚合了具体类,那么您仍然拥有抽象类。这样就好了。

© www.soinside.com 2019 - 2024. All rights reserved.