Transformación de UML en CORBA

La transformación de UML en CORBA transforma los elementos de modelo del Lenguaje unificado de modelado (UML), versión 2.0 en Lenguaje de definición de interfaz (IDL) de Common Object Request Broker Architecture (CORBA). Puede utilizar la transformación para generar un proyecto CORBA a partir de las especificaciones de UML 2.0. La transformación también proporciona un perfil opcional, ligero, que se puede utilizar para diseñar y generar la mayoría de los elementos de CORBA.


1. Cómo empezar

Antes de utilizar la transformación de UML en CORBA, debe familiarizarse con la creación y edición de proyectos y modelos UML 2.0. En el procedimiento siguiente se muestra la utilización más básica de la transformación CORBA.

Para transformar un modelo UML en CORBA:

 

1.    Asegúrese de que está en la perspectiva Modelado.

2.    En la vista Explorador de modelos, cree un componente de UML, denominado "Componente1" y, dentro del componente, cree una interfaz, denominada "Interfaz1".

3.    Pulse el botón derecho del ratón sobre el componente y, a continuación, pulse Transformar > Ejecutar transformación > UML 2 CORBA.

4.    En la ventana Ejecutar transformación, pulse Crear contenedor de destino.

5.       En la ventana Nuevo proyecto, especifique Ejemplo como nombre del proyecto y pulse Finalizar.

 

El nuevo proyecto contiene un archivo de IDL denominado "Componente1.idl", que contiene una interfaz definida, denominada Interfaz1.

La transformación también puede realizar otras funciones, más complejas, como, por ejemplo, alterar temporalmente los nombres sin modificar el modelo de origen, validar el modelo UML para comprobar si existen problemas de transformación potenciales, etc.

 

2. Detalles sobre la transformación

 

2.1 Modelo de plantilla CORBA

El modelo de plantilla CORBA le puede ayudar a iniciar el modelado con CORBA rápidamente. Para empezar, pulse Archivo > Nuevo > Modelo y seleccione Modelo CORBA entre las plantillas disponibles. Esta selección genera un modelo UML y proporciona instrucciones y una infraestructura básica para crear un modelo CORBA.

 

2.2 Origen de la transformación

Puede especificar un modelo, un componente y un paquete de UML que contenga componentes, o una combinación de estos elementos como el origen de cada aplicación de la transformación. La transformación genera un único archivo IDL para cada componente de UML en la jerarquía del origen especificado. Cada archivo IDL contiene código sólo para los elementos que posee el componente de UML correspondiente. La transformación omite los elementos que no son propiedad de un componente de UML. Si especifica cualquier otro elemento como origen para la transformación, esta fallará durante la validación.  

Si aplica el perfil CORBA, puede controlar los componentes de UML en el modelo para el cual genera código la transformación. Puede ejercer este control por medio del establecimiento de la propiedad generateCode en true o false. Si establece la propiedad en false, la transformación omitirá los componentes cuando genere el código.

2.3 Destino de la transformación

El destino de cada aplicación de la transformación es un único recurso de proyecto de Eclipse. El proyecto contiene el archivo o los archivos IDL que se consideran archivos de recursos del espacio de trabajo de Eclipse.

2.4 Perfil opcional

Puede diseñar los siguientes tipos de CORBA sin utilizar un perfil:

Un perfil opcional proporciona estereotipos para diseñar tipos de CORBA más específicos, como los siguientes:

2.5 Validación del modelo de origen

El perfil de transformación de CORBA define restricciones en los estereotipos. Para evaluar estas restricciones e informar acerca de los errores de un origen de modelo, puede utilizar el mandato "Ejecutar validación". La transformación en CORBA también realiza una validación adicional en la parte del cuerpo al que se aplica la transformación.

2.6 Utilización de un modelo de correlación

