Академический Документы
Профессиональный Документы
Культура Документы
• Lenguaje de Especificación
– Declarativo e independiente de la plataforma
• Preciso
1 3
.
2 4
Introducción (3/5) Introducción (5/5)
• Con propósito de documentación
• OCL para expresiones de navegación
• Usado para verificación formal
• Usado para generación de testcases
context Copy
• Usado para chequeo en tiempo de ejecución inv: self.copyOfBook.authorsOfBook->size() > 0
– Puede producir excepciones
– Diseño por contrato
• Pre- and post-condiciones Copy copyOfBook Book authorsOfBook Author
1 *
5 7
9 11
10 12
OMG
Invariante
Pre y PostCodiciones
• Context <clasificador> inv: <exp-bool>
Se aplican tanto a Métodos como a Operaciones.
Context <clasificador>
<nombreDeTipo>::<nombreDeOperación>(<parametro1> :
<Tipo1>, ... ): <TipoDevolución>
pre : …
13 15
OMG
context Company::edades():Set(Integer)
14 post: result=16self.employee.age
OMG
Ejemplo
Pre y PostCodiciones
• Ejemplo:
– Clase Cuenta del modelo de cuentas bancarias
• El campo balance almacena el balance
– Métodos despositar/extraer
context Cuenta::depositar(int cant)
pre: cant >= 0
post: balance = balance@pre + cant
OMG
select exists
21 23
OMG
forAll Set
• set->union(set2 : Set(T)) : Set(T)
• set->union(bag : Bag(T)) : Bag(T)
• set->intersection (con set and bag)
• set->including(obj : T) : Set(T) (Agrega obj a set)
• set->excluding(obj : T) : Set(T) (Elimina obj a set)
• set->symmetricDifference(set2 : Set(T)) :Set(T)
• set->asSequence : Sequence(T) (orden aleatorio)
• set->asBag : Bag(T)
• Y todas las heredades de collect
=, -, select, reject, collect
22 24
OMG
25 27
OMG
self.oclType = Person
26 28
Principio de Sustitución de Liskov Ejemplos - Invariantes
• “En cualquier lugar que una instancia de una clase es
esperada, uno puede siempre sustituirla por cualquiera de
sus subclases”
• Consecuencias para los invariantes:
– Un invariante es siempre heredado por cada uno de las subclases
donde dicho invariante es ubicado
– Las subclases pueden fortalecer dicho invariante
29 31
OMG
Ejemplos -
Ejemplos - Invariantes Valores Iniciales y Derivaciones
context Bottle
open Bottle
state Closed inv: contents = capacity capacity : Integer
contents : Integer
weight : Integer
open Bottle close [ contents=capacity ] diameter : Integer
capacity : Integer neckDiameter : Integer
contents : Integer totalWeight() : Integer
weight : Integer
diameter : Integer closed
neckDiameter : Integer
totalWeight() : Integer
closed
37 39
OMG
38 40
Componentes Queries
• Final de Asociación
– El clasificador de un final de asociación no
puede ser un DataType ni una Interface.
– Una instancia es de composición no puede
pertenecer a más de una instancia compuesta.
• Clasificador
– No puede haber dos métodos con la misma
signatura.
– No puede haber dos atributos45 con el mismo nombre
OMG
46