如何在 UML 中对某些关联进行建模?

问题描述 投票:0回答:1

我应该在 UML 类图中描绘电影院、电影和电影发行商之间的以下联系:

  1. 电影发行商将某部电影借给多家电影院。
  2. 电影发行商将某部电影借给某家电影院,但不借给其他电影院。
  3. 最多有一个电影发行商将一部电影借给电影院。
  4. 但是不同电影院的电影可以有不同的电影发行商。
  5. 电影发行商可以将多部电影借给同一家电影院。

现在我的 UML 图如下所示: UML

我从以下陈述中得出了多重性:

  • 电影发行商类 - 上面的陈述 3(最多)
  • Cinema 类 - 上面的陈述 1 和 2:我将这些陈述解释为“电影发行商将电影借给至少 1 个电影院
  • 班级电影:陈述5(几部电影)

我对陈述 4 确实很挣扎,而且我也不确定我对其他陈述的解释。

uml associations class-diagram ternary multiplicity
1个回答
2
投票

对于多重性来说,你的方向可能是正确的。但是,您是否发现多个班级参与同一个协会的挑战?

要解决此问题,您可以:

  • 除了电影、发行商和电影院之外,还引入第四个对租赁进行建模的对象。
  • 在已识别的类之间使用三元关联。
  • 使用关联类来表示三个类的pne。但这在这里似乎不合适,因为它不知道电影、电影院和发行商独立于它们之间的关系而存在。
  • 使用关联类来表示租金

编辑

鉴于您的图表,让我们首先提醒三元关联中的多重性原则,因为它远非显而易见:

多重性表示对于任何给定的链接实例元组,一个实例可能出现在该关联中的次数。

我们依次应用吧。 这毫无疑问会证实你自己的分析:

  • 对于给定的
    Distributor
    和给定的
    Cinema
    ,可以有
    0..*
    Movies
    借出。 那是(5)。
  • 对于给定的
    Cinema
    和给定的
    Movie
    ,可以有
    0..1
    Distributor
    进行借出。 那是(3)
  • 对于给定的
    Movie
    和给定的
    Distributor
    ,借出可以用于
    1..*
    Cinema
    。这就是(1)和(2)。 (这也意味着不借电影是没有意义的)

第 4 项缺失,但这只是其他项的结果。 (4) 表示我们拍摄给定的电影:

  • 没有任何内容表明给定的
    Movie
    只能有一个
    Distributor
    。 所以我们可以想象同一部电影有多个发行商的情况,不是吗?
  • 没有任何内容表明给定的
    Movie
    仅显示在一个
    Cinema
    中。 所以我们可以想象同一部电影在几家电影院上映。
  • 将两者加在一起,我们有一部电影拥有多家发行商和几家电影院。
  • 现在没有什么要求一对
    Movie
    /
    Cinema
    只能有一个
    Distributor
    (否则 Movie 的多重性将是
    0..1
    而不是
    0..*
  • 以此类推,一部电影可以与多个影院、多个发行商合并,涉及不同的发行商。
© www.soinside.com 2019 - 2024. All rights reserved.