Puede cambiar el nombre de los elementos diseñados en el código generado si utiliza un modelo de correlación. Excepto en el caso de los componentes, sólo puede cambiar el nombre a los elementos de UML con identificadores simples. Puede cambiar el nombre de los componentes de UML con un identificador simple o con una vía de acceso parcial válida que sea relativa al contenedor de destino en el que se genera el archivo IDL. La vía de acceso debe finalizar con el nombre del archivo IDL. Por ejemplo, si cambia el nombre Componente A por dirA\A, la transformación genera A.idl en el directorio denominado dirA, en lugar de en el nivel superior del contenedor de destino.

3. Correlación de UML con CORBA

En la tabla siguiente se muestra cómo la transformación correlaciona los elementos de modelo UML 2.0 con el código CORBA IDL.

Elemento de UML 2.0

Elemento de CORBA IDL

Modelo

Nada

Componente

Archivo IDL

Tipos primitivos

Tipos básicos

Nativo

Paquete

Módulo (si el paquete está en un componente)

Omitido (si el paquete no está en un componente)

Interfaz

Interfaz

Atributo o asociación

Atributo

Operación

Operación IDL

Parámetro

Parámetro de la operación IDL

Enumeración

Enumeración

Clase <<Valor de CORBA>>

Tipo de valor

Tipo de valor Custom

Tipo de valor Boxed

Atributo estático

Constante

Clase <<Estructura de CORBA>>

Estructura

Clase <<Excepción de CORBA>>

Excepción

Clase <<CORBATypedef>>

Typedef

Matriz

Secuencia

3.1 Modelo de UML 2.0

Un modelo de UML 2.0 no se correlaciona directamente con ningún elemento de CORBA. Esta falta de correlación implica que la transformación no genera código para el elemento de modelo si no hay componentes definidos en el modelo.

3.2 Componente de UML 2.0

Un componente de UML 2.0 se correlaciona con un único archivo CORBA IDL. El archivo IDL para un componente contiene todos los elementos de CORBA que posee el componente.

3.3 Tipos primitivos de UML 2.0

Un tipo primitivo de UML 2.0 se correlaciona con un tipo básico de CORBA o un tipo nativo de CORBA. Un tipo de biblioteca de UML 2.0 que contiene todos los tipos básicos de CORBA, como los tipos primitivos de UML 2.0, está disponible para importarlo al modelo. De manera alternativa, puede crear un tipo primitivo de UML 2.0 con el mismo nombre que un tipo de básico de CORBA, existente para utilizarlo con la selección de tipos en el modelo. En la lista siguiente se muestran los tipos básicos de CORBA en el tipo de biblioteca:

Un tipo primitivo de UML 2.0 denominado de manera distinta a los tipos especificados en la lista representa un tipo nativo de CORBA. Un tipo nativo de CORBA genera la 
definición nativa en el archivo IDL y está disponible para la selección de tipos del modelo.

3.4 Paquete de UML 2.0

Un paquete de UML 2.0 contenido en un componente de UML 2.0 se correlaciona con el módulo de CORBA. La transformación omite los paquetes de UML 2.0 que no están en un 
componente de UML 2.0.

3.5 Interfaz de UML 2.0

Una interfaz de UML 2.0 se correlaciona con la interfaz de CORBA. Una generalización de UML 2.0 de las interfaces de UML 2.0 se correlaciona con la herencia de las interfaces de CORBA. En la tabla siguiente se ve cómo la transformación convierte las propiedades de la interfaz.

Propiedad de la interfaz de UML

Resultado de la transformación

Nombre

La nueva interfaz de CORBA de IDL con el nombre especificado, con todos los caracteres no permitidos eliminados

Visibilidad, público

Interfaz normal

Visibilidad, privada

Interfaz local

Abstracto

Interfaz de CORBA abstracta

Sin secundarios

Omitido

3.6 Atributos y asociaciones de UML 2.0

Los atributos y asociaciones de UML 2.0 se correlacionan con los atributos de CORBA. En la tabla siguiente se ve cómo la transformación convierte las propiedades del atributo.

Propiedad del atributo de UML

Resultado de la transformación

Nombre

Atributo de CORBA con el mismo nombre

Tipo

Atributo de CORBA con el tipo básico especificado

Valor "Es estático" y "por omisión"

Constante de CORBA

Sólo lectura

