8.2 Types包

OCL是一门类型语言。每个表达式都有一个类型,要么是显式的声明,要么可以被静态地衍生出来。表达式的执行产生一个该类型的值。因此,在我们定义表达式之前,我们必须为模型提供一个类型的概念。本章节展示OCL类型的元模型。注意,这里元模型中类的实例指的是类型自身(例如整型),而不是它们所表示的问题域的实例(例如,-15, 0, 2, 3)。

图8.1的模型展示了OCL的类型。基类型是UML分类符,它包含了来自UML Superstructure的分类符的所有子类型。

图8.1 Abstract Syntax Kernel Metamodel for OCL Types

在该模型中,ColletionType(和它的子类)和TupleType比较特殊。我们不能实例化所有的集合类型,因为它们的数量是无限的,尤其当我们考虑内嵌集合的时候。概念上所有的这些类型都是存在的,但是这样的一种类型应该在表达式实际需要的时候才被工具(懒)实例化。出于方便的目的,代表集合类型或元组类型的一个实例可能在不同的命名空间被复制(例如在一个顶级包或引用它的表达式内),然而语义上它们代表相同的类型。

AnyType

AnyType是特殊类型OclAny的元类,所有其它类型都要符合它。OclAnyAnyType的唯一实例。该元类允许定义所有其它分类符(包括类、数据类型和基本类型)的泛化上的特定属性。

BagType

BagType是一个集合类型,它描述了一个多值元素集合,包中的每个元素可以出现多次。该集合中的元素是无序的。BagType还包括自己元素类型的声明。

CollectionType

CollectionType描述了一个给定的特定类型元素的集合。CollectionType是一个具体的元类,它的实例是抽象Collection(T)数据类型家族。它的子类是SetType, OrderedSetType, SequenceType和BagType,对应的实例分别是具体的Set(T), OrderedSet(T), Sequence(T)和Bag(T)。

每个集合类型的都包含对它的元素类型的声明(即集合类型的元素类型是参数化的)。在元模型中,这表示为一个从CollectionType到Classifier的关联。注意对于集合的元素类型没有现值。这意味这集合类型的元素有可能是另一个集合类型,从而允许任意深度的嵌套。

Associations

elementType 集合中元素的类型,集合中的所有元素都必须符合该类型。

InvalidType

InvalidType表示一个符合除VoidType类型之外所有其它类型的类型。InvalidType的唯一实例是Invalid,它的定义会在标准库章节做进一步描述。此外,Invalid还有一个运行时实例称为OclInvalid

MessageType

MessageType描述OCL消息。与集合类型类似,MessageType描述了一组在标准库中定义的类型。每个MessageType都包含对所引用操作或信号类型的声明,即每个OCL消息类型都由一个操作或信号所参数化。在元模型中,这表示为一个从MessageTypeOperationSignal的关联。MessageType是OCL抽象语法的一部分,位于M2层。它的实例——OclMessage及其子类型位于和M1层。

Associations

referredSignal 消息发送的信号
referredOperation 消息调用的操作

OrderedSetType

OrderedSetType是一个集合类型,它描述了一个元素集合其中每个元素只能出现一次。元素的次序由它们在该序列的位置决定。OrderedSetType包含对元素类型的声明。

SequenceType

SequenceType是一个集合类型,它描述了一个元素集合其中每个元素可以出现多次。元素的次序由它们在该序列的位置决定。SequenceType包含对元素类型的声明。

SetType

SetType是一个集合类型,它描述了一个元素集合其中每个元素只能出现一次。元素是无序的。SetType包含对元素类型的声明。

TemplateParameterType

TmplateParameterType用于引用一个参数化的类型定义。它用在标注库中表示参数化的集合操作。一个TemplateParameterType通常命名为“T”(或者当涉及多个类型参数时“T2”, “T3”,以此类推)。

TemplateParameterTypeClassifier的子类。

Attributes

specification 不被解释的模板参数类型的不透明(opaque)定义。

TupleType

TupleType(俗称纪录类型或结构体)把不同类型合并到一个聚合类型中。TupleType的每个组成部分都由元组的属性来描述,每个都有一个名称和一个类型。元组每部分的类型没有限制。一个TupleType可以包含其它元组类型和集合类型。元组中的每个部分由其名称来唯一指定。

VoidType

VoidTypeOclVoid的元类,它符合除OclInvalidType之外其它所有类型的类型。VoidType的唯一实例是OclVoid,后者的定义在标准库中做进一步的描述。此外,OclVoid只有一个实例null——对应UML NullLiteral字面量规约——代表值缺失。注意,与invalid相比,null是一个有效的值,可以被集合所拥有。

results matching ""

    No results matching ""