< Anterior | Siguiente >

Lección 3: Crear y definir con más precisión una declaración de correlación clase a clase

Con esta lección aprenderá a crear una declaración de correlación que especifica una clase UML para el objeto de entrada y también para el objeto de salida. Esta declaración de correlación clase a clase contiene reglas de correlación que, cuando se ejecuta la transformación generada, crean una copia de la clase y sus operaciones en el modelo origen y coloca la copia en el modelo destino. También creará una declaración de correlación operación a operación, invocada por la subcorrelación de la declaración de correlación clase a clase.
Por qué y cuándo se efectúa esta tarea
La declaración de correlación, que también se llama correlación a secas, especifica cómo hay que crear o actualizar un objeto de salida para un objeto de entrada dado. Cuando crea transformaciones, puede utilizar una declaración de correlación para especificar cómo se corresponden los atributos de un objeto de entrada con los atributos de un objeto de salida. Cada declaración de correlación especifica un tipo de entrada y un tipo de salida, que se seleccionan en los metamodelos añadidos al modelo de correlación.

Para cada declaración de correlación del modelo de correlación, la infraestructura de autoría de transformaciones genera un archivo fuente Java cuyo nombre es nTransform.java, donde n representa el nombre de la declaración de correlación. En conjunto, estos archivos Java componen el código de la transformación. Además de generar el código de implementación para la transformación, la infraestructura de autoría de transformaciones genera asimismo código para registrar la transformación en el servicio de transformaciones. Después de crear una declaración de correlación, puede añadir reglas de correlación incrementalmente y generar el código fuente, o las implementaciones, para las reglas de correlación. No hace falta que defina primero todas las reglas de correlación para poder generar el código fuente.

Las declaraciones de correlación suelen seguir el convenio de denominación x2y, donde x representa el tipo de objeto de entrada e y representa el tipo de objeto de salida. Por ejemplo, la declaración de correlación llamada Package2EPackage especifica que Package es el objeto de entrada, y EPackage es el objeto de salida.

Una correlación entre elementos establece la correspondencia entre sus atributos, lo que permite intercambiar datos entre ellos. La mayoría de las correlaciones proporcionan la capacidad de manipular adicionalmente los datos entre el origen y el destino. Por ejemplo, podría optar por especificar cálculos o hacer otras modificaciones en los datos, creando para ello código personalizado, que le permite asignar valores al destino.

Para crear una declaración de correlación clase a clase en el modelo de correlación:

  1. Si todavía no está abierto, en la vista Explorador de paquetes, en la carpeta model, pulse dos veces en el archivo .mapping.
  2. En el área del editor de correlaciones de transformación, en la sección Raíz de correlación, pulse Generalize_Classes con el botón derecho del ratón; después, pulse Crear correlación.
  3. En la ventana Correlación nueva, en el campo Nombre de correlación, teclee Class2Class y pulse Aceptar. La correlación se visualiza en la vista Esquema y se abre en el área del editor bajo la sección Raíz de correlación.

Añadir objetos de entrada y de salida a la declaración de correlación clase a clase

Por qué y cuándo se efectúa esta tarea
Después de haber creado la declaración de correlación, debe añadirle un objeto de entrada y un objeto de salida. En esta lección, especificará una clase UML para el objeto de entrada y para el objeto de salida.
Nota: Cuando crea transformaciones modelo a modelo, para añadir un tipo de objeto que no esté disponible en el metamodelo de entrada o de salida que se utiliza en la correlación, puede añadir los perfiles UML o metamodelos Ecore pertinentes al ámbito de la correlación. En la ventana Añadir entrada, pulse Añadir modelo y especifique el modelo pertinente.

Para añadir un objeto de entrada y un objeto de salida a la declaración de correlación clase a clase:

  1. Pulse el icono de Añadir un objeto de entrada, que es el icono situado más a la izquierda en la barra de herramientas para la correlación que se propone editar:
    Imagen que muestra el icono de Añadir un objeto de entrada, situado en la barra de herramientas para la correlación que se propone editar.
  2. En la ventana Añadir entrada, en el panel Elemento, seleccione un objeto de metamodelo. El panel Elemento visualiza los elementos del metamodelo o de los metamodelos que especifique como modelo de correlación origen o destino. Para esta guía de aprendizaje, en el panel Elemento, expanda uml, pulse Clase y, después, Aceptar.
  3. Pulse el icono de Añadir un objeto de salida, que es el segundo icono de la izquierda en la barra de herramientas para la correlación que se propone editar:
    Imagen que muestra el icono de Añadir un objeto de salida, que es el segundo icono de la izquierda  en la barra de herramientas para la correlación que se propone editar.
  4. En la ventana Añadir salida, en el panel Elemento, expanda uml, pulse Clase y, después, Aceptar.
  5. Pulse Archivo > Guardar.
Resultados
Ahora puede definir reglas de correlación entre los atributos de los objetos de entrada y de salida de la clase.