Atributo de sólo lectura de CORBA

Ordenación

Orden IDL

En la tabla siguiente se ve cómo la transformación transforma las propiedades de la asociación.

Propiedad de la asociación de UML

Resultado de la transformación

Nombre

Atributo de CORBA con el mismo nombre

Tipo

Atributo de CORBA con el tipo como proveedor de esta asociación

Valor "Es estático" y "por omisión"

Constante de CORBA

Sólo lectura

Atributo de CORBA de sólo lectura

Ordenación

Orden IDL

3.7 Operación UML 2.0

Una operación de UML 2.0 que se declara en una interfaz de UML, o en una clase UML con el estereotipo <<Valor de CORBA>>, se correlaciona directamente con la operación IDL. La transformación omite las operaciones distintas a UML 2.0. La tabla siguiente muestra cómo la transformación transforma las propiedades de la operación.

Propiedad de la operación de UML

Resultado de la transformación

Nombre

Nueva operación de CORBA con el nombre especificado

Tipo de retorno

Tipo de retorno de la operación de CORBA

Todas las propiedades restantes

Omitido

Operación con el estereotipo <<CORBAOneway>>

Operación IDL unidireccional

<<create>> estereotipo en la operación de la clase UML <<Valor de CORBA>>

Se correlaciona con una operación del inicializador del valor de CORBA

3.8 Parámetro de UML 2.0

Un parámetro de UML 2.0 se correlaciona con el parámetro de la operación IDL. En la tabla siguiente se ve cómo la transformación transforma las propiedades del parámetro.

Propiedad del parámetro de UML

Resultado de la transformación

Nombre

Nuevo parámetro con el nombre especificado

Dirección (entrada, salida, entrada/salida)

El parámetro correspondiente en IDL, 'return', se omite

Tipo

Parámetro con el tipo especificado

Visibilidad

Omitido

3.9 Enumeración de UML 2.0

Un enumeración de UML 2.0 se correlaciona con la enumeración de CORBA. Una enumeración sólo puede contener literales de enumeración.

3.10 Clase UML 2.0 con el estereotipo <<Valor de CORBA>>

Una clase UML 2.0 con el estereotipo <<Valor de CORBA>> se correlaciona con un tipo de valor de CORBA. El estereotipo <<Valor de CORBA>> se suministra con una propiedad con especificación de nombre 
y con el tipo de enumeración {"none", "custom", "boxed"}. El valor por omisión es "none". Si establece la propiedad de especificación en "custom", se correlaciona 
con un valor personalizado de CORBA. Si establece la propiedad de la especificación en "boxed", se correlaciona con un valor Boxed de CORBA.

Un tipo de valor de CORBA es una entidad que tiene un estado opcional y un método inicializador separados de las propiedades de una interfaz. Los miembros del estado de un tipo de valor de CORBA están representados por los atributos de UML 2.0 con el estereotipo <<Estado de CORBA>> y los métodos del inicializador están representados por medio de la aplicación del estereotipo <<create>> del perfil básico que se suministra con el producto.

En la tabla siguiente se ve cómo la transformación transforma las propiedades de clase.

Propiedad de la clase UML

Resultado de la transformación

Estereotipo

<<Valor de CORBA>>

Nombre

Nuevo tipo de valor con el nombre especificado.

Visibilidad

Omitido

Abstracto

Tipo de valor abstracto

Atributos con <<Estado de CORBA>> con visibilidad pública o privada

Miembro del estado de CORBA del tipo de valor de CORBA, con visibilidad pública o privada

Operación con <<create>>

Método de fábrica de CORBA del tipo de valor no abstracto

3.11 Atributo estático de UML 2.0

Una declaración constante de CORBA puede aparecer en el ámbito de un archivo IDL, un módulo, una interfaz o un tipo de valor.

Una constante de CORBA que aparece en el ámbito de una interfaz o tipo de valor se puede representar por medio del atributo estático de UML en el UML correspondiente 
interfaz o clase.

