抽象类中的多重性和聚合

时间:2016-11-18 19:32:32

标签: java uml class-diagram

我可以在抽象类和混凝土类之间进行聚合吗?

示例:

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

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

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

2 个答案:

答案 0 :(得分:2)

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

在UML中,没有什么能阻止你在抽象类和具体类之间进行聚合。
如果在概念上你应该进行聚合,Office的所有具体子类也是Enterprise类聚合的目标。 你应该这样做,因为它会对这些关系产生影响,它会为每个具体的Office子类带来你不需要重复的信息。

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

答案 1 :(得分:1)

UML 2.5规范的 9.2分类器部分

  

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

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

反之亦然,如果抽象类聚合具体类,你仍然有一个抽象类。那没关系。