Class 如何指定;“一次一个”;在UML中?

Class 如何指定;“一次一个”;在UML中?,class,time,constraints,uml,class-diagram,Class,Time,Constraints,Uml,Class Diagram,我正在制作一个包含教室和课程课程的课堂图表 我如何表明教室一次只能有一门课程?我知道我可以使用多重性来指定一个教室只能有一门课程,但这并不能确切地指定在不同的时间可以有一门课程以外的其他课程。多重性是正确的方法,在您的情况下,它是0..1,因为教室可以不使用=>没有关联的课程。一门课程可以在不同的教室里进行,如果在室外,甚至可以不进行,所以我使用* 这并没有明确规定在不同的时间可以有不同的课程 我不同意,关联课堂---课程没有指定关联的课程(和课堂)不能更改,因此如果没有额外的约束或将其设置为

我正在制作一个包含
教室
课程
课程的课堂图表


我如何表明
教室
一次只能有一门
课程
?我知道我可以使用多重性来指定一个教室只能有一门课程,但这并不能确切地指定在不同的时间可以有一门课程以外的其他课程。

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

这并没有明确规定在不同的时间可以有不同的课程

我不同意,关联
课堂---课程
没有指定关联的课程(和课堂)不能更改,因此如果没有额外的约束或将其设置为只读,它可以更改第一个解决方案和暂时性问题 如果
0..1
多样性满足了您明确的要求:
教室
在任何给定时间实际上最多只能容纳一门
课程
。但其结果是,在此特定时间:

  • 教室
    不知道已经或将要在教室中进行的任何其他
    课程
  • 将来在本
    教室中进行的任何其他
    课程
    目前都不知道将在何处进行
因此,如果您从事时间表和资源调度业务,此解决方案将无法满足您迄今未提及的其他隐含需求

你的设计中的时间在哪里? UML只提供有限的内置时态语义。您需要在模型中显式地添加时间。因此,此处缺少的是时间段:

  • 时段不一定与
    课程绑定
    ;“C++入门”课程可能需要几节课,可以在不同的时间在多个房间进行
  • 时间段显然既不与
    教室绑定,也不与
    教室绑定
直观的解决方案
时隙
可被视为与
课程
教室
的关联相关。对于在一个房间内进行的每门课程,您都必须管理开始和结束时间。这是很自然地建模为关联类的:

这并不能满足您的“单一性”需求,但它通过一个用自然语言表示的约束来促进其表达:
{同一教室的时间段不能重叠}
。您也可以在OCL中更正式地表达它

另一种方法

您也可以对时间问题进行不同的分析,并将<>代码>教室<代码>作为服务提供,由对应于时间间隔的<>代码> ROMsStudio组成。然后,每个

RoomSlot
将与
0..1
课程相关联,正如布鲁诺所建议的:

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

  • 您可以使用1小时的固定时间段,您可以根据需要添加、拆分和合并同一房间的时间段,从而允许动态时间段,始终强制执行无重叠
  • 房间可用性的管理可以独立于房间使用情况进行分析和实施
  • 未分配的
    RoomSlots
    明确显示给定时间的可用房间(优惠),未分配的
    课程
    显示需求(需求)

当我写下我的答案时,我当然想把它扩展到使用时间表,但我也认为你可能会这样做;-)像往常一样,一个清晰而完整的答案,congratulation@Bruno非常感谢。这种交流显示了建模的好处:您的回答有助于识别缺失的需求,在我的第二个备选方案中,我意识到这不会阻止同一课程在不同的房间同时进行两次,这就提出了关于课程另一边的多样性的进一步问题(例如,它是由多个教师在一个时间段内各持有一个内容吗?它是由一个教师在多个课程/小时内分割的内容吗?时间段内的分解是否与内容的分解相匹配?等等。)@Chistophe我认为一个更自然的解决方案是模拟课堂会议(类似于你的时间段)作为课程的组成部分,将一个教室与一次班会关联,并添加一个约束(类似于您的时段约束)“同一个教室的班会不能重叠。@格德瓦格纳感谢你的建议。事实上,我也在考虑将一门课分成若干部分,在给定的时间内分配给一个教室。我想到的名字是“课”,但这可能是模棱两可的,因为“课”通常是基于内容的分解。我喜欢“课堂会议”的想法。不过,我希望OP现在有足够的元素来开发模型,以满足实际需求,因为问题中表达的需求相当有限。