OOAD 对多重性或基数的说明

OOAD clarification on multiplicity or cardinality

我在设计 class 图时对​​基数/多重性感到困惑。 我的主要困惑是何时表示 1---* 关系。例如,在乘客和座位 classes 的情况下,乘客将被分配到一个座位,因为座位可以在某个时间点分配给一名乘客,但在其存在的一段时间内可以分配给许多乘客。

那么座位--->乘客应该是1-1还是1-*?

让我们总结一下:

  • 在一个精确的时刻:
    • 每个 Passenger 将恰好分配给一个 Seat (1)。悬而未决的问题: Passenger 在分配之前是否已经存在(即 1 或 0..1)?
    • 每个 Seat 可以分配一个 Passenger 但它可能仍然是空的(所以 0..1)
  • 在他们的一生中:
    • 每个 Passenger 可以分配到多个座位(每个航班一个)
    • 每个 Seat 可以分配很多 Passenger

结论:SeatPassenger之间的关系是*-*(多对多)

这完全取决于你的模特是什么

  • 如果我们为每次行程的预订建模,它将是座位 1 --- 0..1
    乘客.
  • 如果我们为每次旅行的预订建模并且只有一些 每个 class 个座位(但未分配特定座位)它可以 是 SeatClass 1 --- 0..SeatClass.availableSeats 乘客。
  • 如果我们正在对系统建模以分析乘客行为(例如 为特定乘客提供最佳座位)这将是 乘客 1 <>--- * 座位。
  • 如果我们正在对系统建模以分析座位利用率,它可以 是座位 1 <>--- * 乘客。

等等

我可以想象很多其他的可能性。

我们的想法是您为特定系统建模,并且您需要代表特定的业务需求。多重性将取决于此。根据经验,您对某个时间点的情况感兴趣(请注意,在我的最后两个示例中,您正在处理某个时间点的座位分配历史记录)。

所以我的结论是:没有简单的答案。