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.
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.
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.
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.
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:
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.
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.
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 |
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.
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.
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.
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 |
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.
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 |
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 |
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 |
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.
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 |
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
.
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.
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.
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.
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.
Las siguientes construcciones de CORBA no tienen actualmente una correlación en este perfil:
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.
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.
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. |