【问题标题】:How to specify "one at a time" in UML?如何在 UML 中指定“一次一个”?
【发布时间】:2020-10-03 23:36:57
【问题描述】:

我正在制作一个包含 Classroom 和 Course 类的类图。

如何指示Classroom 一次只能包含一个Course?我知道我可以使用多重性来指定一个教室可以只开设一门课程,但这并不能完全指定在不同时间可以有除该一门课程之外的其他课程。

【问题讨论】:

    标签: class time constraints uml class-diagram


    【解决方案1】:

    第一个解决方案和临时问题

    Bruno's solution 与 0..1 多重性满足您的明确要求:Classroom 在任何给定时间实际上最多可以容纳一个 Course。但它的结果是,在这个特定的时间:

    • Classroom 不知道其中已经或将要发生的任何其他 Course。
    • 将来在此Classroom 中发生的任何其他Course 目前尚不知道它将发生在哪里。

    因此,如果您从事时间表和资源调度业务,此解决方案将无法满足您迄今为止未提及的其他隐含需求。

    你的设计时间在哪里?

    UML 仅提供有限的内置时间语义。您需要在模型中明确添加时间。因此,这里缺少的是时隙:

    • 时隙不一定绑定Course; “C++ 入门”课程可能需要几节课,这些课可能会在不同时间在多个房间进行。
    • 时间段显然没有绑定到Classroom。

    直观的解决方案

    可以将TimeSlot 视为与Course 和Classroom 的关联相关。对于在房间内进行的每门课程,您都必须管理开始和结束时间。这很自然地建模为关联类:

    这并没有解决您的“单一性”要求,但它通过以自然语言表达的约束来促进其表达:{Timeslots for a same Classroom cannot overlap}。你也可以用 OCL 更正式地表达它。

    另一种方法

    您也可以对时间问题进行不同的分析,将Classroom 视为服务报价,由对应于时间间隔的RoomSlots 组成。然后每个RoomSlot 将与布鲁诺建议的0..1 课程相关联:

    这种方法使时隙的管理更加明显和独立:

    • 您可以使用 1 小时的固定时间段,也可以根据需要通过添加、拆分和合并同一房间的时间段来允许动态时间段,始终强制不存在重叠。
    • 可以独立于房间使用情况分析和实施房间可用性管理
    • 未关联的RoomSlots 明确显示给定时间的可用房间(优惠),未分配的Courses 显示需求(需求)。

    【讨论】:

    • 当我写下我的答案时,我当然想扩展它来谈论使用时间表,但我也认为你可能会这样做 ;-) 像往常一样清晰和完整的答案,恭喜跨度>
    • @Bruno 谢谢!这种交流展示了建模的好处:您的回答有助于识别缺失的需求,在我的第二个选择中,我意识到它不会阻止同一课程在不同的房间同时进行两次,这引发了进一步的问题关于课程另一侧的多样性(例如,它是由多个教师在一个时间段内分别持有的单一内容吗?内容是否由一名教师在多组课程/小时内拆分?是否按时间段进行分解匹配内容的分解?等)
    • @Chistophe 我认为更自然的解决方案是将课堂会议(类似于您的时间段)建模为课程 并将一个 class room 与一个 class meeting 添加一个约束(类似于您的 time slot 约束)该 class同一房间内的会议不得重叠。
    • @GerdWagner 感谢您的建议。事实上,我也在考虑将一门课程分成可以在给定时间内分配到一个房间的东西。我想到的名字是“课程”,但这会是模棱两可的,因为“课程”通常是基于内容的分解。我喜欢“班级会议”的想法。尽管如此,我希望 OP 现在有足够的元素来开发适合实际需求的模型,因为问题中表达的需求相当有限。
    【解决方案2】:

    多重性是正确的做法,在您的情况下是0..1,因为可以不使用教室 => 没有相关课程。课程可以在不同的教室进行,如果在外面甚至没有,所以我使用*。

    这并没有明确说明在不同时间可以有除该一门课程之外的其他课程

    我不同意,Classroom --- Course 关联没有指定相关课程(和教室)不能改变,所以没有额外的限制或设置它只读它可以改变

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-04
      相关资源
      最近更新 更多