Documento 621929

Anuncio
UNIVERSIDAD DISTRITAL FRANCISCO JOSÉ DE CALDAS
FACULTAD DE INGENIERÍA
PROYECTO CURRICULAR
INGENIERÍA DE SISTEMAS
OCL
(Lenguaje de Restricción de Objetos)
John Haiver Malagón Moreno
Sandra Patricia Lamilla Córdoba
20041020102
20041020108
Presentado a:
Julio Barón
Ingeniería de Software I
Marzo 6 de 2008
Bogotá D.C.
OCL
(Object Constraint Language)
1.- OBJETIVOS ............................................................................................................ 3
2.- INTRODUCCIÓN ..................................................................................................... 4
3.- MARCO TEÓRICO .................................................................................................. 5
3.1. DEFINICIÓN .......................................................................................................... 5
3.2. CARÁCTERÍSTICAS ................................................................................................ 5
3.3. TIPOS DE DEFINICIONES ........................................................................................ 6
3.4. TIPOS DE DATOS .................................................................................................. 7
4.- CONCLUSIONES .................................................................................................... 8
5.- REFERENCIAS ....................................................................................................... 9
2
OBJETIVO GENERAL
Identificar y comprender las características y funciones del lenguaje textual OCL
(Lenguaje de Restricción de Objetos) que provee UML.
OBJETIVOS ESPECIFICOS
Comprender que el Lenguaje de Restricción de Objetos esta incorporado en UML
como un estándar para especificar detalles adicionales, o precisar detalles en la
estructura de los modelos.
Identificar OCL como un lenguaje de expresión, que se utiliza únicamente para
expresar un valor, sin provocar cambios en el modelo; de un lenguaje de modelado,
porque no es ejecutable, no es un lenguaje de programación; y de un lenguaje formal,
porque todos sus elementos han sido definidos formalmente.
3
INTRODUCCIÓN
Una imagen puede describir muchas palabras. De igual modo, un modelo gráfico
puede describir una cierta parte del comportamiento, después de la cual es necesario
rellenar detalles adicionales con palabras. Describiendo algo con palabras, sin
embargo, casi siempre desemboca en ambiguedades; por ejemplo, “¿que quería decir
cuando escribió eso?”. El Lenguaje Restrictivo (constraint) de Objetos (OCL) está
incorporado en UML como un estándar para especificar detalles adicionales, o precisar
detalles en la estrucutura de los modelos.
Desarrollado dentro de la IBM Insurace Division como un lenguaje de modelado de
negocio, el OCL es un lenguaje formal diseñado para ser fácil de leer y de escribir.
OCL es más funcional que el lenguaje natural, pero no tan preciso como un lenguaje
de programación - no puede ser usado para escribir lógicas de lógica de programación
o control de flujo. Puesto que OCL es un lenguaje para la expresión pura, sus
declaraciones están garantizadas de no tener efectos laterales - simplemente
transportan un valor y nunca pueden cambiar el estado del sistema.
4
MARCO TEÓRICO
Definición
El lenguaje de especificación OCL aparece en el documento “Semántica de UML”
como lenguaje propuesto para especificar las restricciones semánticas del diagrama
de clases, junto a otro tipo de definiciones. OCL se puede utilizar en cualquier contexto
en que se use el diagrama de clases al que esté asociado (como por ejemplo, en el
modelo conceptual o en el diseño).
OCL es un lenguaje híbrido orientado a objetos-funcional, y es tipificado, porque usa el
concepto de tipos de datos. Estos tipos de datos se encuentran jerarquizados a través
de relaciones de inclusión. También existen varios tipos básicos predefinidos
(similares a los de cualquier lenguaje), y unos pocos tipos paramétricos (o
estructurados) predefinidos. Los tipos no predefinidos van a estar asociados a las
clases del diagrama de clases.
Características







