• No se han encontrado resultados

A.2 Paquete Expressions

B.1.1 OclAny

Todos los tipos en el modelo UML y los tipos primitivos y colecciones en la librer´ıa est´andar cumplen con el tipo OclAny. Conceptualmente, OclAny se comporta como un supertipo para todos los tipos. Los Features de OclAny est´an disponibles sobre cada objeto en todas las expresiones OCL. OclAny es una instancia del metatipo AnyType.

Todas las clases en un modelo UML heredan todas las operaciones definidas sobre OclAny. Para evitar conflictos de nombres entre propiedades en el modelo y las propiedades heredadas desde OclAny, todos los nombres de las propiedades de OclAny empiezan con ‘ocl’.

B.1.2.

OclMessage

Cada tipo de mensaje ocl, es un tipo de template con un par´ametro. El tipo predefinido OclMessage es una instancia de MessageType. Cada OclMessage est´a determinado por la ope- raci´on o se˜nal dada como par´ametro. Notar que hay conceptualmente un n´umero indefinido de estos tipos, ya que cada uno est´a determinado por una operaci´on o se˜nal diferente. Estos tipos no tienen un nombre. Cada tipo tiene como atributos el nombre de la operaci´on o se˜nal. OclMessage es una instancia del metatipo MessageType.

B.1.3.

OclVoid

El tipo OclVoid es un tipo que cumple con todos los tipos, excepto OclInvalid. Tiene una sola instancia, identificada como null, que corresponde con el valor de la especificaci´on LiteralNull de UML. Cualquier propiedad aplicada en null resulta en invalid, excepto para las operaciones oclIsUndefined(), oclIsInvalid(), =(OclAny) and <>(OclAny).

B.1.4.

OclInvalid

El tipo OclInvalid es un tipo que cumple con todos los tipos. Tiene una s´ola instancia, iden- tificada c´omo inv´alida. Cualquier propiedad aplicada en invalid resulta en invalid, excepto pa- ra las operaciones oclIsUndefined() and oclIsInvalid(). OclInvalid es una instance del metatipo InvalidType.

B.2.

Operaciones

B.2.1.

OclType

type.name(): String El nombre del type.

type.attributes(): Set(String)

El conjunto de nombres de los atributos de type, como se definieron en el modelo. type.associationEnds(): Set(String)

El conjunto de nombres de las associationEnds navegables de type, como est´an definidas en el modelo.

type.operations(): Set(String)

El conjunto de nombres de las operaciones de type, como est´an definidas en el modelo. type.supertypes(): Set(OclType)

El conjunto de todos los supertipos directos de type.

post: type.allSupertypes()->includesAll(result)

type.allSupertypes(): Set(OclType) El conjunto de todos los supertipos de type. type.allInstances(): Set(type)

El conjunto de todas las instancias de type y sus subtipos, al tiempo que la expresi´on es evaluada.

B.2.2.

OclAny

=(object2: OclAny): Boolean

Es True si self es el mismo objeto que object2. Es un operador infijo.

post: result = (self = object2)

<> (object2: OclAny): Boolean

Es True si self es diferente a object2. Es un operador infijo.

post: result = not (self = object2)

oclIsNew(): Boolean

Puede usarse s´olo en una postcondici´on. Eval´ua a True si self se crea durante la realizaci´on de la operaci´on (por ejemplo, no exist´ıa en el momento pre-condici´on).

post: [email protected]()

oclIsUndefined(): Boolean

Eval´ua a True si self es igual a invalid o null.

post: result = self.isTypeOf( OclVoid ) or self.isTypeOf(OclInvalid)

oclIsInvalid(): Boolean

Eval´ua a True si self es igual a OclInvalid.

oclAsType(type: Classifier): T

Eval´ua a self , donde self es del tipo identificado por T. El tipo T puede ser un classifier definido en el modelo UML; si el tipo actual de self al tiempo de la evaluaci´on no cumple con T, entonces la operaci´on oclAsType eval´ua a invalid. En el caso de la redefinici´on de un feature, cuando se convierte un objeto a un supertipo de su tipo real, no se tiene acceso a la definici´on de su supertipo. Sin embargo, cuando se convierte a un supertipo, cualquier feature definido por el subtipo son suprimidas.

post: (result = self) and result.oclIsTypeOf( t ) oclIsTypeOf(type: Classifier): Boolean

Eval´ua a true si self es del tipo t pero no un subtipo de t. post: self.oclType() = type

oclIsKindOf(type: Classifier): Boolean

Eval´ua a True si el tipo de self cumple a t. Esto es, self es del tipo t o un subtipo de t. post: self.oclType().conformsTo(type)

oclIsInState(statespec: OclState): Boolean

Eval´ua a True si self est´a en un estado identificado por statespec. post: -- TBD

oclType(): Classifier

Eval´ua al tipo del cual self es una instancia. post: self.oclIsTypeOf(result)

oclLocale: String

Define el entorno local por omisi´on para las operaciones de la biblioteca, como String:: toUpperCase ().

B.2.3.

OclVoid

= (object: OclAny): Boolean

Redefine la operaci´on OclAny, retornando true si el objeto es null. post: result = object.oclIsTypeOf(OclVoid)

B.2.4.

OclMessage

hasReturned(): Boolean

Es true si el tipo del par´ametro del template es una llamada de la operaci´on, y la operaci´on llamada ha retornado un valor. Esto implica el hecho que el mensaje ha sido enviado. Es false en los dem´as casos.

post: --

result(): ✭✭The return type of the called operation✮✮

Retorna el resultado de la operaci´on llamada, si el tipo de par´ametro del template es una llamada de operaci´on, y la operaci´on llamada ha retornado un valor. De otra forma, se retorna el valor invalid.

pre: hasReturned() isSignalSent(): Boolean

Retorna true si el OclMessage representa el env´ıo de una se˜nal UML.

isOperationCall(): Boolean Retorna true si el OclMessage representa el env´ıo de una llamada a una Operaci´on UML.

B.3.

Tipos primitivos

Los tipos primitivos definidos en la librer´a est´andar OCL son UnlimitedNatural, Integer, Real, String, y Boolean. Ellos son todas las instancias de la metaclase Primitive del UML core package.

Real: El tipo est´andar Real representa el concepto matem´atico de real. Notar que Integer es superclase de UnlimitedNatural e Integer es una subclase de Real. Real es una instancia del metatipo PrimitiveType.

Integer: El tipo est´andar Integer representa el concepto matem´atico de integer. Notar que UnlimitedNatural es una subclase de Integer. Integer es una instancia del metatipo PrimitiveType.

String: El tipo st´andar String representa strings, que pueden ser ASCII o Unicode. String es una instancia del metatipo PrimitiveType.

Boolean: El tipo est´andar Boolean representa los valores comunes true/false. Boolean es una instancia del metatipo PrimitiveType.

UnlimitedNatural: El tipo est´andar UnlimitedNatural es usado para codificar los valores no negativos de una multiplicidad en especificaciones. Esto incluye un valor especial ilimitado (*) que codifica el upper value de una multiplicidad en una especificaci´on. UnlimitedNatural es una instancia del metatipo UnlimitedNaturalType. Notar que aunque UnlimitedNatural es una subclase de Integer, el valor ilimitado no puede ser representado como un Integer. Cualquier uso del valor ilimitado como integer o real es reemplazado por el valor invalid.