基数和泛化在UML中是如何工作的?

基数和泛化在UML中是如何工作的?,uml,class-diagram,Uml,Class Diagram,我试图理解基数和关系如何在简单的UML类图中与泛化一起工作。我这里有一个简单的例子: 一个玩家恰好拥有9个字段,但它们的分布是不相关的,即5个Endfields、4个Startfields或1个Endfield和8个Startfields。字段类是抽象的。如果我像上面所看到的那样对这个问题进行建模,那么一个玩家每种类型会有9个字段吗?如果是,我如何正确建模 如果我像上面所看到的那样对这个问题进行建模,那么一个玩家每种类型会有9个字段吗 不是同时。在您的模型中,一个播放器与9个字段相关联,假设没有

我试图理解基数和关系如何在简单的UML类图中与泛化一起工作。我这里有一个简单的例子:

一个玩家恰好拥有9个字段,但它们的分布是不相关的,即5个Endfields、4个Startfields或1个Endfield和8个Startfields。字段类是抽象的。如果我像上面所看到的那样对这个问题进行建模,那么一个玩家每种类型会有9个字段吗?如果是,我如何正确建模

如果我像上面所看到的那样对这个问题进行建模,那么一个玩家每种类型会有9个字段吗

不是同时。在您的模型中,一个播放器与9个字段相关联,假设没有其他类继承该字段,则知道每个字段都是Endfield或exclusive是Startfield

字段的给定实例不能同时是Endfield和Startfield,否则意味着字段同时继承Startfield和Endfield,但继承方向相反

模型中的Java对应类可以是:

abstract class Field { .... }
class Startfield extends Field { ... }
class Endfield extends Field { .. }
因此,一个玩家可以与9个尾端字段相关,或者与8个尾端字段和1个起始字段相关,或者与7个尾端字段和2个起始字段相关,…,或者与1个尾端字段和8个起始字段相关,或者与9个起始字段相关

如果您希望播放器具有9个起始字段和9个结束字段,则您的模型可以是:

[编辑]

但是,如果扩展模型,添加继承Startfield和Endtfield的其他类,如:

如果一个玩家以某种方式与9个双场关联,那么它也与9个起始场和9个结束场关联

关系的多重性9涉及字段,如您所见,对于依赖的继承类

如果我像上面所看到的那样对这个问题进行建模,那么一个玩家每种类型会有9个字段吗

不是同时。在您的模型中,一个播放器与9个字段相关联,假设没有其他类继承该字段,则知道每个字段都是Endfield或exclusive是Startfield

字段的给定实例不能同时是Endfield和Startfield,否则意味着字段同时继承Startfield和Endfield,但继承方向相反

模型中的Java对应类可以是:

abstract class Field { .... }
class Startfield extends Field { ... }
class Endfield extends Field { .. }
因此,一个玩家可以与9个尾端字段相关,或者与8个尾端字段和1个起始字段相关,或者与7个尾端字段和2个起始字段相关,…,或者与1个尾端字段和8个起始字段相关,或者与9个起始字段相关

如果您希望播放器具有9个起始字段和9个结束字段,则您的模型可以是:

[编辑]

但是,如果扩展模型,添加继承Startfield和Endtfield的其他类,如:

如果一个玩家以某种方式与9个双场关联,那么它也与9个起始场和9个结束场关联


关系的多重性9与字段有关,对于您可以看到的依赖于的继承类,

您的模型确实正确地表达了您的预期含义,除了您需要在您的Endfield Startfield分段中添加一个不相交约束(在UML术语中称为泛化集),以确保字段不能同时是end字段和start字段


从UML2.5开始,默认情况下分段是重叠和不完整的。另请参见关于,它显示了如何绘制不相交约束。

您的模型确实正确地表达了您的预期含义,但您需要在端点字段开始字段分段中添加一个不相交约束(在UML术语中称为泛化集),以确保字段不能既是结束字段又是开始字段


从UML2.5开始,默认情况下分段是重叠和不完整的。另请参见上的“总是很好的解释”,其中显示了如何绘制不相交约束。

我想另一种方法是将字段设置为18,并添加一个棘手的OCL。就我个人而言,我更喜欢上面的说法——因为我不知道如何编写OCL,而且我会认为它只是摆姿势而已。@bruno:你的答案不正确,因为你混淆了UML泛化集的默认含义。请参见下面我的正确答案。另外,最好不要再解释了,否则这意味着字段同时继承Startfield和Endfield,但继承方向相反。@GerdWagner我不明白你的意思,你看我在哪里谈到泛化集?我并不是说每个字段都是一个Endfield或一个Startfield,假设UML中将字段分割为Endfield和Startfield(称为泛化集)在默认情况下是不相交的。但事实并非如此。当这样的分段在UML类图中没有明确的不相交约束时,它的子类是重叠的。我想另一种方法是将字段设为18,并添加一个复杂的OCL。就我个人而言,我更喜欢上面的说法——因为我不知道如何写OCL,而且我会认为它只是摆姿势而已。@bruno:你的回答不正确,因为你把默认的我弄糊涂了
UML泛化集的名称见下面我的正确答案。另外,最好不要再解释了,否则这意味着字段同时继承Startfield和Endfield,但继承方向相反。@GerdWagner我不明白你的意思,你看我在哪里谈到泛化集?我并不是说每个字段都是一个Endfield或一个Startfield,假设UML中将字段分割为Endfield和Startfield(称为泛化集)在默认情况下是不相交的。但事实并非如此。当这样的分段在UML类图中没有明确的不相交约束时,它的子类是重叠的。你注意到bruno的答案是有缺陷的吗,正如我在评论和回答中向他解释的那样?你注意到bruno的答案是有缺陷的吗,正如我在评论和回答中向他解释的那样?