Está en la página 1de 4

Anlisis de Sistemas Administrativos

Gua de aprendizaje 4.1


Unidad 4 Lenguaje de Restriccin de Objetos
Objetivo: definir el lenguaje de restricciones de objetos (OCL) para expresar
restricciones y navegaciones sobre un modelo orientado a objetos
Palabras claves: ocl, modelo orientado a objetos, navegacin
Duracin: 6 hs
Preguntas
1) Porqu un modelo grfico (como un diagrama de clases) no es suficiente para
lograr una especificacin precisa y no ambigua?
No es suficiente debido a que, cuando existe la necesidad de establecer restricciones
adicionales sobre el modelo, se escriben en lenguaje natural. El lenguaje natural no es preciso
y presenta ambigedades debido a que cada persona puede interpretar de forma distinta las
mismas palabras.
2) Cules son las ventajas y desventajas de los lenguajes formales?
Las ventajas de los lenguajes formales son que se eliminan las ambigedades, la
documentacin transmitida es ms precisa.
La desventaja es que se requiere de personas con formacin matemtica elevada para
transmitir e interpretar la informacin, esto es algo que no se cumple mayormente entre los
involucrados en el desarrollo del sistema, y los usuarios finales.
3) OCL puede utilizarse para escribir lgica de programas?
No, ya que OCL no es un lenguaje de programacin, sino que es un lenguaje declarativo.
4) Qu significa que OCL es un lenguaje tipado?
Significa que cada expresin OCL tiene un tipo y dichos tipos deben concordar.
5) Cules son los principales usos de OCL?
OCL se puede utilizar para:
Especificar reglas de negocio
Definir la semntica de UML
Especificar PIM para MDA
Especificar modelos precisos y completos a partir de la construccin de modelos
UML/OCL combinados
6) Qu es un invariante?
Un invariante es una condicin que debe ser verdadera para todas las instancias de un tipo
especfico en cualquier momento. Su tipo contextual es un clasificador.
7) Dentro del mbito de OCL, qu son las propiedades: atributo y operacin y
extremo de asociacin?
El valor de una propiedad de un objeto que es definido en el diagrama de clases es
especificado por un punto ('.') seguido del nombre de una propiedad.

Los atributos son propiedades las cuales es posible definir reglas de negocio, comparaciones
o clculos para restringir valores posibles que puede tomar la propiedad.
Ejemplo: 'la edad de una persona es siempre mayor o igual a 18'.
context Person
inv: self.age >= 18
Las operaciones son propiedades similares a los atributos, con la diferencia que pueden tener
parmetros, por lo que un valor de la propiedad es expresado como funcin de los parmetros.
Ejemplo:
aPerson.income(aDate)
Un extremo de asociacin es un nombre de rol que se otorga de acuerdo a una asociacin,
de ese modo se puede hacer referencia desde un objeto hacia otro objeto asociado
denominado como extremo opuesto de la asociacin.
Ejemplo:

Nota: si no se designa un nombre de rol se puede nombrar directamente al objeto extremo


opuesto.
8) Defina formalmente las operaciones sobre colecciones: select(),
forAll(), exists(), size, count(), isEmpty(), notEmpty()
select(): Permite obtener un subconjunto especfico de una coleccin segn la
expresin booleana definida como argumento.
context Proyecto
inv: self.participa -> select (edad > 50) ->notEmpty()
Indica que debe haber participantes mayores de 50 aos en el proyecto

forAll(): Permite especificar una expresin booleana que debe ser verdadera para todos
los elementos de una coleccin. La operacin forAll tiene como resultado un valor
booleano.
context Proyecto
inv: self.participa->forAll(edad <= 65)
Indica que todos los participantes del proyecto deben tener 65 aos o menos

exists(): Indica la existencia de al menos un elemento de una coleccin que verifica una
condicin, por lo que devuelve un booleano (verdadero si existe, falso si no).
context Cuenta
inv: self.mTitulares->exists(c:Cliente| c.mEdad>=18)
Indica que debe existir al menos un titular de la cuenta con 18 aos o ms.

size(): nos permite obtener la cantidad de elementos de una coleccin


context Cliente
inv: self.mCuentas->size() < 10
Indica que la cantidad de cuentas que puede tener un cliente es menor a 10

count(): Indica el nmero de veces que una coleccin self incluye un objeto object.
Bag{1, 2, 3, 2, 4, 2}->count(2) = 3
Indica que contando los objetos "2" en la coleccin "Bag{}" da como resultado 3 objetos

notEmpty(): verifica si existe al menos un objeto o no cuando navegamos la asociacin


con multiplicidad.
context Persona
inv: self.esposa->notEmpty() implies self.esposa.genero = Genero::femenino
Indica que la existencia de una esposa de una persona implica que el gnero de dicha
esposa sea femenino.
isEmpty(): Al contrario de notEmpty(), la operacin isEmpty() valida como verdadero la
no existencia de objetos en una coleccin.
context Person
inv: self.employer-> isEmpty()
Se evalua a verdadero si el conjunto de empleadores es vaco, de otra manera es falso.

Ejercicios
A partir del siguiente diagrama de clases, establecer las siguientes restricciones
utilizando OCL

1) Para cada tipo de avin, el nmero de asientos para tripulantes no puede ser
mayor al nmero de asientos para pasajeros
context TipoAvin
inv: self.nroTripulantes < self.nroAsientos
2) Los viajes no pueden tener el mismo destino que el origen
context Viaje
inv: self.origen <> self.destino
3) La cantidad de horas de vuelo de un avin debe ser menor a 1000

context Avin
inv: self.horasVuelo < 1000
4) Para aviones del tipo Delta de la serie A, la cantidad de asientos para los
pasajeros debe ser de 40
context Avin
inv: self.tipo.tipo=Delta and self.tipo.serie=A implies self.tipo.nroAsientos=40
context tipoAvin
inv: self.tipo=Delta and self.serie=A implies self.nroAsientos=40
5) Los pasajeros de los viajes deben ser mayores de 3 aos y menores de 95
context Viaje
inv: self.pasajero -> forAll(edad>3 and edad<95)
6) Un viaje debe tener ms de 5 pasajeros
context Viaje
inv: self.pasajero -> size() > 5
7) La cantidad de tripulantes de un viaje debe ser menor o igual a la cantidad de
pasajeros
context Viaje
inv: self.tripulante -> size() <= self.pasajero -> size()
8) La cantidad de pasajeros de un viaje debe ser menor o igual a la capacidad de
asientos del avin asignado al vuelo
context Viaje
inv: self.pasajero -> size() <= self.avin.tipo.nroAsientos
9) Un avin no puede tener mas de 500 viajes asignados en su vida til si es del
tipo Delta
context Avin
inv: self.tipo.tipo=Delta implies self.viaje -> size() < 500
10) Para los viajes que tengan asignados aviones con una cantidad de horas de vuelo
superior a 500 hs, la edad de los tripulantes deben ser mayores a 50 aos
context Viaje
inv: self.avin.horasVuelo > 500 implies self.tripulante -> forAll(edad > 50)

También podría gustarte