我可以在抽象类和混凝土类之间进行聚合吗?
示例:
Concrete class: Enterprise
- int cod;
- String name;
- List<Office> listoffice;
//methods
Abstract class: Office
- int cod;
- String name;
- List<Enterprise> listenterprise;
//Methods
记住,Office类将具有一个具体类到实例对象,稍后继承。
答案 0 :(得分:2)
在这里,我认为Enterprise
是聚合关系的所有者,Office
是关系的目标。
在UML中,没有什么能阻止你在抽象类和具体类之间进行聚合。
如果在概念上你应该进行聚合,Office
的所有具体子类也是Enterprise
类聚合的目标。
你应该这样做,因为它会对这些关系产生影响,它会为每个具体的Office
子类带来你不需要重复的信息。
但是,从概念上讲,它至少存在Office
的一个具体子类,它可能不是Enterprise
聚合的目标,不要将聚合作为抽象类的目标使用,因为否则你的模型会不准确。
答案 1 :(得分:1)
UML 2.5规范的 9.2分类器部分
Classifier的isAbstract属性,当为true时,指定Classifier是抽象的,即没有直接实例:抽象分类器的每个实例都应该是其特化之一的实例。
所以基本上,如果你有一个聚合抽象类的具体类,你可以实例化类本身,但不能实例化它的聚合类。这似乎毫无意义。
反之亦然,如果抽象类聚合具体类,你仍然有一个抽象类。那没关系。