UML类自身聚合

4
我的团队正在开发一个程序,其中我们有一棵树形结构。在这个树形结构中,我们使一个类别可以包含自身。该程序基于您的支出,例如:
您买了4瓶牛奶。这4瓶牛奶被放置在“牛奶”类别中。每个牛奶条目都有价格(以及其他个人信息),并由另一个聚合类别的类来管理。
技巧在于我们希望类别类能够包含自身,因此:
“牛奶”类别是“乳制品”类别的一部分,而“乳制品”则是“杂货”类别的一部分。
我们之所以希望它是这样的,是为了可以同时移动批量产品。因此,如果您想将牛奶移动到名为“早晨物品”的类别中,则不需要移动每一件物品,而只需移动整个类别即可。
如图是我们当前的类别类模型,但我们被告知不能不经过进一步的解释就这样做。UML允许吗?如果不行,我们该如何使用UML建模呢?
2个回答

6
是的,UML允许从类到自身的关联。同样,聚合甚至可以通过这种方式进行组合。
您发布的图像显示了聚合,而根据您的描述,我会选择组合(填充菱形):一个类别有一个或零个父级;类别在某种程度上由其子项定义;如果删除一个类别,则所有子项也将被删除。
有关聚合和组合之间的更长比较,请单击此处

相反地,如果它没有父级,则可以独立存在,并且在组合中只能作为其成员存在。正如UML 2.1.2标准所说,“复合对象对于组成对象(部分)的存在和存储负责”。因此,它是“共享”空菱形的聚合。 - Gangnus
标准2.4.1表达的是同样的意思。 - Gangnus

3
是的,它是允许的,但在大多数情况下,最好聚合一个抽象类或接口,以保留多态性,而不是直接使用该项;可参考组合模式。这被称为接口隔离原则,是五个SOLID原则之一。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接