UML 2.5.1中ParameterSet约束的OCL includes()操作参数判定问题
UML 2.5.1中ParameterSet约束的两个核心问题
UML 2.5.1规范文档第190页定义了约束ParameterSet::two_parameter_sets,要求两个ParameterSet不能包含完全一致的Parameter集合,对应的OCL约束代码如下:
• two_parameter_sets Two ParameterSets cannot have exactly the same set of Parameters. inv: parameter->forAll(parameterSet->forAll(s1, s2 | s1->size() = s2->size() implies s1.parameter->exists(p | not s2.parameter->includes(p))))
另有《UML 2活动建模的陷阱》一文从第3页末段起对ParameterSet展开论述,提出了ParameterSet互为子集的问题——仅依据上述约束,这种情况似乎会被判定为不满足要求。
现咨询以下两个问题:
- 如何评估上述约束实现中最后一个OCL
includes()操作的逻辑? - 判定两个Parameter对象相等的核心特征是什么?仅比较参数名称显然不合理,比如部分编程语言支持无名参数声明(示例:
int Foo(int, int, int);),若参数的direction等属性均相同,只能靠定义顺序区分,但ParameterSet中的参数是无序集合,目前未找到UML规范中针对无序列集内Parameter相等性的判定规则。
内容的提问来源于stack exchange,提问作者Robert Hairgrove
相关产品推荐
相关产品推荐

