我可以在抽象类和具体类之间进行聚合吗?
示例:
Concrete class: Enterprise
- int cod;
- String name;
- List<Office> listoffice;
//methods
Abstract class: Office
- int cod;
- String name;
- List<Enterprise> listenterprise;
//Methods
记住,Office 类稍后将有一个具体的类来实例化对象并继承。
这里,我假设
Enterprise
是聚合关系的所有者,Office
是关系的目标。在 UML 中,没有什么可以阻止您在抽象类和具体类之间进行聚合。
如果从概念上讲,
Office
的所有具体子类也是 Enterprise
类聚合的目标,那么您应该进行该聚合。
您应该这样做,因为它分解了这些关系,并且带来了您不需要为每个具体 Office
子类重复的信息。但是,如果从概念上讲,它至少存在一个
Office
的具体子类,它可能不是 Enterprise
的聚合目标,请勿将聚合与抽象类一起使用,否则您的模型将不准确.
第 9.2 分类器节指出
分类器的 isAbstract 属性为 true 时,指定分类器是抽象的,即没有直接实例:抽象分类器的每个实例都应是其专业化之一的实例。
所以基本上,如果你有一个聚合抽象类的具体类,你可以实例化该类本身,但不能实例化它的聚合类。这似乎毫无意义。
反之亦然,如果抽象类聚合了具体类,那么您仍然拥有抽象类。这样就好了。