【发布时间】:2020-10-03 23:36:57
【问题描述】:
我正在制作一个包含 Classroom 和 Course 类的类图。
如何指示Classroom 一次只能包含一个Course?我知道我可以使用多重性来指定一个教室可以只开设一门课程,但这并不能完全指定在不同时间可以有除该一门课程之外的其他课程。
【问题讨论】:
标签: class time constraints uml class-diagram
我正在制作一个包含 Classroom 和 Course 类的类图。
如何指示Classroom 一次只能包含一个Course?我知道我可以使用多重性来指定一个教室可以只开设一门课程,但这并不能完全指定在不同时间可以有除该一门课程之外的其他课程。
【问题讨论】:
标签: class time constraints uml class-diagram
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 课程相关联:
这种方法使时隙的管理更加明显和独立:
RoomSlots 明确显示给定时间的可用房间(优惠),未分配的Courses 显示需求(需求)。【讨论】: