问题描述
我正在创建一个带有Classroom
和Course
类的类图。
如何指示Classroom
一次只能有一个Course
?我知道我可以使用多重性指定一间教室可以只开设一门课程,但是并不能完全指定在不同时间可以有其他课程。
解决方法
第一个解决方案和时间问题
Bruno's solution具有0..1
的多重性满足您的明确要求:Classroom
实际上可以在任何给定时间最多容纳一个Course
。但结果是在给定的时间:
-
Classroom
不知道其中有或将要发生的任何其他Course
。 - 将来将在此
Course
中发生的其他任何Classroom
都不会在此刻发生。
因此,如果您从事时间表和资源调度工作,那么该解决方案将无法满足您到目前为止没有提到的其他隐式需求。
设计时间在哪里?
UML仅提供有限的内置时间语义。您需要在模型中明确添加时间。因此,这里缺少的是时隙:
- 时隙不一定绑定到
Course
; “ 从C ++入门”课程可能需要几节课,这些课可以在不同的时间在几个房间里进行。 - 该时隙显然未绑定到
Classroom
。
直观的解决方案
可以将TimeSlot
视为与Course
和Classroom
的关联有关。对于在房间中进行的每门课程,您都必须管理开始时间和结束时间。将其建模为关联类非常自然:
这不能满足您的“唯一性”要求,但是它可以用自然语言{Timeslots for a same Classroom cannot overlap}
表示的约束来促进其表达。您也可以在OCL中更正式地表达它。
一种替代方法
您还可以对时间问题进行不同的分析,并将Classroom
视为服务产品,由与时间间隔相对应的RoomSlots
组成。然后,每一个RoomSlot
都将与Bruno建议的0..1
课程相关联:
这种方法使时隙的管理更加明显和独立:
- 您可以使用1小时的固定时间段,也可以根据需要添加,拆分和合并同一房间的时间段,以允许动态时间段,从而始终避免重叠。
- 房间可用性管理可以独立于房间使用情况进行分析和实施
- 未关联的
RoomSlots
明确显示给定时间的可用房间(要约),而未分配的Courses
显示需要(需求)。
多样性是正确的做法,在您的情况下,它是0..1
,因为教室可以闲置=>没有相关的课程。一门课程可以在不同的教室里进行,如果在室外,则什至没有。所以我使用*
。
没有完全指定除了在不同时间的一门课程外还有其他课程
我不同意,关联Classroom --- Course
未指定关联的课程(和教室)无法更改,因此在没有附加约束或将其设置为 readOnly 的情况下,它可以更改