8.2.2 用于类型包的操作和良构规则

BagType

[1] bag类型的名称是“Bag”,后面跟着元素类型名称。

context BagType
inv: self.name='Bag('+ self.elementType.name +')'

BooleanType

allInstances(): Set(Boolean) 返回 Set {true, false}

CollectionType

[1] 集合类型的名称是“Collection”,后面跟元素类型的名称。

context CollectionType
inv: self.name='Collection('+ self.elementType.name + ')'

InvalidType

allInstances(): Set(OclInvalid) 返回 invalid,因为在表示法上 Set {invalid} 不是良构的。

MessageType

[1] MessageType具有一个到信号或操作的链接,不能二者兼之。

context MessageType
inv: referredOperation->size() + referredSignal->size() = 1

[2] 所引用的操作的参数成为MessageType实例的属性。

context MessageType
inv: referredOperation->size()=1 implies
        Set {1..self.ownedAttribute->size()}->forAll(i | self.ownedAttribute.at(i).cmpSlots(
                referredOperation.ownedParameter.asProperty()->at(i)))

[3] 所引用的信号的属性成为MessageType实例的属性。

context MessageType
inv: referredSignal->size()=1 implies
        Set {1..self.ownedAttribute->size()}->forAll(i | self.ownedAttribute.asOrderedSet().at(i).cmpSlots(
                referredSignal.ownedAttribute.asOrderedSet()->at(i)))

OrderedSetType

[1] 该类型的名称是“OrderedSet”,后面跟元素类型名称。

context.OrderedSetType
inv: self.name='OrderedSet(' + self.elementType.name + ')'

SequenceType

[1] 序列类型的名称是“Sequence”,后面跟元素类型名称。

context SequenceType
inv: self.name = 'Sequence(' + self.elementType.name + ')'

SetType

[1] 该类型的名称是“Set”,后面跟元素类型名称。

context.SetType
inv: self.name='Set(' + self.elementType.name + ')'

TupleType

[1] 元组类型的名称包括每个成员的名称及其类型。

context TupleType
inv: name= 'Tuple('.concat (
        Sequence{1..allProperties()->size()}->iterate(pn; s: String = '' |
            let p: Attribute = allProperties()->at(pn) in (
                s.concat (
                    (if (pn > 1) then ',' else '' endif)
                    .concat(p.name).concat(':')
                    .concat(p.type.name)
                )
            )
        )
      ).concat(')')

[2] 元组类型的成员具有唯一的名称。

context TupleType
inv: --总为真,因为属性具有唯一名称

[3] TupleType实例只有是元组成员的特征。

context TupleType
inv: feature->forAll(f | f.oclIsTypeOf(Property))

VoidType

allInstances(): Set(OclVoid) 返回 Set{null}。

results matching ""

    No results matching ""