Un estudio comparativo de la expresividad de relaciones entre

Anuncio
Un estudio comparativo de la expresividad
de relaciones entre clases en OO-Method y UML
Emilio Insfrán✝, Vicente Pelechano✝, Jaime Gómez✝✝, Oscar Pastor✝
✝
Departament de Sistemes Informàtics i Computació
Universitat Politècnica de València
Camí de Vera, S/N, 46071 València
Tel: 96-3877350; Fax: 96-3877359
✝✝
Departamento de Lenguajes y Sistemas Informáticos
Universidad de Alicante
Carretera San Vicente s/n
03690 San Vicente del Raspeig - Alicante - España
[email protected]
Resumen
En la fase de modelización conceptual, y desde el punto de vista estructural, un
problema importante con el que un analista se encuentra es el determinar correctamente las
relaciones existentes entre las diferentes clases que ha identificado para el sistema en
desarrollo. Una vez superado el problema epistemológico de que si una clase está asociada o
está compuesta de otra clase, el problema que surge es definir precisamente qué quiere decir
estar asociado con y los matices que se puedan definir para esa asociación. En este trabajo
presentamos una comparativa de las expresividades para describir las relaciones existentes
entre clases en OO-Method, como método basado en un modelo formal que subyace a
modelos gráficos convencionales, y en UML, recientemente adoptado como estándar
notacional para la modelización de sistemas. No se trata de una mera comparación de las
relaciones entre clases entre dos propuestas OO, porque OO-Method es un método original
de producción de software cuya notación pretende ser compatible con la propuesta por UML.
Este trabajo fija las bases para que pueda ser visto así, detectando las diferencias para abordar
su integración.
1. Introducción
La mayoría de los métodos y notaciones orientados a objetos para el desarrollo de
aplicaciones (OMT [Rum91], Booch [Boo94], UML[BRJ97]), tienen muy poco rigor y se
definen en base a la experiencia acumulada antes que empleando técnicas formales para la
especificación de los elementos que se utilizan en el modelado de los sistemas de
información. Aun así, mucha gente los utiliza y los considera útiles.
El metamodelado es una técnica para modelar modelos. En este contexto, los
metamodelos ayudan a aumentar el rigor de los métodos sin sacrificar su utilidad, y aunque
probablemente sean los diseñadores e implementadores de herramientas CASE los que más
utilicen esta técnica, también es muy útil para que los analistas puedan conocer mejor el
modelo subyacente a la técnica de modelado que utilizan. Esto ayuda al analista a medir la
potencia expresiva de la técnica de modelado utilizada, a detectar ambigüedades y a
compararla con otras técnicas.
UML es el sucesor de técnicas de Análisis y Diseño OO que aparecieron a finales de
los años ‘80 y los ’90, y es presentado como la unificación directa de los métodos de Booch,
Rumbaugh (OMT) y Jacobson. UML ha sido aprobado por el Object Management Group
(OMG) como estándar notacional para el modelado conceptual orientado a objetos. En su
estado actual está constituido por una notación y un metamodelo [BRJ97], que aunque no se
encuentra totalmente definido, se centra principalmente en describir aspectos gráficos.
Este trabajo ha sido parcialmente financiado por la “Comisión Interministerial de Ciencia y Tecnología”
(CICYT) a través del proyecto con referencia TIC 97-0593-C05-01.
OO-Method [Pas96, Pas97-2] es una metodología de producción automática de
software basada en OASIS [Pas97-1], un lenguaje de especificación formal y orientado a
objetos, y en el uso de modelos gráficos similares a los empleados por metodologías
convencionales (OMT, Booch...). Esta propuesta proporciona un marco formal bien definido
que nos permite construir modelos conceptuales de gran expresividad y desarrollar
aplicaciones robustas, aprovechando las buenas propiedades de ambas aproximaciones
(formales y convencionales). En OO-Method, la información recogida del sistema de
información, durante la fase de modelado conceptual, se realiza por medio de una serie de
modelos gráficos que están orientados a completar una especificación formal en OASIS, pero
ocultando los aspectos sintácticos que requiere una especificación de esta naturaleza1.
En este artículo se presenta un estudio comparativo de la expresividad de las
relaciones entre clases de UML y OO-Method. La comparativa se realiza además utilizando la
técnica del metamodelado para presentar con más rigor los conceptos que se analizan. El
artículo está estructurado de la siguiente forma: en primer lugar se presentan los tipos de
relaciones entre clases de OO-Method y sus características esenciales, basándonos en el
metamodelo de OO-Method [PIP98]; en el siguiente punto se presentan las características
esenciales de las relaciones entre clases de UML con su respectivo metamodelo. En la cuarta
sección se realiza un estudio comparativo, a nivel de las relaciones entre clases, resaltando las
características comunes de ambas técnicas, explicando cómo se pueden representar ciertos
conceptos que no se representan directamente en una u otra notación, y se hace un
planteamiento crítico de las características que se consideran ambiguas, poco expresivas o
redundantes. Para terminar se propondrán líneas de trabajo futuro para construir un método
OO-Method UML “compliant” más potente y expresiva.
2. Relaciones entre clases en OO-Method
Una de las aportaciones interesantes de la simbiosis OO-Method/OASIS es la
semántica sumamente expresiva de los modelos gráficos utilizados, y en particular a las
relaciones entre clases. A continuación, vamos a presentar, apoyándonos en el metamodelo
OO-Method con notación UML, las características esenciales de estas relaciones.
Las relaciones estructurales
entre clases pueden ser de
agregación (parte-de), y de
herencia (es-un). En OO-Method
otro tipo de relación es la de
agentes, que no es una relación
estructural, pero que posee una
semántica muy interesante por
representar el aspecto cliente /
servidor de los objetos del sistema.
En OO-Method llamamos
clases complejas a aquellas que se
construyen a partir de otras
Figura 1. Relaciones entre clases en OO-Method
mediante relaciones de agregación
y/o herencia. Una caracterización del concepto de clase compleja a través del metamodelo de
la Figura 1 es: una clase es compleja si tiene al menos una relación estructural con otras clases
1
Los modelos gráficos de OO-Method son vistos como una una abstracción sobre los aspectos formales
del modelo de objetos subyacente utilizando notaciones convencionales.
2
(o consigo misma en el caso de agregaciones recursivas), en caso contrario se trata de una
clase elemental. Ese tiene se representa en la Figura 1 como el rol relacion_cons de la
agregación se construye, tomando como origen clase y como destino relación.
Tipo=count(relacion_cons) denota el número de relaciones definidas para una clase dada. Por
eso, si es mayor que cero la clase es compleja. Además, cualquier clase OO-Method
(compleja o elemental) puede participar en diversas relaciones como clase base de una
especialización o generalización, o como clase componente de una agregación.
También es importante señalar que la especificación de una clase en OO-Method no
acaba indicando atributos, servicios y relaciones entre clases, sino que se tiene una plantilla de
definición de clases [Pas97-1] que recoge información sobre restricciones de integridad,
actividad interna, ciclos de vida, interacción, etc.
2.1. Agregación
Desde las primeras propuestas de Modelado Semántico de Datos hasta los más
modernos lenguajes de especificación OO, la definición de agregación varía en función de los
criterios tenidos en cuenta a la hora de fijar el significado de ‘poner juntos’ objetos en un
objeto compuesto. En OO-Method la agregación puede verse desde varios puntos de vista,
dependiendo de qué características del objeto componente se consideren relevantes con
respecto al objeto compuesto, por lo que caracterizamos los diferentes tipos de agregación de
acuerdo con las siguientes dimensiones:
1. Disjunta o no disjunta: ¿puede un objeto componente de un objeto compuesto ser
compartido por varios objetos compuestos (por diferentes instancias de la misma clase
agregada)? Dependiendo si la respuesta es positiva o negativa hablaremos de agregación
no disjunta o disjunta respectivamente.
2. Flexible o estricta: ¿puede un objeto componente existir sin pertenecer a ninguna
agregación? o ¿la existencia de un objeto componente se entiende sólo como
componente de un objeto compuesto? En el primer caso, tenemos una agregación
flexible; en el segundo, una estricta.
3. Univaluada o multivaluada: dependiendo del número de objetos componentes
asociados a un objeto compuesto dado, distinguiremos entre agregación univaluada
(sólo uno) y multivaluada (tantos como se especifique).
4. Null o Not Null: si el objeto compuesto puede no tener componente en un momento
dado, tenemos una agregación que permite valores nulos (null); si no, tenemos una que
no los permite (not null).
5. Estática o Dinámica: ¿tiene la agregación una composición fija una vez ha sido creada
o, por otra parte, su composición cambia con el tiempo debido a la ocurrencia de
servicios de inserción y borrado para añadir y eliminar componentes?. En el primer
caso, estamos hablando de una agregación estática y en el segundo, la agregación es
dinámica. Un caso particular de agregación dinámica es la asociación (se le suele
llamar clase derivada en otros métodos) que se utiliza para manipular colecciones de
objetos como una nueva clase agregada, y posee una propiedad importante:
•
la posibilidad de definir una condición de "agrupación" (group_by) y una
condición de "selección" (where) que deben cumplir los objetos de esta clase.
6. Inclusiva o Relacional: dependiendo del tipo de ligadura o relación entre compuesto y
componente distinguiremos entre agregación inclusiva y relacional o referencial.
3
•
La agregación inclusiva es aquella que verifica que sus componentes no pueden
existir fuera del objeto compuesto. Su principal característica es que cualquier
objeto componente está completamente encapsulado en la agregación, en el sentido
de que su estado sólo puede ser alterado por eventos locales, adecuadamente
coordinados con los eventos proporcionados por la interfaz de la agregación. En
consecuencia, si tenemos una agregación inclusiva, los objetos componentes sólo
podrán ser accedidos a través del objeto compuesto.
•
La agregación relacional difiere de la inclusiva por el hecho de que sólo
denotamos una relación entre los objetos de las clases participantes, sin tener una
inclusión completa de los objetos componentes en el objeto compuesto. Los
objetos componentes no están encapsulados en el objeto compuesto y su
comportamiento es independiente del comportamiento del padre.
Además de las categorías anteriores, en OO-Method se le puede asociar un nombre a
la relación de agregación y se puede especificar el papel o rol que juega una clase agregada
y/o una clase componente en la agregación. Cada uno de los roles con los que participa una
clase en las relaciones de agregación poseen una cardinalidad mínima y máxima. La cuatro
primeras dimensiones presentadas las podremos obtener de automáticamente a partir de dicha
cardinalidad.
•
De componente a compuesto:
Máx.: N → no disjunta / 1 → disjunta
Mín.: 1 → estricta/ 0 → flexible
•
De compuesto a componente:
Máx.: N → multivaluada / 1→ univaluada
Mín.a: → 1 not null / 0 → null.
También se puede especificar si
una
clase
componente
tiene
dependencia de identificación de la
compuesta o viceversa, es decir, si el
identificador de la componente se
construye utilizando el identificador de
la compuesta o viceversa. Por ejemplo
en el caso de las clases provincia y
ciudad, teniendo ciudad dependencia de
identificación
de
provincia,
la
Figura 2. Agregación en OO-Method
identificación de la ciudad estaría
compuesta por la identificación de la provincia relacionada más el identificador propio de la
ciudad.
2.2. Herencia
Las relaciones de herencia en OO-Method son la especialización y generalización.
• especialización, para tratar la herencia descendente o derivación de clases hijas a partir
de una clase padre.
• generalización, que es la inversa a la anterior y se utiliza para tratar la herencia
ascendente o generación de clases (padre) a partir de propiedades comunes de clases
definidas (hijas) con anterioridad.
La especialización a su vez puede ser temporal o permanente:
4
• temporal o rol: un objeto ‘jugará
el papel’ correspondiente a la
clase especializada cuando ocurra
un evento de creación del rol o
portador (que se definirá en la
signatura de eventos de la clase
padre) o cuando se cumpla una
condición de especialización
sobre atributos variables de la
clase padre. El objeto dejará el rol
cuando
ocurra
un
evento
liberador o deje de cumplirse la
condición de especialización.
Cuando un objeto deja de
desempeñar el rol, el objeto sigue
su vida de acuerdo con el
comportamiento definido para la
clase padre.
• permanente o universal: cuando
Figura 3. Jerarquía de Herencia
un objeto pertenece a una clase
especializada desde el momento mismo de su creación, debido a que se cumple una
condición de especialización sobre atributos constantes de la clase padre. Esta
condición de especialización se especificará de forma obligatoria. Es importante resaltar
que el objeto será durante toda su existencia miembro de la clase especializada y de la
superclase.
La generalización puede ser disjunta si una instancia de una clase generalizada es una
instancia de una y sólo una de las clases descendientes, o no-disjunta en caso contrario.
2.3. Agentes
Por último nos quedan las relaciones de agente, que aunque no son relaciones
structurales, tienen una importancia relevante
en OO-Method para la especificación
completa de la relación entre clases del
sistema.
Un objeto en su visión general puede
verse como una cápsula con estados y
servicios que ofrece a la sociedad de objetos,
esta es su faceta servidora. En una visión
complementaria un objeto también puede ser
cliente de los servicios ofrecidos por otros
objetos del sistema. En OO-Method esta
relación cliente/servidor es la relación de
agentes.
Figura 4.. Las relaciones de agente
5
3. Relaciones entre clases en UML
En UML el diagrama de clases describe los tipos de objetos en el sistema modelado y
los distintos tipos de relaciones estáticas entre ellos. Básicamente se distinguen dos tipos de
relaciones estáticas: asociaciones y generalizaciones.
3.1. Asociación
Las asociaciones representan relaciones entre instancias de clases. Cada asociación
tiene dos roles. Cada rol es una dirección en la relación: si C1 – está-asociado-con – C2, la
relación de C1 con C2 tiene un rol de C1 a C2 y otro de C2 a C1.
Los roles poseen un nombre (si no se indica un nombre de rol, el nombre del rol es el
nombre de la clase destino). Además un rol tiene una mutiplicidad que indica cuántos objetos
pueden participar en una relación dada (límite inferior y límite superior). Cuando el límite
superior es mayor a 1, se conoce como rol multivaluado. La convención usual es que este rol
multivaluado sea un conjunto, aunque puede aplicarse la restricción {ordered} para
considerarlo una lista (sin repeticiones), o {bag} o {ordered bag}.
Otra restricción que se puede
asociar a los roles es {frozen} y sirve
para indicar que el valor de un rol no
puede cambiar durante su tiempo de
vida (no pueden añadirse, borrarse o
modificarse enlaces entre objetos) y
{addOnly} permite que solamente se
puedan agregar nuevos enlaces entre
objetos de las clases involucradas.
Otra
propiedad
de
las
asociaciones permite especificar la
navegabilidad de la relación. La
navegabilidad indica que los objetos
de la clase podrán hacer uso de las
propiedades de los objetos de la clase
relacionada en la dirección indicada
por la navegabilidad exclusivamente.
Si la navegabilidad existe sólo en un
sentido se llama asociación unidireccional, y si existe en los dos
Figura 5. Relaciones entre clases en UML
sentidos asociación bi-direccional. La
asociación sin navegabilidad puede considerarse como bi-direccional o no-especificada. La
asociación bidireccional añade la restricción de que los dos roles son invertibles uno con otro.
Dos casos particulares de la asociación son: agregación y composición.
La agregación es la relación parte-de, que expresa un acoplamiento más fuerte entre
clases. Una de las clases actúa como compuesta y la otra como componente y por defecto
representa una relación transitiva, asimétrica y reflexiva. Este concepto de agregación es una
noción puramente lógica, completamente independiente de las opciones de representación
adoptadas.
La composición es una forma más fuerte de agregación. En la composición, el objeto
parte puede pertenecer sólo a un todo y no puede ser cambiado (cualquier borrado del todo se
6
considera un borrado en cascada de sus partes, aunque esta restricción también puede
expresarse mediante un rol con mutiplicidad 1:1).
Las asociaciones derivadas son aquellas que se calculan a partir de otras asociaciones.
Las asociaciones cualificadas, se construyen mediante un calificador que está
constituido por un atributo o conjunto de atributos cuyos valores sirven para particionar el
conjunto de objetos asociados con un objeto a través de la asociación. La asociación-or es en
realidad una restricción sobre dos o más asociaciones para especificar que un objeto de una
clase asociada con otras sólo puede participar como mucho en una de las asociaciones en las
que participa.
Las clases de asociación permiten añadir propiedades (atributos, operaciones, ...) a
asociaciones. Asociación n-aria, es una asociación entre 3 o más clases y donde cada
instancia de la asociación es una tupla de n valores de las respectivas clases. En este caso, no
puede ser agregación ni composición.
3.2. Generalización
Es la relación taxonómica entre una clase más general y otra más específica que es
totalmente consistente con la primera y que le añade información.
Una clase puede especializarse según ciertos criterios. Cada criterio de la
generalización se indica asociando un discriminador a la relación de generalización. Dicho
discriminador es el nombre de una partición de los subtipos de la superclase. Este
discriminador puede ser un atributo de la clase generalizada o el nombre de la partición. La
generalización puede aplicarse a clases o a asociaciones (aunque en este último caso es
preferible representar la asociación como una clase de asociación).
Pueden aplicarse diferentes restricciones a las relaciones de generalización para
distinguir diversas formas de generalización, en principio por defecto la generalización
simboliza una descomposición disjunta.
La restricción {disjoint} indica que las subclases descendientes de una clase A no
pueden especializarse en una subclase común (no puede existir una subclase obtenida a partir
de herencia múltiple de las subclases de A ya que estas son disjuntas entre sí).
La restricción {overlapping} indica que una subclase descendiente de las subclases de
una clase A puede heredar de más de una de las subclases de A (es lo opuesto a disjoint).
La restricción {complete} indica que la generalización está terminada y no es posible
añadir subclase; inversamente, la restricción {incomplete} designa una generalización
extensible.
Pueden representarse grupos de generalizaciones semánticamente relacionados como
árboles con un segmento compartido. Si se añade una etiqueta a este segmento compartido
(como nombre de la partición) se aplica a todo el grupo de generalización.
3.3. Dependencia y refinamiento
Además de las relaciones estructurales que hemos comentado, en UML existen dos tipos
más de relaciones: la dependencia y el refinamiento.
La relación de dependencia es una conexión semántica entre dos elementos del modelo,
uno dependiente y otro independiente. Particularmente respecto a las relaciones entre clases,
indica que la clase dependiente utiliza métodos o propiedades de la clase independiente.
Mediante la utilización de estereotipos se definen los tipos de dependencias. UML usa el
7
concepto de estereotipo como un mecanismo general de extensión del modelo,
particularizando determinados aspectos que quedan recogidos en el estereotipo introducido, y
que a partir de ese momento se convierten en un componente más del modelo.
Una relación de refinamiento es una relación entre dos descripciones de una misma cosa
pero a diferente nivel de abstracción, por ejemplo entre clases cuando se construyen modelos
de análisis y estos se refinan en modelos de diseño, en estas situaciones es interesante enlazar
las clases de análisis con sus correspondientes clases en el diseño.
4. OO-Method vs. UML. Un estudio comparativo a nivel de
relaciones entre clases
En esta sección describiremos qué características comunes y diferencias se encuentran
entre UML y OO-Method referentes a la semántica de las relaciones entre clases.
4.1. Características similares
4.1.1. Asociación - Agregación
En UML una asociación es una conexión entre dos o más objetos. Dependiendo de la
semántica asociada a dicha conexión, puede clasificarse nuevamente en: asociación (en el
caso general), agregación (caso específico de la relación parte-de de los modelos semánticos)
y composición (una agregación donde la relación existente entre los objetos involucrados es
más fuerte).
En el caso de OO-Method esta relación entre objetos es llamada en general
agregación. Se definen dos dimensiones principales que determinan el grado de interrelación
entre los objetos involucrados: referencial (el objeto compuesto está asociado con el objeto
componente, y la vida de los objetos participantes son independientes entre sí) e inclusiva (el
objeto compuesto encapsula y está compuesto por el objeto componente).
La composición de UML se corresponde directamente en OO-Method con la
agregación inclusiva con las propiedades de disjunta y estricta (cardinalidad de componente a
compuesto 1:1).
La clase de asociación de UML se corresponde en OO-Method con una clase
compleja por agregación relacional teniendo por componentes las dos clases asociadas por la
relación de asociación en el modelo UML.
Una asociación n-aria de UML es en OO-Method una nueva clase compleja por
agregación relacional, teniendo por componentes las clases que participan en la asociación naria. Si la relación n-aria tuviese una clase de asociación relacionada, en este caso no existe
en OO-Method la nueva clase compleja y es esta misma clase de asociación la que tiene
como componentes a los integrantes de la relación n-aria.
La navegabilidad en asociaciones UML puede ser unidireccional o bidireccional. Si no
se especifica explícitamente puede considerarse que es aun desconocida o bidireccional. En
OO-Method la navegabilidad en la agregación es bidireccional.
En la Tabla 4.1 se muestran las correspondencias respectivas de las dos
aproximaciones comparadas.
8
Otro aspecto a resaltar en UML es la posibilidad de definir reglas (usualmente en
OCL2) que describen restricciones sobre la semántica de ciertos elementos del modelo, en
particular en la Tabla 4.2 se muestran algunas de estas reglas predefinidas para la asociación.
y su correspondencia en OO-Method.
UML
Asociación
Agregación
Composición
Multiplicidad
Rol
Clase de asociación
Asociación n-aria
Navegabilidad
(unidireccional o bidireccional)
OO-Method
Agregación Relacional
Agregación Inclusiva
Agregación inclusiva, disjunta y
estricta
Cardinalidad
Rol de Agregación
Clase compleja por Agregación
Relacional
Clase compleja por Agregación
Relacional
Bidireccional
Tabla 1
Las restricciones {ordered3, bag4, ...} y otras de este tipo, son restricciones sobre el
almacenamiento y manipulación de la población de objetos relacionados. En OO-Method
estas restricciones se especifican mediante propiedades de la propia agregación {list, stack,
...}que hacen referencia a la forma en que se almacenan los componentes, y dependiendo del
tipo de almacenamiento elegido se dispone de los operadores correspondientes para su
manipulación.
Las restricciones {or} y {subset} de UML para asociaciones excluyentes y
asociaciones que deben ser un subconjunto de otra, respectivamente, en OO-Method se
pueden especificar como una restricciones de integridad estáticas (en la plantilla de definición
de clases) sobre la población de los objetos que participan en la relación.
La restricción frozen de UML se corresponde con la propiedad estática de la
agregación en OO-Method, y la restricción addOnly se corresponde a la agregación dinámica
cuando sólo se han especificado servicios de inserción.
Restricciones UML
{ordered}
{bag}
{or}
{subset}
{frozen}
{addOnly}
OO-Method
Propiedad de la agregación
Propiedad de la agregación
Restricción estática
Restricción estática
Agregación estática
Agregación Dinámica
(sólo servicios de inserción)
Tabla 2
2
OCL es el acrónimo de Object Constraint Language.
3
Orderered (ordenado), indica que el conjunto de objetos relacionados se conservan un cierto orden de
acuerdo a un criterio específico (mayor a menor, tiempo de inserción en la relación, etc).
4
Bag (bolsa) indica que pueden incluirse objetos relacionados duplicados.
9
4.1.2. Herencia - Generalización.
UML utiliza un único concepto (generalización) para tratar la herencia en forma
amplia como la relación entre una clase más general y otra más específica. En OO-Method se
categoriza la herencia de acuerdo a su naturaleza, y puede ser la herencia descendente o
especialización o la herencia ascendente o generalización.
La especialización en OO-Method se distingue nuevamente en dos tipos: la
permanente y la temporal. En UML (versión 1.1) no se distingue explícitamente esta
clasificación, se entiende en general permanente5. Siempre existe la posibilidad de definir un
estereotipo para dar cuenta de ese tipo de especialización, pero no se trata de un concepto
claramente definido en la semántica básica de la herencia en UML.
La falta de precisión asociada a la semántica de UML con respecto a la generalización
impide en cierto modo poder realizar una correspondencia clara entre conceptos UML y OOMethod, por lo que nos restringiremos a mostrar ciertas equivalencias.
Dada una relación de generalización entre dos clases6 en UML, el discriminador
proporciona un criterio para particionar los subtipos (subclases) de la superclase. Este
discriminador puede ser un atributo de la clase generalizada o el nombre de la partición; en
OO-Method se pueden definir particiones mediante condiciones de especialización sobre
atributos de la superclase. Si esta condición de especialización se establece únicamente sobre
atributos constantes de la superclase se refiere a una especialización permanente, y en caso
contrario se refiere a una especialización temporal.
En principio, la generalización en UML simboliza una descomposición disjunta
[Mull97], aunque con restricciones es posible indicar exactamente el tipo de descomposición
deseada.
La restricción {disjoint} aplicada a la generalización de UML establece que dado un
conjunto de subclases de una superclase A, una instancia de la superclase A sólo puede
especializarse en una (y sólo una) de las subclases de A. En OO-Method esta propiedad se
representa dependiendo del tipo de herencia deseado. Si se trata de una herencia ascendente se
especificará como una generalización disjunta; y si se trata de una herencia descendente se
puede especificar como especializaciones (entre la superclase y cada una de las subclases)
asegurando que las condiciones de especialización sean mutuamente excluyentes entre las
subclases de participantes.
La restricción {overlapping} sobre la generalización es conceptualmente opuesta a la
restricción {disjoint} en UML. En OO-Method, su representación será la generalización no
disjunta (si se trata de una herencia ascendente) o condiciones de especialización no disjuntas
entre sí (si se trata de una herencia descendente).
Las dos restricciones previas {overlapping} y {disjoint} tienen una equivalencia con la
especialización temporal por evento de OO-Method, y deben ser especificadas a nivel del
comportamiento de la superclase definiendo las secuencias válidas de eventos que aseguren la
existencia o no de instancias de las subclases definidas.
5 UML trata la semántica asociada a la generalización muy superficialmente, por ejemplo qué
propiedades se heredan y cómo, qué puede sobreescribirse, ...
6
En UML también es posible definir un árbol de generalización (para herencia simple) para un conjunto
de subclases, en este caso es común que el discriminador de especialización sea común para todas las particiones
definidas.
10
4.2. Diferencias entre UML y OO-Method
En este apartado se muestran las diferencias de expresividad encontradas entre UML y
OO-Method para la especificación de relaciones entre clases.
Como se verá a continuación algunos aspectos presentes en la expresividad de los
diagramas de UML no se encuentran explícitamente en OO-Method, aunque éstos en general
representan información orientada más bien a aspectos de diseño físico o implementación que
a nociones de modelado.
4.2.1. Asociación - Agregación
La asociación calificada en UML es una asociación con un calificador. El calificador
está definido por un conjunto de atributos que pertenecen a la asociación (estos atributos no
pertenecen a la signatura de ninguna de las dos clases que participan en la asociación) y se
encuentra en un extremo de la asociación binaria. Esta asociación calificada se utiliza para
seleccionar exactamente una partición del conjunto de objetos asociados en el otro extremo de
la asociación. En OO-Method esta propiedad de la asociación no tiene una correspondencia
directa, aunque una representación conceptualmente equivalente puede especificarse mediante
una nueva clase que agregue ambas clases asociadas y que tendrá como identificación para
sus instancias, la identificación de la clase en el extremo origen de la asociación calificada
más los atributos del calificador.
Las asociaciones derivadas de UML representan información sobre relaciones ya
existentes en el modelo, se muestran sólo a efectos expresivos; en el modelo subyacente a
OO-Method esta información está disponible aunque no tiene representación gráfica.
La expresividad de la relación de agregación dinámica en OO-Method es una
diferencia importante respecto a UML ya que no solamente indica que los componentes del
objeto compuesto pueden cambiar sino también cómo. Para ello es posible definir eventos de
inserción y borrado que realizan esta tarea. Estos eventos de inserción y borrado van a ser
eventos compartidos7 entre el componente y el compuesto.
Las agregaciones multivaluadas en OO-Method tienen una propiedad interesante, que
es la posibilidad de utilizar operadores de manejo de colecciones desde el objeto compuesto
sobre el conjunto de objetos componentes, por ejemplo: count, sum,.... En OO-Method un
caso particular de agregación dinámica y mutivaluada es la asociación (también llamada
agrupación) se utiliza para el manejo de colecciones de objetos como una nueva clase
compleja agregada cuyas instancias se construirán a partir de todas aquellas instancias de la
componente que cumplan una condición definida sobre la población de la clase componente.
4.2.2. Herencia - Generalización.
En OO-Method se distingue entre generalización y especialización y, aunque estos
sean dos puntos de vista antagónicos del concepto de clasificación, expresan en qué sentido se
utiliza una jerarquía de herencia y es útil a nivel de modelado conceptual.
La especialización temporal es una forma de especialización no contemplada
explícitamente en UML. En OO-Method está tratada profundamente por considerarse muy
útil en el modelado de sistemas de información. Como característica relevante está la
posibilidad de declarar un conjunto de propiedades en una subclase que un objeto de la
7
Los eventos de inserción y borrado son eventos compartidos entre el compuesto y el componente
porque, por ejemplo, cuando el objeto compuesto inserta un componente, el objeto componente es insertado
(afecta el estado de ambos objetos en el mismo instante de tiempo).
11
superclase en un instante determinado puede adquirir como resultado de satisfacer una
condición de especialización o por la ocurrencia de un evento portador. El objeto se dice que
cumple un rol mientras la condición se mantenga o hasta que ocurra un evento liberador,
entonces deja el rol y se comporta nuevamente de acuerdo a lo especificado en la clase padre.
Una propiedad interesante está asociada con la semántica de la compatibilidad entre la
superclase y la subclase. La subclase debe tener compatibilidad de signatura [Pas97-1], a
diferencia de la herencia permanente que debe respetar la compatibilidad de comportamiento.
Para la relación de generalización en UML se definen dos restricciones sobre la
construcción del modelo como notas para el analista y son: {complete} y {incomplete}. La
restricción complete se refiere a que la jerarquía de generalización está completamente
definida a este nivel y no se espera definir nuevas subclases en un futuro. La restricción
incomplete indica que pueden definirse más subclases. En OO-Method este tipo de notas no
forman parte del modelo y no se expresan.
Una diferencia importante ente UML y OO-Method es la posibilidad en UML de tratar
grupos de particiones en los casos de subclasificación múltiple. Esto es útil para expresar
ciertas restricciones sobre grupos de particiones, por ejemplo {disjoint} o {overlapping}.
5. Conclusiones
En este trabajo hemos presentado una comparación de expresividades para las
relaciones entre clases de OO-Method y UML. Una crítica generalizada a UML es su
genericidad y falta de semántica precisa para muchos aspectos que hemos presentado, y todo
esto por su orientación a ser un estándar notacional para la modelización de cualquier tipo de
sistema orientado a objetos. Sin embargo esto tiene su lado provechoso, puede ser adoptado
con cierta facilidad a modelos suficientemente formales y semánticamente ricos. Este es el
caso de OO-Method que tiene su propia notación gráfica. Una línea de trabajo de nuestro
grupo de investigación es la adopción de esta notación estándar para la construcción de
modelos conceptuales, basados en el modelo de objetos OASIS, en el mismo marco nuestro
método OO-Method.
6. Bibliografía
[Boo94] Booch G. OO Analysis and Design with Applications. Addison-Wesley, 1994.
[BRJ97] Booch G., Rumbaugh J., Jacobson I. UML. v1.1 Rational Software Co., 1997.
[Jac92] Jacobson I., Christerson M., Jonsson P., Overgaard G. OO Software Engineering , A Use Case Driven
Approach. Reading, Massachusetts. Addison –Wesley, 1992.
[Let96] Letelier, P.; Ramos, I. Un MetaModelo Estático para Especificaciones OASIS y su Implementación en
una Base de Datos Relacional, DSIC-II/19/96, Universidad Politécnica de Valencia, 1996.
[Pas96] Pastor O., Pelechano V., Bonet B., Ramos I. OO-Method 2.0 : una metodología de Análisis y Diseño
Orientada a Objetos. Informe técnico, DSIC-UPV, 1996.
[Pas97-1] Pastor, O.; Ramos, I. Oasis 2.2: A Class-Definition Language to Model Information Systems Using an
Object-Oriented Approach, SPUPV-95.788, Universitat Politècnica de València. 1997.
[Pas97-2] Pastor, O.; Insfrán, E.; Pelechano, V.; Romero, J.; Merseguer, J. OO-METHOD: An OO Software
Production Environment Combining Conventional and Formal Methods. Conference on Advanced
Information Systems Engineering (CAiSE '97). Barcelona, Spain. June 1997.
[PIP98] Pelechano V., Insfrán E., Pastor O. El Metamodelo OO-Method y su Repositorio Relacional. Informe
técnico, DSIC-II/16/98-UPV, 1998.
[Rum91] Rumbaugh, J.; Blaha, M.; Permerlani, W.; Eddy, F.; Lorensen, W. Object Oriented Modeling and
Design. Englewood Cliffs, Nj. Prentice-Hall. 1991.
12
Descargar