2012-03-10 70 views
15

我有一个关于关联问题,是准确的,我想知道的多重性,我明白这些,但是例如,如果我想有:UML关联多重

​​

剂量意味着在任何时候期间系统存在的情况下,如果系统运行正常,那么必须至少有一名学生被分配到该班级,或者那些多元化应该是真实的。

我在问这个问题,因为我想知道创建对象的时刻。首先我们创建一个空课,然后用学生填充它。一段时间以来,班级是空的,但只有在创建和填充期间,才有至少一名学生。因为如果我将1更改为0..1,它会表明可能有空课,它不是假的(这是填充的时刻),但后来我不想允许没有学生的课程。

编辑:将0 .. *更改为0..1,它应该像现在一样,对不起混淆。

回答

9

剂量,这意味着在系统存在期间的任何点必须至少有一名学生分配给班级,或者如果系统正常运行,那么这些多元化应该是真实的。

这是一个很好的问题。这意味着,当系统处于稳定状态时,每个学生必须与正好一个类相关联。这反过来又提出另一个问题:什么构成“稳定状态”?总的来说,UML并没有将其正式化。直观地说,它意味着什么时候没有进行中的活动正在积极地改变状态。 UML的一些配置文件更加严谨。例如,可执行UML表示当状态的动作正在执行时,系统可以违反基数约束。但是,当状态动作完成时,它必须使系统处于有效状态,即满足所有基数约束条件。

数据库在这里提供了一个很好的比喻。当系统稳定时,DB约束(如非空&外键)必须为真。在执行交易期间,可能会暂时违反约束条件。但是,当事务完成时,它必须使db处于有效状态。

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

  • 它是有效的一类与没有学生存在时,系统是稳定的(*表示0以上 - 如此类不需要有任何的学生)
  • 当系统稳定时('1'表示正好一个),学生在没有被分配到某个类别的情况下存在是无效的。因此,无论“交易”如何产生,学生还必须将学生与班级相关联。

hth。

+0

感谢您的回答:) – Andna 2012-03-11 08:14:34

+0

不客气 - 很好的问题。 – sfinnie 2012-03-11 16:06:17

0

不,该*表示不是每个班级中至少有一名学生在任何时间。但另一方面,从学生到班级,多样性意味着任何学生在正好一个类。

由于建模的原因,您可能需要将1多样性更改为*,但这取决于您的上下文。

+0

好吧,但是这个“随时”怎么样,这是否也排除了我描述的情况(创建一个对象),还是这些情况是没有意义的? – Andna 2012-03-10 22:28:27

+0

关于* - 我认为这意味着与0 .. *相同,至少它在“UML蒸馏” – Andna 2012-03-10 22:36:01

+0

@Andna中所说的取决于您的UML编辑器如何解释您的输入......您应该能够检查该图并查看每个端点的实际上限和下限。 – 2012-03-10 22:40:24

1

剂量是指在系统中存在的任何时刻必须有至少1名学生分配到类

这意味着恰好有分配给多个学生一个班。

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

0..1  * 
----------- 

你真的可能想在这里什么是许多一对多的关系......学生可以在许多类,而班级可以包含很多学生。

+0

约2年后,你的答案回答了我的问题:)这就是为什么有4个值的多样性。在休眠状态下,我们只将它建模为多对一的一对一一对多,只需要2个值。 – lovespring 2014-03-30 23:43:04