UML动态类关联

UML动态类关联,uml,Uml,我有一个名为pet的类,它动态地与1dog或cat关联,但不能同时与两者关联 这种类型的动态关联的名称是什么?我如何在UML类图中表示这一点,同时明确每个pet与一个dog或cat关联,但不能同时与两者关联?就是您想要的简单继承吗?在我看来,宠物是一个抽象的概念,而狗和猫则是具体的概念。在您的情况下,我最初的解决方案可能是有一个抽象的Pet类(不能实例化),它专门用于Dog和Cat(可以) 如果你真的很想拥有一个宠物的实例,它与猫或狗的实例相关联,那么你可能无论如何都必须通过继承来管理它。可能是

我有一个名为
pet
的类,它动态地与1
dog
cat
关联,但不能同时与两者关联


这种类型的动态关联的名称是什么?我如何在UML类图中表示这一点,同时明确每个
pet
与一个
dog
cat
关联,但不能同时与两者关联?

就是您想要的简单继承吗?在我看来,宠物是一个抽象的概念,而狗和猫则是具体的概念。在您的情况下,我最初的解决方案可能是有一个抽象的Pet类(不能实例化),它专门用于Dog和Cat(可以)


如果你真的很想拥有一个宠物的实例,它与猫或狗的实例相关联,那么你可能无论如何都必须通过继承来管理它。可能是这样的:

把你的问题作为现实世界的模型(领域模型)来阅读时,它的措辞有点滑稽

在现实世界中,宠物与动物没有关联。相反,宠物是一种动物。因此,类
pets
是域模型中
animals
的(角色)子类,基于术语“pet”在英语中的含义

主流OOP语言不太支持角色类的概念。一个对象可以同时扮演多个角色(即实例化多个角色类)(多个分类),也可以停止扮演一个角色,即停止实例化相应的角色类(动态分类)

在创建(独立于技术的)设计模型之前,您可能对首先创建域模型不感兴趣,然后可以将其转换为Java或C类模型

<>也许你想直接跳转到C++类模型,而不首先去理解底层的域概念。
你可以这样做,但我认为这不是个好主意。

谢谢。如果我想把宠物和另一个完全不同的物体比如“沙发”联系起来呢。但它应该只与一只动物或一张沙发相关,而不是两者。嗯,我想这可能是一项任务,要弄清楚在这种关系中你需要的最高抽象层次是什么。在最抽象的情况下,我想你可以把宠物和一个“对象”联系起来,这个“对象”是最高层次的抽象,可以衍生出任何东西。我不确定沙发和动物有什么共同点,除了它们都是物体和动物与沙发有着密切的关系外:-)。答案很好。只有重数0..*是奇怪的。这意味着一只动物可能同时与多只宠物联系在一起。我认为多重性应该是0..1。如果宠物的多重性是0..1或1,那么从逻辑上讲,动物和宠物是相同的(即1:1的关系),因此将宠物和动物分开是没有意义的。这就是我的理由。