首页 > 解决方案 > 使用“Shorthand for Collect”的许多 OCL 表达式的正确解释是什么?

问题描述

给定以下 UML 模型:

在此处输入图像描述 我正在努力正确解释一些 OCL 表达式(都在“City”类的上下文中)。我正在使用的 OCL 版本是 OCL 2.3.1(尽管如果 OCL 2.4 更适合回答我的问题,例如因为 OCL 的某些方面在 OCL 2.4 中更加清晰,我当然会感兴趣)。

标签: ocl

解决方案


self.building.room.window => 是的,是的,是的

您已在第一个示例中成功扩展 collect。在第二个中做同样的事情,假设房间只有一个区域。

自我->收集(建筑)->收集(房间.区域)> 0

输入错误: Bag(Integer) > Integer

自我->收集(建筑)->收集(房间.区域)->尺寸()> 0

输入正确但测试是否有多个区域

self->collect(建筑)->collect(room.area)->sum() > 0

输入正确并检测是否有任何(假定为非负)区域非零

self->collect(建筑)->collect(房间)->forAll(area > 0)

非单人间的测试

(如果您使用 Eclipse OCL Xtext 控制台,您将看到您的类型错误和中间类型。)


推荐阅读