Una constante de CORBA que aparece en el ámbito de un módulo de CORBA o de un archivo IDL debe ser un atributo en una clase UML con el estereotipo 
<<Constantes de CORBA>> que aparece en el paquete de UML (para una constante de módulo) o en el componente de UML (para una constante del ámbito IDL). 
El nombre de esta clase se omite. Cada atributo de la clase con el estereotipo <<Constantes de CORBA>> representa una declaración constante
.

3.12 Clase UML 2.0 con el estereotipo <<Estructura de CORBA>>

Una clase UML 2.0 con el estereotipo <<Estructura de CORBA>> se correlaciona con una estructura de CORBA. Esta clase tiene restricciones que indican que sólo puede tener atributos, y no operaciones. Los miembros de la estructura están representados por el atributo o la asociación de UML de la clase.

3.13 Clase UML 2.0 con el estereotipo <<CORBA Exception>>

Una clase UML 2.0 con el estereotipo <<CORBA Exception>> representa una definición de la excepción. Este tipo de clase puede contener, opcionalmente, atributos.

En CORBA 2.4, sólo una operación de CORBA puede activar una excepción, un atributo de CORBA no puede hacerlo. Por lo tanto, si una operación de CORBA 
activa una excepción, se representa en la propiedad RaisedException de la operación de UML correspondiente.

3.14 Clase UML 2.0 con el estereotipo <<CORBA Typedef>>

La transformación utiliza el typedef de CORBA para dar un nuevo nombre a un tipo de CORBA existente. Una clase UML 2.0 con el estereotipo <<CORBATypedef>> 
se correlaciona con el typedef de CORBA. Una relación de sustitución de UML 2.0 desde esta clase al tipo de CORBA existente es la notación completa 
que representa el typedef de CORBA.

La especificación de CORBA 2.4 deja de utilizar la declaración anónima de un tipo de secuencia y matriz de CORBA. Esta correlación no da soporte a las matrices o secuencias 
de CORBA anónimas. Debe poner un nombre a la matriz o al tipo de secuencia por medio de la declaración typedef. El estereotipo <<CORBATypedef>> que se amplía a 
la clase UML 2.0 contiene un propiedad de especificación (cuyos valores son "none", "array" y "sequence", con "none" como valor por omisión) y una 
propiedad de dimensiones (cuyo valor por omisión está vacío) que contiene las dimensiones de la secuencia o de la matriz.

Una matriz de CORBA está diseñada como una relación de sustitución de UML 2.0 desde una clase con el estereotipo <<CORBATypedef>> al elemento de UML que 
represente el tipo de un elemento de matriz. La propiedad "specification" del estereotipo se establece en "array" y la propiedad "dimensions" se establece en la cadena de caracteres que  
representa las dimensiones de matriz (por ejemplo, "[3][5]"). Una asociación de un tipo construido con la clase con los modelos de estereotipo <<CORBATypedef>> 
como miembros del tipo construido con el tipo como matriz CORBA.

Una secuencia de CORBA está diseñada como un relación de sustitución de UML 2.0 desde una clase con el estereotipo <<CORBATypedef>> con el elemento de UML que 
representa el tipo del elemento de secuencia. La propiedad "specification" del estereotipo se establece en "sequence" y, opcionalmente, la propiedad "dimensions" 
se establece en el valor de la cadena de caracteres que representa el límite superior de la secuencia (por ejemplo, "12"). 
Una asociación de un tipo construido a la clase con los modelos de estereotipo <<CORBATypedef>> como miembros en el tipo construido con el tipo como secuencia de CORBA.

4. Inclusiones y declaraciones de reenvío de CORBA

La transformación genera automáticamente las declaraciones de reenvío de CORBA. No puede diseñarlas. La transformación reordena los tipos en IDL para minimizar las declaraciones de reenvío. Cuando se utiliza un tipo antes de su definición y la definición del tipo no se puede desplazar antes de su uso, la transformación genera una declaración de reenvío 
del tipo en el ámbito correcto.

