Inheritance 此模型的正确继承/聚合是什么

Inheritance 此模型的正确继承/聚合是什么,inheritance,associations,uml,aggregation,Inheritance,Associations,Uml,Aggregation,我正在为一组火车车厢制作一个UML,具体来说: 机车机动车辆,包含所有连接车辆的阵列 棚车运载箱子/动物/货物 冷藏车运送食物 我创建了一个名为RailCar的抽象类,机车、BoxCar和冷藏车都扩展了这个类。这就是问题所在,机车通过继承与轨道车辆相关,并且与众多轨道车辆具有聚集关系 这是一个糟糕的设计吗?如果是的话,由于火车头与同一个类之间存在继承和聚合关系,您如何正确地在UML中表示火车头?我认为将火车的概念建模为与您的轨道车类具有一对多组合关系的类火车更为现实,说明火车是由轨道车组成的。然

我正在为一组火车车厢制作一个UML,具体来说:

机车机动车辆,包含所有连接车辆的阵列 棚车运载箱子/动物/货物 冷藏车运送食物

我创建了一个名为RailCar的抽象类,机车、BoxCar和冷藏车都扩展了这个类。这就是问题所在,机车通过继承与轨道车辆相关,并且与众多轨道车辆具有聚集关系


这是一个糟糕的设计吗?如果是的话,由于火车头与同一个类之间存在继承和聚合关系,您如何正确地在UML中表示火车头?

我认为将火车的概念建模为与您的轨道车类具有一对多组合关系的类火车更为现实,说明火车是由轨道车组成的。然而,你的火车头并不像其他火车头那样只是一辆普通的火车头,因为你可能想要模拟事实,就像一列火车头由一辆火车头和任意数量的棚车或冷藏车组成一样。在这种情况下,你最好把火车头和火车头分开,不要把它们归入火车头,这样你就可以表达火车头和火车头之间一对一的组合关系。

我也喜欢火车头。但我仍然喜欢为所有单元创建基类的想法。我只是不想叫它轨道车;也许TrainUnit或其他更具描述性的东西。机车和汽车都有共同的特点,比如制动器和连接器,更不用说可以而且应该被推广到基本类的车轮了

如果所有的广义元素对所有的汽车都以相同的方式工作,那么这个基类也不一定是抽象的。即使它们不完全相同,您也可以在需要时对子类使用重写和重载,而无需进行抽象。作为一般规则,如果大多数子类将使用相同的实现,则对异常使用重写/重载。如果它们中的大多数都将以不同的方式工作,那么就没有必要麻烦地提供一个没有人会使用的实现


然后,列车是单元的集合,可能的约束条件是至少有一个单元必须是机车。例如,可能有一串汽车停在终点站,等待火车头。

请包括您当前的设计,这毕竟是UML的用途;让每个人都了解您是如何设计您的系统的:没有什么东西是“UML”。你做了一张类图吗?