< Anterior | Siguiente >

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

Con esta lección aprenderá a crear una declaración de correlación paquete a paquete y múltiples reglas de correlación. Las reglas de correlación especifican cómo procesa el transforme generado los paquetes anidados o los elementos de tipo clase en el paquete contenido en el modelo origen.
Por qué y cuándo se efectúa esta tarea

Los objetos de entrada y de salida de paquete contienen una característica que se llama packagedElement. Esta característica es una colección que consta de diferentes tipos de objetos UML válidos. Las reglas de correlación que creará en esta lección definen cómo procesa la transformación los elementos de la colección que son de tipo paquete o clase.

En esta lección creará las siguientes reglas de correlación:
  • Una regla de correlación de movimiento que crea un paquete en el proyecto destino; este paquete tiene el mismo nombre que el paquete del modelo origen.
  • Una regla de correlación de subcorrelación que invoca el transforme Class2ClassTransform si el elemento es de tipo clase.
  • Una regla de correlación de subcorrelación que invoca el transforme Class2InterfaceTransform si el elemento es de tipo clase.
  • Una regla de correlación de subcorrelación que invoca el transforme Package2PackageTransform si el elemento es de tipo paquete.

En Lección 3: Crear y definir con más precisión una declaración de correlación clase a clase se vio que para cada regla de correlación de movimiento de una declaración de correlación, se añade al código fuente del transforme generado una regla que copia un valor de atributo de un modelo origen en el modelo destino. Para cada regla de correlación de subcorrelación, se genera en el código fuente del transforme un extractor que extrae elementos de la colección especificada. La regla de subcorrelación se aplica a un objeto si el objeto de entrada actual es una instancia del tipo de entrada definido en la declaración de correlación.

Cuando se ejecuta la transformación generada, si el modelo origen contiene un paquete, se invoca el transforme Package2PackageTransform y se crea un paquete con el mismo nombre en el modelo destino. El transforme Package2PackageTransform atraviesa la colección de la característica packagedElement. Para cada elemento de colección que sea de tipo paquete, lo que significa que el modelo origen contiene paquetes anidados, el transforme invoca el transforme Package2PackageTransform. Para cada elemento de colección que sea de tipo clase, el transforme invoca las reglas para transformar la clase en una clase correspondiente y una interfaz en el modelo de salida destino.

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

  1. Si el archivo Generalize_Classes.mapping no está abierto en el editor de correlaciones de transformación, vaya a la vista Explorador de paquetes y pulse dos veces en el archivo.
  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 Package2Package y pulse Aceptar. La correlación se visualiza en la vista Esquema y se abre en el área del editor bajo Raíz de correlación.

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

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á un paquete UML para el objeto de entrada y para el objeto de salida.

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

  1. Pulse el icono de Añadir un objeto de entrada, que es el situado más a la izquierda en la barra de herramientas de la correlación que se propone editar.
  2. En la ventana Añadir entrada, en el panel Elemento, expanda uml, pulse Paquete 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 de la correlación que se propone editar.
  4. En la ventana Añadir salida, en el panel Elemento, expanda uml, pulse Paquete y, después, Aceptar.
  5. Pulse Archivo > Guardar.
Resultados
Ahora puede definir las reglas de correlación entre las características de los objetos de entrada y de salida.

Definir reglas de correlación entre los atributos de los objetos de entrada y de salida del paquete

Por qué y cuándo se efectúa esta tarea
Después de haber añadido los objetos de entrada y de salida del paquete a la declaración de correlación, ya puede crear las reglas de correlación entre los atributos de los objetos de entrada y de salida.
Nota: Cuando genera el código fuente de la transformación, se genera un transforme para cada declaración de correlación. En cada transforme generado hay un método getAccept_Condition(). Por defecto, este método devuelve true si el elemento de entrada actual es una instancia del objeto de entrada definido en la declaración de correlación. Si el método devuelve false, el transforme no procesa el elemento de entrada actual. En esta lección, puede crear filtros de entrada que también verifiquen si el objeto de entrada es una instancia del tipo de entrada. Aunque estos filtros de entrada son redundantes, son asimismo inofensivos y solo hacen una demostración de cómo crear filtros de entrada. Los filtros de entrada en las regla de correlación de subcorrelación deben estar escritos en Java y han de devolver un valor booleano.