Definir reglas de correlación entre los atributos de los objetos de entrada y de salida de la clase

Por qué y cuándo se efectúa esta tarea

Después de haber añadido los objetos de entrada y de salida a la declaración de correlación, ya puede definir las reglas de correlación entre los atributos. Las reglas de correlación, que también se llaman correlaciones, especifican cómo hay que asignar un valor a un atributo de un objeto de salida, en función de los valores de los atributos de un objeto de entrada.

En la declaración de correlación clase a clase, siga estos pasos:
  • Cree una nueva regla de correlación de movimiento que cree una clase en el modelo destino.

    Creará una regla de correlación entre el atributo name de los objetos de entrada y de salida. La clase destino tiene el mismo nombre que la clase que hay en el modelo de entrada; este proceso equivale a crear una copia de la clase. En una lección posterior, añadirá las operaciones de correlación a la regla de correlación.

  • Cree una regla de correlación de subcorrelación que, para cada operación de la clase, cree su correspondiente operación en la clase que hay en el modelo destino.

    Creará una regla de correlación de subcorrelación entre el atributo ownedOperation de los objetos de entrada y de salida. Para cada operación de la colección ownedOperation, la operación generada en el modelo destino tiene el mismo nombre y la misma visibilidad que la operación en el modelo de entrada.

Las reglas de correlación, que también se llaman correlaciones, especifican cómo hay que asignar un valor a un atributo de un objeto de salida, en función de los valores de los atributos de un objeto de entrada. Puede crear múltiples reglas de correlación entre los objetos de entrada y de salida y, como se demuestra en una lección posterior de esta guía de aprendizaje, también puede crear múltiples reglas de correlación entre un atributo de un objeto de entrada y de un objeto de salida. Los tipos de reglas de correlación que se pueden crear son los siguientes:
Movimiento
El movimiento, que también se llama regla de correlación simple, es el tipo de regla de correlación más básico. Los atributos de entrada y de salida deben tener tipos de datos compatibles. Ambos, o ninguno de los dos, atributos de entrada y de salida tienen múltiples valores. Por ejemplo, seleccione esta opción si un atributo del objeto de salida es una serie (String) y un atributo del objeto de entrada se puede convertir en una serie sin código personalizado. Este tipo de regla de correlación soporta una correlación entre un elemento o atributo origen y un elemento o atributo destino.El código fuente de transformación que se genera para una regla de correlación de movimiento implementa una regla que copia el valor de un atributo de entrada en un atributo de salida.
Subcorrelación

Subcorrelación es una invocación de una correlación desde dentro de otra correlación. La subcorrelación que se invoca puede estar definida, aunque no es necesario que lo esté, en el mismo archivo de correlación que la correlación que la invoca. La subcorrelación le permite correlacionar un tipo complejo del modelo de entrada con un tipo complejo del modelo de salida. La subcorrelación creada puede invocar una correlación que exista en el mismo archivo de correlación. El hecho de definir subcorrelaciones en distintos archivos de correlación anima a la reutilización de correlaciones; sin embargo, el hecho de crear múltiples archivos de correlación podría aumentar las tareas de mantenimiento del proyecto. Las subcorrelaciones también pueden incluir otras subcorrelaciones, dando como resultado una estructura jerárquica.

Las reglas de correlación de subcorrelaciones admiten los siguientes tipos de correlaciones:
  • Correlaciones 1 a 1 entre objetos de entrada y objetos de salida, o entre los atributos de los objetos de entrada y de salida
  • Correlaciones 1 a m o m a 1 entre atributos de los objetos de entrada y de salida
  • Correlaciones m a n entre atributos de los objetos de entrada y de salida
Si la regla de subcorrelación especifica una correlación 1 a m, el transforme generado añade un objeto de un atributo monoinstancia al final de una lista; en el caso de una correlación m a 1, el transforme extrae un objeto de una lista y lo inserta en un atributo monoinstancia.

También puede crear reglas de correlación de subcorrelaciones entre los objetos de entrada y los objetos de salida de una declaración de correlación.

Para cada subcorrelación de una declaración de correlación, se genera un extractor llamado getInputFeatureToOutputFeature_UsingMap_Extractor en el transforme continente, donde InputFeature representa el nombre del atributo de entrada, OutputFeature representa el nombre del atributo de salida y Map representa el nombre de la declaración de correlación.

Personalizada
Este tipo de regla de correlación le permite especificar código personalizado que calcula el valor de una propiedad de salida. Por ejemplo, este tipo de correlación se seleccionaría para establecer que el valor de una propiedad en el objeto de salida fuese igual a la concatenación de múltiples propiedades de entrada y de salida.

Puede especificar definiciones semánticas más precisas utilizando la API de lenguaje de restricciones de objeto (OCL) proporcionada por Eclipse.

