UML关联多重性

UML关联多重性,uml,associations,Uml,Associations,我有一个关于关联多重性的问题。我理解,但例如,如果我: --------- --------- | |1 * | | |CLASS |----------| STUDENT | | | | | --------- --------- 这是否意味着在系统存在期间的任何时候,必须至少有一名学生分配给该班级,或者如果系统正常运行,这些多重性应该为真 我问

我有一个关于关联多重性的问题。我理解,但例如,如果我:

 ---------            ---------
|         |1      *  |         |
|CLASS    |----------| STUDENT |
|         |          |         |
 ---------            ---------
这是否意味着在系统存在期间的任何时候,必须至少有一名学生分配给该班级,或者如果系统正常运行,这些多重性应该为真

我问这个问题,因为我想知道一个物体的创造时刻。首先我们创建一个空类,然后用学生填充它。在一段时间内,类是空的,但只有在创建和填充过程中,它才会有至少一个学生。如果我将1更改为0..1,则表明可以存在空类。这不是错误的(在填充的时候),但是稍后我不想允许没有学生的课程


编辑:将0..*更改为0..1,应该是现在的样子,抱歉混淆。

不,*表示每个班级在任何时候都至少有一名学生。但从另一个方向看,从一个学生到另一个班级,多样性意味着任何学生都恰好在一个班级

出于建模原因,您可能希望将1重数也更改为*,但这取决于您的上下文

这是否意味着在系统存在期间的任何时候,必须至少有一名学生分配到该班

这意味着有一个班级分配给多个学生

关联的每一端都有一个上多重性边界和一个下多重性边界,但是如果上下边界相同,大多数UML编辑器将只显示一个值。如果要允许(零或一)对多,可以这样编写:

0..1      *  
-----------
你真正想要的可能是一种多对多的关系。。。学生可以在许多班级,班级可以包含许多学生

这是否意味着在系统存在期间的任何时候,必须至少有一名学生分配给该班级,或者如果系统正常运行,则这些多重性应为真

这是个好问题。这意味着,当系统处于稳定状态时,每个学生必须与一个班级关联。这反过来又提出了另一个问题:“稳定状态”由什么构成?UML通常不会将其正式化。直觉上,这意味着当没有正在进行的活动正在积极地改变状态时。UML的一些概要文件对此进行了更严格的描述。例如,可执行UML表示,在执行状态的操作时,系统可能会违反基数约束。但是,当状态操作完成时,它必须使系统处于有效状态,即满足所有基数约束的状态

数据库在这里提供了一个很好的类比。当系统稳定时,DB约束(如NOTNULL和外键)必须为真。在事务执行期间,可能会暂时违反约束。但是,当事务完成时,它必须使数据库保持有效状态

因此,对于您的示例,如图所示:

  • 当系统稳定时,一个类没有学生是有效的(
    *
    表示0或更多-因此该类不需要任何学生)
  • 当系统稳定时,学生在没有分配到班级的情况下生存是无效的(“1”表示正好一个)。因此,无论“事务”创建什么,学生也必须将学生与类关联起来

hth.

好的,但是“在任何时候”,这是否也排除了我所描述的情况(对象的创建),或者这些情况是否被忽略了?关于*-我认为它的意思与0..*相同,至少它在“UML蒸馏”中所说的是什么@这取决于您的UML编辑器如何解释您的输入。。。你应该能够查看图表,看到每个端点的实际上下边界。我使用的是视觉范式,就我在这个软件中的一点技能而言,如果我选择“作为多重性,我只看到”,但我认为关于*含义的讨论与这个主题无关,我修正了我原来的帖子,因为有一个关于多重性的错误(0..'*'而不是0..1),如果你现在能看一下,我会很感激:)大约2年后,你的答案回答了我的问题:)这就是为什么多重性中有4个值。在hibernate中,我们只对多对一对一对多进行建模,只需要2个值。