【问题标题】:OOAD clarification on multiplicity or cardinalityOOAD 对多重性或基数的澄清
【发布时间】:2016-07-19 04:30:30
【问题描述】:

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

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

【问题讨论】:

    标签: uml class-diagram ooad multiplicity


    【解决方案1】:

    让我们总结一下:

    • 在一个精确的时刻:
      • 每个Passenger 将被分配给一个Seat (1)。开放式问题:Passenger 在分配之前是否已经存在(即 1 或 0..1)?
      • 每个Seat 可以分配一个Passenger 但它可能保持为空(所以0..1)
    • 在他们的一生中:
      • 每个Passenger 可以分配到多个座位(每个航班一个)
      • 每个Seat 可以分配许多Passenger

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

    【讨论】:

    • 感谢克里斯托弗。我们什么时候需要考虑是在一段时间内还是一次?这是对客户的一个问题,就像我需要问他们你是在一段时间内还是在某个时间点寻找的?还是应该始终针对您在一段时间内考虑的每个设计?
    • 这取决于您客户的需求。所以你必须问他/她的问题来帮助你澄清。不要犹豫,从不同的角度提出问题。例如:他/她想找回座位分配的历史吗?他/她是否希望可以提前分配座位(乘客可以为多次旅行预订座位)?是否有法律要求(在执法调查的情况下找回席位)?等等......现实生活中充满了多对多的关系
    【解决方案2】:

    这完全取决于您的模型

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

    等等

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-27
      • 1970-01-01
      • 2010-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-29
      相关资源
      最近更新 更多