11.6 集合相关的类型
本节定义集合类型和他们的操作。正如本节所定义的,每种集合类型实际上都是具有一个参数的模板类型。‘T’代表该参数。具体集合类型通过用一个类型替换T来创建。因此Set(Integer)和Bag(Person)是集合类型。
11.6.1 Collection
Collection是OCL标准库中所有集合类型的抽象超类。集合中出现的每个对象成为一个元素。如果一个对象在集合中出现两次,那就是两个元素。本节定义Collection上的属性。有些操作也在子类上有定义,这意味着有一个额外的后置条件或更为特化的返回值。Collection自身是元类型CollectionType的一个实例。
几个公共操作在每个子类型的定义是不同的。这些操作在本节不再提。
集合操作的语义以使用IteratorExp构造体的IterateExp的后置条件的格式给出。这些构造体的语义在第10章(使用UML描述的语义)定义。有些情况下,该后置条件引用其它集合操作,而后者又根据IterateExp或IteratorExp构造体来定义。
11.6.2 Set
Set是数学意义上的集合。它包含不重复的元素。Set自身是元类型SetType的一个实例。
11.6.3 OrderedSet
OrderedSet是一个Set,其中的元素是有序的。它不包含重复元素。OrderedSet自身是元类型OrderedSetType的一个实例。
OrderedSet不是Set的子类型,也不是Sequence的子类型。Set和OrderedSet的公共超类是Collection。
11.6.4 Bag
Bag是允许重复对象的集合。即,一个对象可以在bag中出现多次。Bag中的元素没有次序。Bag自身是元类型BagType的一个实例。
11.6.5 Sequence
Sequence是元素都有序的集合。Sequence中的元素可以出现多次。Sequence自身是元类型SequenceType的一个实例。
Sequence不是Bag的子类型。Sequence和Bag的公共超类是Collection。