如何在UML中一次指定一个? 直观的解决方案一种替代方法

问题描述

我正在创建一个带有ClassroomCourse类的类图。

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

解决方法

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

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

  • Classroom不知道其中有或将要发生的任何其他Course
  • 将来将在此Course中发生的其他任何Classroom都不会在此刻发生。

因此,如果您从事时间表和资源调度工作,那么该解决方案将无法满足您到目前为止没有提到的其他隐式需求。

设计时间在哪里?

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

  • 时隙不一定绑定到Course; “ 从C ++入门”课程可能需要几节课,这些课可以在不同的时间在几个房间里进行。
  • 该时隙显然未绑定到Classroom

直观的解决方案

可以将TimeSlot视为与CourseClassroom的关联有关。对于在房间中进行的每门课程,您都必须管理开始时间和结束时间。将其建模为关联类非常自然:

enter image description here

这不能满足您的“唯一性”要求,但是它可以用自然语言{Timeslots for a same Classroom cannot overlap}表示的约束来促进其表达。您也可以在OCL中更正式地表达它。

一种替代方法

您还可以对时间问题进行不同的分析,并将Classroom视为服务产品,由与时间间隔相对应的RoomSlots组成。然后,每一个RoomSlot都将与Bruno建议的0..1课程相关联:

enter image description here

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

  • 您可以使用1小时的固定时间段,也可以根据需要添加,拆分和合并同一房间的时间段,以允许动态时间段,从而始终避免重叠。
  • 房间可用性管理可以独立于房间使用情况进行分析和实施
  • 未关联的RoomSlots明确显示给定时间的可用房间(要约),而未分配的Courses显示需要(需求)。
,

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

enter image description here

没有完全指定除了在不同时间的一门课程外还有其他课程

我不同意,关联Classroom --- Course未指定关联的课程(和教室)无法更改,因此在没有附加约束或将其设置为 readOnly 的情况下,它可以更改

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...