Las reglas de correlaciones personalizadas admiten los siguientes tipos de correlaciones:
  • Correlaciones 1 a n entre objetos de entrada y de salida, o entre atributos de los objetos de entrada y de salida
  • Correlaciones m a n entre objetos de entrada y de salida, o entre atributos de los objetos de entrada y de salida
  • Correlaciones m a 1, donde m a 1 representa una de las siguientes prestaciones:
    • Correlación desde un solo atributo de entrada, cuya multiplicidad tenga el valor m, a un solo atributo de salida, cuya multiplicidad tenga el valor 1
    • Correlación desde múltiples atributos de entrada a un solo atributo de salida
    • Correlación desde múltiples objetos de entrada a un solo objeto de salida
Correlaciones heredadas
Solo puede crear esta regla de correlación entre un objeto de entrada y un objeto de salida.
Las declaraciones de correlación herederas heredan las reglas de correlación definidas en la declaración de correlación heredada. Puede alterar temporalmente las reglas de correlación herederas definiendo una regla de correlación que tenga las siguientes características:
  • La propiedad de objeto de entrada y la propiedad de objeto de salida coinciden con las de la regla de correlación heredada.
  • Las reglas de correlación que alteran temporalmente y las heredadas son correlaciones de subcorrelación que tienen extractores coincidentes, o las reglas de correlación que alteran temporalmente y las heredadas son ambas correlaciones de movimiento o correlaciones personalizadas.
Si crea una regla de correlación de correlaciones heredadas, debe especificar la declaración de correlación que contiene las reglas de correlación que desea heredar. No puede especificar más de una correlación heredada en una declaración de correlación.

Una regla de correlación heredada, así como la regla o extractor generada a partir de esa correlación, mantiene la misma posición relativa en el orden de proceso que la regla de correlación alterada temporalmente y su regla o extractor generada.

Para cada regla de correlación de movimiento o personalizada de una declaración de correlación, se añade una regla al código fuente de la transformación generada. Para cada regla de correlación de subcorrelación, se genera un extractor de contenido en el código fuente de la transformación. Cuando crea una regla de correlación, su tipo vendrá determinado por los atributos de entrada y de salida que seleccione. Por ejemplo, si los atributos de entrada y de salida son tipos primitivos compatibles, como las series o los enteros, se especifica una regla de correlación de movimiento. Si los atributos de entrada y de salida son tipos complejos, se especifica una regla de subcorrelación. Si los tipos de reglas de correlación de movimiento y de subcorrelación no son pertinentes, se especifica una regla de correlación personalizada.

Para definir las reglas de correlación de la declaración de correlación clase a clase (Class2Class):

  1. Cree una regla de correlación de movimiento entre el atributo name del objeto de entrada y del objeto de salida:
    1. En el área del editor, en el objeto de entrada de la clase, pulse el atributo name.
    2. Arrastre la manecilla del atributo name hasta el atributo name del objeto de salida de la clase.
  2. Cree una regla de correlación de subcorrelación entre el atributo ownedOperation del objeto de entrada y del objeto de salida.
    1. En el área del editor, en el objeto de entrada de la clase, pulse el atributo ownedOperation.
    2. Arrastre la manecilla del atributo ownedOperation hasta el atributo ownedOperation del objeto de salida de la clase. Dado que el atributo ownedOperation es una colección, se crea por defecto una regla de correlación de subcorrelación.
  3. Pulse Archivo > Guardar.
Resultados
Ahora puede crear la declaración de correlación operación a operación.

Crear una declaración de correlación operación a operación

Por qué y cuándo se efectúa esta tarea

Al llegar a este punto de la lección, en el área del editor, la subcorrelación tiene un adorno con una X rodeada de un círculo rojo, lo que indica un error. Ponga el puntero del ratón sobre este adorno para ver el mensaje de error. El mensaje de error indica que debe seleccionar una declaración de correlación para que la invoque la regla de correlación de subcorrelación. Para resolver este error, cree una declaración de correlación operación a operación.

Para crear una declaración de correlación operación a operación:

  1. Si la vista Propiedades no está abierta, vaya al área del editor, pulse con el botón derecho del ratón el elemento de subcorrelación que creó en la sección anterior, en el paso 2, y pulse Mostrar en propiedades.
  2. En la vista Propiedades, en la pestaña Detalles, junto al campo Correlación, pulse Nuevo.
  3. En la ventana Correlación nueva, en el campo Nombre de correlación, teclee Operation2Operation.
  4. Si el campo Entrada no contiene el valor Operación, pulse Examinar y, en la ventana Añadir entrada, en el panel Elemento, pulse Operación.
  5. Si el campo Salida no contiene el valor Operación, pulse Examinar y, en la ventana Añadir salida, en el panel Elemento, pulse Operación.
  6. Pulse Aceptar. El adorno de error se elimina y la declaración de correlación operación a operación aparece en la vista Esquema. En una lección posterior, creará las reglas de correlación de esta declaración de correlación.
  7. Pulse Archivo > Guardar.
Resultados
En la próxima lección, definirá una declaración de correlación clase a interfaz.
< Anterior | Siguiente >

Comentarios