Para crear las reglas de correlación entre los atributos de los objetos de entrada y de salida del paquete:

  1. Cree una regla de correlación de movimiento entre los atributos name; para ello, arrastre la manecilla del atributo name del objeto de entrada hasta el atributo name del objeto de salida.
  2. Cree una regla de correlación de subcorrelación entre el atributo packagedElement del objeto de entrada y el de salida, y especifique que esta subcorrelación invoca el transforme Class2ClassTransform si el elemento es de tipo clase:
    1. Arrastre la manecilla del atributo packagedElement del objeto de entrada hasta el atributo packagedElement del objeto de salida. Dado que el atributo packagedElement es una colección, el editor de correlaciones crea por defecto una regla de correlación de subcorrelación.
    2. En el área del editor, pulse el nuevo elemento Subcorrelación con el botón derecho del ratón y luego seleccione Mostrar en propiedades.
    3. En la vista Propiedades, en la pestaña Detalles, en la lista Correlación, seleccione Class2Class.
    Cuando ejecuta la transformación generada, para cada elemento del paquete de entrada, la transformación invoca el transforme Class2ClassTransform, pero solo si el elemento es de tipo clase.
  3. Opcional: En la regla de subcorrelación que creó en el paso 2, cree un filtro de entrada que verifique si el objeto actual es una instancia de una clase:
    1. En el área del editor, pulse el elemento Subcorrelación que creó en el paso 2.
    2. En la vista Propiedades, en la pestaña Filtro de entrada, marque el recuadro de selección Filtrar elementos de entrada.
    3. Pulse Incorporado.
    4. En el área de texto situada bajo el campo Código, bajo la signatura del método, especifique el siguiente código: return packagedElement_src instanceof org.eclipse.uml2.uml.Class;
    5. Pulse Aplicar.
  4. Cree una regla de correlación de subcorrelación entre la característica packagedElement del objeto de entrada y el de salida, y especifique que si el elemento actual de la colección packagedElement es de tipo clase, el transforme llamado Package2PackageTransform transforma la clase en una interfaz del modelo destino.
    1. Repita el paso 2a para crear otra subcorrelación entre las características packagedElement.
    2. En el área del editor, pulse el nuevo elemento Subcorrelación con el botón derecho del ratón y luego seleccione Mostrar en propiedades.
    3. En la vista Propiedades, en la pestaña Detalles, en la lista Correlación, seleccione Class2Interface.
  5. Opcional: En la regla de subcorrelación que creó en el paso 4, cree un filtro de entrada que verifique si el objeto actual es una instancia de una interfaz:
    1. En el área del editor, pulse con el botón derecho del ratón el elemento Subcorrelación que creó en el paso 4; luego, seleccione Mostrar en propiedades.
    2. Repita los pasos 3b, 3c, 3d y 3e para especificar el mismo filtro de entrada.
  6. Cree una regla de correlación de subcorrelación que procese paquetes anidados. Si el elemento actual de la colección packagedElement es un paquete, la transformación invoca el transforme Package2PackageTransform.
    1. Repita el paso 2a para crear otra subcorrelación entre las características packagedElement.
    2. En el área del editor, pulse el nuevo elemento Subcorrelación con el botón derecho del ratón y luego seleccione Mostrar en propiedades.
    3. En la vista Propiedades, en la pestaña Detalles, en la lista Correlación, seleccione Package2Package.
  7. Opcional: En la regla de subcorrelación que creó en el paso 6, cree un filtro de entrada que verifique si el elemento de entrada actual es una instancia de un paquete:
    1. En el área del editor, pulse con el botón derecho del ratón el elemento Subcorrelación que creó en el paso 6; luego, seleccione Mostrar en propiedades.
    2. Repita los pasos 3b y 3c para especificar que esta regla tiene un filtro de entrada.
    3. En el área de texto situada bajo el campo Código, bajo la signatura del método, especifique el siguiente código: return packagedElement_src instanceof org.eclipse.uml2.uml.Package;
    4. Pulse Aplicar.
  8. Pulse Archivo > Guardar.
Resultados
La declaración de correlación contiene una regla de correlación de movimiento entre los atributos name y múltiples reglas de subcorrelación entre los atributos packagedElement.
< Anterior | Siguiente >

Comentarios