Collections 如何在UML图中描述有序集合元素的索引?
我想在UML对象图中描述有序集合元素的索引。 我能在中找到的唯一信息是关于关联语义的部分11.5.3.1 当关联的一个或多个端点被排序时,链接除了其端点值之外还携带排序信息 但是,要么是没有关于这种订购信息的符号的指导,要么就是我没有找到它。我想我在一些工具中看到了一个冒号后跟索引。我想知道对于如何描述链接上的索引是否有共识或参考 编辑:Collections 如何在UML图中描述有序集合元素的索引?,collections,uml,diagram,notation,Collections,Uml,Diagram,Notation,我想在UML对象图中描述有序集合元素的索引。 我能在中找到的唯一信息是关于关联语义的部分11.5.3.1 当关联的一个或多个端点被排序时,链接除了其端点值之外还携带排序信息 但是,要么是没有关于这种订购信息的符号的指导,要么就是我没有找到它。我想我在一些工具中看到了一个冒号后跟索引。我想知道对于如何描述链接上的索引是否有共识或参考 编辑: 虽然现有的答案已经是全面的,但让我补充一些澄清和背景。正如前面的第一句话所述,我想在对象图中使用这个显式信息(可能括号混淆了,我删除了它们)。对象图用作测试用
虽然现有的答案已经是全面的,但让我补充一些澄清和背景。正如前面的第一句话所述,我想在对象图中使用这个显式信息(可能括号混淆了,我删除了它们)。对象图用作测试用例规范的一部分,用于传达输入的对象结构、预期结果和实际结果。在这方面,集合中对象的顺序可能发挥作用,例如,想象一个测试用例规范,用于正确实现排序算法的规范 我没有特意指定收集的类型,因为我不认为只要收集是有序的,这会对答案产生什么影响。通常,我会想到一个序列/列表 在这种情况下,我不需要OCL,但考虑到制定集合元素顺序的约束是密切相关的,我很欣赏这个答案。UML 在UML中表示有序集合的索引是无法预见的。在第7.5.3.2节中定义,对于具有多重性的元素,排序是有意义的: 如果将乘法元素指定为有序(即,
isOrdered
为true),则该元素实例化中的值集合是有序的。这种排序意味着存在从正整数到值集合元素的映射。如果MultiplicationElement不是多值的,则isOrdered的值没有语义效果
映射的正整数对应于您所称的索引。但是UML规范中没有定义任何内容:即使索引应该从0、1或任意值开始,也没有定义。甚至没有说索引必须是连续的
UML规范在同一节中解释,有序集合的语义也取决于其元素的唯一性:
isOrdered isUnique Collection Type
false true Set
true true OrderedSet
false false Bag
true false Sequence
不幸的是,UML规范中没有定义OrderedSet
和Sequence
更精确地定义顺序的唯一情况是定义为派生联合的特性(第9.5.3节):
然后,通过按照子集属性在allAttributes()
的结果中出现的顺序评估子集属性,并将结果连接起来,来定义并集的顺序
结论:¨无法定义订单是什么(例如,将订单链接到某些属性),并且预计不会引用订单中的索引
OCL
OCL语言是UML的伴侣。它用于编写更正式、更精确的约束。它为集合定义了更多语义:
OrderedSet是一个集合,其元素是有序的。它不包含重复项。OrderedSet本身是元类型OrderedSetType的实例。
OrderedSet不是Set的子类型,也不是Sequence的子类型。集合和OrderedSets的常见超类型是Collection
序列是元素有序的集合。一个元素可以是序列的一部分不止一次。序列本身是元类型SequenceType的实例。
序列不是Bag的子类型。序列和包的常见超类型是集合
OCL在可用于Sequence
和OrderedSet
的多个操作中使用索引的概念:
- 在(i)处的表达式
标识了元素的i
- 表达式
返回元素v的索引indexOf(v)
- 表达式
返回第一个元素,其索引为1first()
- 表达式
reutrn最后一个元素,因为它的索引对应于集合的大小last()
- 实际上,您可以只对链接的末尾进行编号(因为它是链接而不是关联,所以不应该与多重性混淆)。如果您担心会混淆,您可以在号码前加上非正式的
或#
Nr.
- 或者,如果您必须保持100%的合规性,您可以将订单信息放在注释符号中
- 阅读第126页第9.8.4节,并考虑到使用
来指定实例中的值,我认为可以认为=
是有效的,因为尚未通过两端实例为链接定义的唯一值是排序信息order=1