La transformación genera automáticamente una inclusión #include cuando se utiliza un tipo cuya definición aparece en un componente distinto. La mayoría de los archivos IDL de CORBA 
tienen que incluir el archivo ORB.idl. Si necesita imponer una inclusión #include en un archivo IDL generado de otro archivo IDL externo que no está diseñado, debe 
crear una dependencia desde el componente actual a un componente recién creado que representa el archivo IDL externo. Puede evitar la generación de código 
para el componente que se acaba de crear por medio del establecimiento de la propiedad generateCode en false. Esta propiedad se proporciona con el estereotipo del componente del  
perfil de CORBA. Por ejemplo, para generar una inclusión "#include <ORB.idl>" en un archivo IDL, debe crear una dependencia desde el componente que diseña 
el archivo IDL actual en un nuevo componente denominado ORB. Asimismo, para evitar que la transformación genere código desde el nuevo componente denominado ORB, 
establezca su propiedad generateCode en false.

5. Referencias de modelos cruzados

La transformación de UML en CORBA da soporte a los modelos con referencias cruzadas. Por ejemplo, la interfaz A del modelo actual puede ampliar la interfaz B desde 
otro modelo. En estos casos, la transformación crea una inclusión #include del archivo IDL en el que aparece el tipo utilizado (Interfaz B, en este ejemplo). 
La transformación no gestiona la ubicación de los archivos IDL incluidos en el sistema de archivos. Debe mantener las vías de acceso relativas de los archivos IDL generados 
por medio de un modelo de correlación.

 

6. Construcciones de CORBA no correlacionadas

Las siguientes construcciones de CORBA no tienen actualmente una correlación en este perfil:

7. Soporte a las tecnologías de transformación comunes

 

7.1 Integración con el soporte a equipos

La transformación de CORBA proporciona integración con el soporte a equipos, de manera que los usuarios puedan realizar una comprobación automáticamente y añadir nuevos archivos a los sistemas de control de origen.

7.2 Modelo de correlación de transformación

Si no desea modificar un modelo de origen para una transformación, puede especificar nombres alternativos para los elementos de destino de la transformación.  
También es posible que desee especificar nombres alternativos si desea incluir detalles específicos de CORBA en modelos independientes de la plataforma, como las restricciones 
de nombre. Para dar soporte a los nombres de destino alternativos sin modificar el modelo de origen, cree una correlación de modelos.

Para crear un modelo de correlación:

1. Asegúrese de que está en la perspectiva Modelado.
2. En la vista Explorador de modelos, pulse sobre un modelo UML.
3. En la barra de menús, pulse Modelado > Transformaciones > Configurar transformaciones.
4. Cree una nueva transformación de UML 2.0 en CORBA (por ejemplo, denomine la transformación
Crear correlación ).
5. En la página de correlación, pulse en Crear sólo modelo de correlación (no transformación).
6. Especifique un nombre de archivo y pulse Ejecutar.

 

Si utiliza la característica de la correlación de transformación, la transformación CORBA crea un modelo de correlación, que es un modelo separado con un artefacto para cada elemento transformable. El artefacto hace referencia al elemento transformable original y tiene el mismo nombre. Para especificar un nombre alternativo para el elemento original, 
escriba un nombre nuevo en la propiedad del nombre de archivo del artefacto. Si no cambia la propiedad de nombre de archivo del artefacto, la transformación genera el elemento con el 
nombre por omisión del artefacto. La tabla siguiente muestra ejemplos de nombres alternativos.

 

Origen de UML

Nombre de archivo del artefacto de correlación

CORBA generado

Componente1

"" 

Archivo Component1.idl

Componente2

"myIDL"

Archivo myIDL.idl

Componente3

"myDir\myIDL2"

Archivo myIDL2.idl de la carpeta "myDir" .


Para utilizar un modelo de correlación:

1. Asegúrese de que está en la perspectiva Modelado.
2. En la vista Explorador de modelos, pulse sobre un modelo UML.
3. En la barra de menús, pulse Modelado > Transformaciones > Configurar transformaciones.
4. Cree una nueva transformación de UML 2.0 en CORBA (por ejemplo, denomine la transformación
Utilizar correlación ).
5. En la página de correlación, pulse en Utilizar modelo de correlación.
6. Pulse sobre el modelo de correlación que ha creado antes y pulse en Ejecutar.


