具有本机 UML 类型的模板类和模板类的 OCL 约束
Posted
技术标签:
【中文标题】具有本机 UML 类型的模板类和模板类的 OCL 约束【英文标题】:Template classes with native UML types, and OCL constraints for template classes 【发布时间】:2013-11-22 21:11:31 【问题描述】:我有两个关于同一个 UML 类图的问题。第一个是关于如何使用 UML 原生类型对模板类建模。第二个是关于如何处理 OCL 约束中的模板类。
问题一:模板类
我想为间隔使用模板类并使用 UML 标准来表示它。间隔必须可用于整数和浮点数。到目前为止我发现的最好的方法如下:
这里的想法是有一个模板类,参数T
是Integer
和Float
类的超类。
我看到的问题是我需要重新定义 UML 的基本类型才能对它们进行分组。我想知道是否有一种干净的方式来定义模板类并说T
是integer
或float
类型(这里是UML 的原语)。
问题 2:模板类的 OCL 约束
我的问题的第二个方面是我希望能够添加 OCL 约束来说明我的间隔必须包含至少 2 个元素。问题是,根据前面类图中T
的绑定,规则一定不一样。
对于花车:
context Interval
inv : self.supBound > self.infBound
对于整数:
context Interval
inv : (self.infBoundIncluded and self.supBoundIncluded) implies supBound - infBound >= 1
context Interval
inv : (not(self.infBoundIncluded) and self.supBoundIncluded) implies supBound - infBound >= 2
context Interval
inv : (self.infBoundIncluded and not(self.supBoundIncluded)) implies supBound - infBound >= 2
context Interval
inv : (not(self.infBoundIncluded) and not(self.supBoundIncluded)) implies supBound - infBound >= 3
所以我需要在 OCL 中找到一种方法来说明某些规则仅在 T
绑定到 Integer
时适用,而其他规则在绑定到 Float
时适用。我不是 OCL 方面的专家,也找不到任何有用的信息,所以我寻求帮助。
提前致谢,
巴斯蒂安。
【问题讨论】:
【参考方案1】:经过更多研究,我得出了以下解决方案:
问题 1
解决方案是使用具有泛型类型的模板类(根据 UML 标准,此类不能实例化),并将其与实现类绑定。对应的UML类图如下:
这里,除了使用 UML 基本类型 integer
和 real
之外,我们还有两个可用的类 IntegerInterval
和 RealInterval
从通用模板类 Interval
派生而来。
问题 2
因为整数和实数区间的分离是在类级别完成的,所以 OCL 的区分很简单。因此约束如下:
context IntegerInterval
inv: ...
context RealInterval
inv: ...
无论如何,我仍然愿意接受其他建议:)
【讨论】:
以上是关于具有本机 UML 类型的模板类和模板类的 OCL 约束的主要内容,如果未能解决你的问题,请参考以下文章