El componente central construido por este lenguaje es la expresión, que se
manipula a través de operaciones que garantizan la transparencia referencial y
la falta de efectos colaterales. Estas son características compartidas con los
lenguajes funcionales, que son declarativos. Toda expresión válida para el
lenguaje OCL debe tener asociado un tipo de datos.
Las expresiones se pueden mapear fácilmente al concepto de objetos, ya que
cada tipo básico no predefinido se puede vincular a una clase del diagrama, y
algunas de las operaciones de un tipo básico no predefinido se modelan como
atributos y métodos/responsabilidades de la clase original.
Las asociaciones entre clases también se modelan en OCL usando los roles de
ambas clases participantes en la asociación, que deben estar rotulados (en
ambos extremos). El rol de una clase en una asociación con una segunda
clase, expresa que ese rol es un pseudoatributo del tipo de dato vinculado a
esa segunda clase. Todos estos componentes asociados a las clases, también
se ven reflejados en los tipos de OCL.
Las expresiones del lenguaje OCL se estructuran hasta llegar a su punto más
alto, que es el de formar parte de una definición. En cada definición de OCL se
describe cada restricción semántica del diagrama de clases, junto a otras
propiedades también descriptas con expresiones.
Cada definición en OCL se aplica a lo que se llama un contexto, que
representa el destinatario del diagrama de clases sobre quien se aplica esa
definición. Entre estos contextos se encuentran:
 Una clase (se aplica a todas expresiones-objetos cuyo tipo de datos
asociado
es el vinculado a esta clase).
 Un método/responsabilidad de una clase.
 Un atributo derivado de una clase.
 Un método/responsabilidad derivado (también llamado query) de una
clase.
Las expresiones OCL utilizan vocabulario del diagrama de clases UML. Sus
predicados “navegan” el diagrama de clases: “context” especifica el elemento
del cual se está hablando, “self” indica el objeto actual,“result” representa el
valor de retorno.Mediante “->” pueden utilizarse operaciones sobre colecciones
(select, reject, exists, size, forAll, etc…).
las expresiones OCL se pueden referir a: conjunto de nombres de clase, un
conjunto de atributos asociados con las clases, conjunto de operaciones de
5
esas clases sin efectos colaterales, conjunto de nombres de asociaciones y
lista de clases que participan, nombres de roles y multiplicidades.
Tipos de definiciones
1. Invariantes
context idclase
inv: [[Descripción del invariante]] expBool
Representa una condición (restricción semántica) que deben cumplir todas las
expresiones-objetos pertenecientes al tipo de datos vinculados a la clase idclase. La
condición a cumplirse se expresa en la expresión expBool que es de tipo Boolean
(lógico). La expresión booleana debe evaluar en verdadero si se aplica a expresionesobjetos perteneciente al tipo de la clase en cuestión que son válidos bajo este
invariante. Para el resto de las expresiones-objetos (que son inválidas según este
invariante), la expresión debe evaluar en falso.
Estos invariantes pueden tener una descripción optativa (que se escribe entre
corchetes).
2. Invariantes de método/responsabilidad
context idclase::idmetodo(par1:T1, ,parn:Tn)[:Tres]
pre: [[Descripción precondición]] expBool
post: [[Descripción postcondición]] expBool
Define la “aplicabilidad” de un método/responsabilidad (de nombre idmetodo, existente
dentro de la clase idclase con parámetros formales par1 a parn de tipo T1 a Tn , y con
imagen de tipo Tres -sólo en el caso que retorne una expresión-). La cláusula pre
refleja la precondición de este método/responsabilidad, expresada en la primera
expresión booleana expBool, que deberá retornar verdadero sólo para aquellas
expresiones-objetos para la cual este método sea aplicable. La cláusula post refleja la
postcondición de este método/responsabilidad, expresada en la segunda expresión
booleana expBool, que deberá retornar verdadero sólo cuando el estado final de la
expresión-objeto al que se le aplicó este método/responsabilidad es consistente con el
accionar del mismo.
No existirían problemas si el método/responsabilidad retorna una expresión y no
modifica el estado interno de la expresión-objeto original, ya que la postcondición sólo
verificaría el resultado que retorna. Pero si no retorna un valor (porque en realidad
modifica el estado interno de la expresión-objeto original), la naturaleza de la
postcondición es distinta que la anterior, ya que existe un efecto colateral de por
medio. En este último caso no se especifica cómo se actualiza el estado interno de la
expresión-objeto original (ya que esto no sería declarativo), sino la condición en que
debe
quedar
la
expresión-objeto
original
luego
de
aplicarle
este
método/responsabilidad. Este invariante terminaría reflejando en forma declarativa su
definición en sí misma.
3. Definición de atributos derivados
context idclase::idatributo:T
derive: expT
Define un atributo derivado de nombre idatributo existente en la clase idclase, y que
retornará una expresión de tipo T. La expresión retornada por este atributo derivado, al
aplicarla sobre una expresión-objeto de la clase en cuestión, retornará la expresión
expT, que también deberá ser de tipo T.
4. Definición de métodos/responsabilidades derivados (queries):
context idclase::idmetodo(par1:T1, ,parn:Tn):T
[pre: [[Descripción precondición]] expBool]
body: expT
Define un método/responsabilidad derivado Como es un método/responsabilidad, el
contexto es idéntico al de un método/responsabilidad común, con la diferencia que
siempre retornará una expresión (que deberá ser de tipo T) y no provocará efectos
6
colateriales. La cláusula pre optativa determina si es aplicable o no (según el resultado
de expBool) a cada expresión-objeto de la clase. En forma análoga a los atributos
derivados, en la cláusula body se especifica cuál será el valor retornado para cada
expresión-objeto de la clase que sea aplicable, a través de la expresión expT, que será
de tipo T.
Tipos de datos
1. Predefinidos
a) Básicos
 Boolean (valores lógicos)
 Integer (valores enteros)
 Real (valores reales)
 String (valores de cadenas de caracteres)
 OCLAny (el tipo supremo jerárquico de todos los tipos no estructurados)
 OCLType (el tipo asociado a los metatipos -todo tipo puede verse como
una expresión de tipo OCLType)
b) Estructurados
 Collection(T)
 Set(T): corresponde a los conjuntos de expresiones de tipo T, que no contienen
