【问题标题】:UML association multiplicityUML 关联多重性
【发布时间】:2012-03-27 21:12:39
【问题描述】:

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

 ---------            ---------
|         |1      *  |         |
|CLASS    |----------| STUDENT |
|         |          |         |
 ---------            ---------

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

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

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

【问题讨论】:

    标签: uml associations


    【解决方案1】:

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

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

    【讨论】:

    • 好的,但是这个“在任何时候”呢,这是否也排除了我描述的情况(创建对象),还是省略了这些情况?
    • 关于 * - 我认为它的含义与 0..* 相同,至少它在“UML 蒸馏”中所说的那样
    • @Andna 这取决于您的 UML 编辑器如何解释您的输入...您应该能够检查图表并查看每个端点的实际上限和下限。
    • 我正在使用视觉范式,就我在这个软件中的小技能而言,如果我选择 * 作为多重性,我只会看到'',但我认为这个讨论的含义of * 与这个主题无关,我修复了我的原始帖子,因为有一个关于多重性的错误(0..'*' 而不是 0..1),如果你现在可以看一下,我将不胜感激:)
    【解决方案2】:

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

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

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

    所以你的例子如图所示:

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

    第一次。

    【讨论】:

      【解决方案3】:

      剂量意味着在系统存在期间的任何时候,必须至少有 1 名学生分配给班级

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

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

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

      您真正想要的可能是多对多关系...学生可以在多个班级中,班级可以包含许多学生。

      【讨论】:

      • 大约 2 年后,您的回答回答了我的问题 :) 这就是多重​​性中有 4 个值的原因。在hibernate中,我们只将其建模为多对一一对一一对多,只需要2个值。
      猜你喜欢
      • 2018-10-26
      • 2018-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-09
      • 1970-01-01
      • 2011-06-12
      • 1970-01-01
      相关资源
      最近更新 更多