Cuando se ejecuta la transformación, ésta utiliza los nombres alternativos que se hayan especificado en el modelo de correlación.

7.3 Validación

El plug-in de transformación en CORBA proporciona funcionalidad para validar modelos para descubrir posibles problemas de transformación. Por ejemplo, las relaciones de generalización circulares y los conflictos de nombres provocan errores de compilación en el archivo IDL generado. Para ver una lista de problemas potenciales que se pueden producir en el código 
generado, aplique el perfil al modelo de origen y ejecute la característica de validación.

En la tabla siguiente se muestran algunos de los posibles problemas de transformación.

Categoría

Posibles problemas de transformación

Estereotipo Valor de CORBA

Un tipo de valor no debe tener clasificadores anidados distintos a typedef, estructura, excepción o enumeración.

Un tipo de valor debe tener miembros con nombres exclusivos.

Un tipo de valor debe tener atributos de herencia exclusivos.

Un tipo de valor debe tener operaciones de herencia exclusivas.

Un tipo de valor puede dar soporte a un máximo de una interfaz no abstracta.

Un tipo de valor abstracto sólo debe heredar desde otros tipos de valor abstractos.

Un tipo de valor no debe heredar de la misma clase más de una vez.

Un tipo de valor con miembros de estado sólo puede heredar desde un tipo de valor con miembros de estado.

Un tipo de valor abstracto no puede tener miembros de estado y no puede ser un tipo de valor boxed.

Un tipo de valor boxed no puede participar en la herencia.

Un tipo de valor boxed debe tener exactamente una asociación o atributo.

Estereotipo Constantes de CORBA

 

La clase Constantes de CORBA no debe tener operaciones.

La clase Constantes de CORBA no debe tener clasificadores anidados.

La clase Constantes de CORBA debe tener miembros con nombres exclusivos.

Estereotipo Excepción de CORBA

La clase Excepción de CORBA no debe tener clasificadores anidados.

Estereotipo Estructura de CORBA

Una estructura no debe ser propietaria de las relaciones de generalización o implementación.

Una estructura no debe tener ningún clasificador anidado.

Una estructura no debe tener operaciones.

Estereotipo CORBATypedef

Una typedef no debe tener ninguna relación de generalización.

Una typedef debe tener una relación de sustitución.

Una typedef no debe tener asociaciones, atributos ni operaciones.

Una typedef no debe tener clasificadores anidados.

Estereotipo Estado de CORBA

Un atributo de miembro de estado debe tener una clase de tipo de valor como propietaria.

Estereotipo CORBAOneway

Una operación unidireccional no debe tener parámetros con el tipo entrada o entrada/salida.

Una operación unidireccional debe tener un tipo de retorno de vacío.

Una operación unidireccional debe tener una interfaz como propietaria.

Una operación unidireccional no debe provocar excepciones.

Enumeración

Una enumeración no debe tener literales de enumeración con nombres exclusivos.

Componente

Un componente no debe contener un componente anidado.

Todos los paquetes del componente deben tener nombres exclusivos.

Interfaz

Una interfaz debe tener miembros con nombres exclusivos.

Una interfaz no debe contener un componente, un paquete, un tipo de valor o una interfaz anidados.

Una interfaz sin restricciones no puede heredar de una interfaz local.

Una interfaz debe tener operaciones heredadas exclusivas.

Una interfaz debe tener atributos heredados exclusivos.

Una interfaz no puede heredar de la misma interfaz más de una vez.

Una interfaz abstracta sólo puede heredar desde otras interfaces abstractas.

General

Un modelo no debe tener elementos denominados con palabras claves de CORBA (por ejemplo, paquetes, clases, interfaces, operaciones, propiedades, parámetros, y enumeraciones).

Un modelo no debe tener clases o interfaces con relaciones de generalización o implementación.

Un modelo no debe tener nombres de elemento duplicados.

Un modelo no debe tener ninguna jerarquía mal formateada, como una que contenga un componente anidado.