我想为机场和城市建模,并希望选择两者之间适当的分解关系,但我似乎无法决定选择哪一个,因为它们都有不同的关系。
一个城市可以独立存在而且不需要机场因此我会说City-Airport链接是聚合但是...
机场需要一个城市,如果没有一个城市成为一个组合关系,它将不存在。
有可能有两种关系吗?一个是城市 - >机场和另一个机场 - >城市它确实感到奇怪,因为对我而言,作品感觉就像一种应该被两个人而不仅仅是一个人尊重的关系。
答案 0 :(得分:3)
普遍的误解是,课程之间的关系主要是"聚合"或"成分"。我认为这个不幸的传统已经在C ++社区中得到了体现。
相反,类之间最重要的关系是"关联",因为它们在UML类模型/图表中被调用。因此,如果您想对City
和Airport
之间的关系建模,您可能希望选择一对多关联(因为一个城市可能有多个机场,但任何机场都已分配到一个城市)。
在UML中,聚合和组合都是关联的特殊情况,用于表示两个类的实例之间的部分 - 完整关系。由于机场不是真正的城市的一部分,而只是与之相关,因此City
和Airport
之间既没有构成也没有聚合,而只是一个普通的协会。
在许多情况下,我们可能想知道一个关联是否是一个组合,将它建模为一个简单的关联更安全。
将关联建模为合成的唯一理由是组件类型的实例是"弱实体"没有自己的身份(对象ID)。但是机场确实拥有自己的ID,所以没有必要也没有任何收获来将它们建模为城市的组成部分。