repeticiones y sus expresiones contenidas no poseen un orden posicional.
 Bag(T): corresponde a los bags de expresiones de tipo T, que permiten
contener repeticiones y donde sus expresiones contenidas no poseen un orden
posicional.
 OrderedSet (T): corresponde a los conjuntos “ordenados” de expresiones de
tipo T, que no contienen repeticiones y sus expresiones contenidas poseen un
orden posicional.
 Sequence(T): corresponde a las secuencias (listas) de expresiones de tipo T,
que permiten contener repeticiones y donde sus expresiones poseen un orden
posicional.
 Collection(T): corresponde a las colecciones de expresiones de tipo T. Es un
tipo que es abstracto y superior jerárquico de los cuatro anteriores.
 Tuple{id1:T1,..., idn:Tn}: (con n>0) corresponde a las tuplas (registros/records)
con campos de nombre id1 a idn , donde cada uno de ellos debe tener
asociada una expresión de tipo T1 a Tn respectivamente.
2. No predefinidos
Corresponden a cada clase y enumerado del diagrama de clases. Toda clase o
enumerado C se mapeará al tipo asociado TC de OCL.
En OCL cada atributo de una clase, al aplicarse a una expresión del tipo asociado a la
clase, retorna una expresión que también tendrá un tipo asociado. Con esto, decimos,
que todo atributo tiene también un tipo asociado. Esto ya se dijo en la definición de
atributos derivados, cuando se expresó que éstos retornan una expresión de un tipo
resultante especificado. Con esto, decimos que todo atributo atrib tiene asociado en
OCL el tipo de dato Tatrib. Este tipo no es necesariamente nuevo (como en el caso de
los provenientes de clases o enumerados). Al no definir un tipo necesariamente nuevo,
en este apunte diremos que el tipo retornado es T.
Si utilizamos el diagrama de clases dentro del contexto del diseño, seguramente cada
atributo de cada clase tendrá su tipo de datos asociado en forma explícita en la misma
clase del diagrama, y con esto se puede mapear al tipo correspondiente de OCL. El
problema que existe en el diagrama de clases del modelo conceptual es que en las
clases conceptuales no se especifican tipos de datos. Esto sugiere la idea de
existencia de dominios –como abstracciones respecto a los tipos- (los atributos de las
clases conceptuales retornan un objeto de un dominio, en lugar de una expresiónobjeto de un tipo de datos). En este caso hay que realizar un mapeo implícito de los
dominios de los atributos a tipos básicos de OCL para poder expresar condiciones en
OCL que se apliquen sobre los valores retornados por estos atributos.
7
CONCLUSIONES

La combinación de UML y OCL mejorará definitivamente el proceso de
desarrollo software e incrementará la calidad del software desarrollado.

OCL sólo puede procesar funciones recursivas primitivas y no cualquier función
recursiva. En otras palabras, OCL no es equivalente a la máquina de Turing.

OCL hace práctica la construcción de modelos más formales. De esta forma es
más fácil encontrar los errores en fases más tempranas del proyecto.
Fijándolos durante el modelaje es más barato que al final del código.

OCL es un producto de la familia UML, concebido con la idea de ser fácil de
escribir y leer para alguien familiarizado con este entorno. Por tanto, una de las
grandes ventajas de OCL es que el usuario no necesitará tener fuertes
conocimientos matemáticos o lógicos para poder escribir restricciones.
8
REFERENCIAS
[1] http://www-2.dc.uba.ar/materias/isoft1/is1-2005_2/apuntes/OCL.pdf
[2] http://ing.de.soft1.googlepages.com/OCL.pdf
[3] http://www.dsic.upv.es/asignaturas/facultad/lsi/trabajos/132000.doc
9
Descargar