Java 如何在UML类图中表示两个类之间的可互换关系

Java 如何在UML类图中表示两个类之间的可互换关系,java,uml,diagram,Java,Uml,Diagram,假设F16武器和F18大黄蜂武器是两种武器类别,每种类别有三种武器,如连环、炸弹、导弹 我很难在F16武器和F18大黄蜂武器之间画出一个可互换的关系。我的意思是F16级可以使用F18武器组,或者F18级可以使用F16武器组。基本上,如果F16级尝试使用F18加农炮武器,F16将很容易从F18武器集中使用它。同样的事情也适用于F18类。因此,F16级和F18级之间存在可互换关系。如何在UML类图中表示这两个类之间的可互换关系?任何人都可以帮我 提前谢谢 xmojmr认为应该使用泛化是正确的。他的答

假设F16武器和F18大黄蜂武器是两种武器类别,每种类别有三种武器,如连环、炸弹、导弹

我很难在F16武器和F18大黄蜂武器之间画出一个可互换的关系。我的意思是F16级可以使用F18武器组,或者F18级可以使用F16武器组。基本上,如果F16级尝试使用F18加农炮武器,F16将很容易从F18武器集中使用它。同样的事情也适用于F18类。因此,F16级和F18级之间存在可互换关系。如何在UML类图中表示这两个类之间的可互换关系?任何人都可以帮我


提前谢谢

xmojmr认为应该使用泛化是正确的。他的答案背后的要点是,泛化是一种从一组类中提取相似行为并将其生成一个类的方法,它们都使用该类。这和你在这里描述的差不多

现在,如果加农炮在使用F16和F18时使用相同的软件,那么您可能希望将该软件保留在一个位置,让他们两个都使用它。相反,如果你想让他们使用不同的软件,然后使用第三个软件来部署加农炮,而不需要知道它使用的是F16还是F18,那么你会使用接口。一个接口说,如果你想成为一个CannonDeployer(或其他什么),那么你必须提供一个Deploy方法(或其他什么),但是你可以用任何方式编写它


因此,正如他所说,接口更加灵活,但您必须决定是否需要为每个平面提供不同的软件实现。如果没有,则将实现放在基类中(在xmojmr的示例中为FXCompatibleWapon),并将其保留在该基类中。

一种方法是通过类泛化,如
类F16Wearm扩展FXCompatibleWapon..
类F18HornetWeapon扩展FXCompatibleWapon..
。虽然从解耦的角度来看,它通常更灵活地使用