Ingeniería directa (del modelo al código)
Este apartado explica cómo crear un proyecto de UModel nuevo y generar código de programa a partir de él (un proceso conocido como ingeniería directa). El proyecto que vamos a crear será muy sencillo y estará formado por una sola clase. También aprenderemos a preparar el proyecto para la generación de código y a comprobar que la sintaxis del proyecto es correcta. Tras generar el código de programa, lo modificaremos fuera de UModel, añadiendo un método nuevo a la clase. Por último, en el siguiente apartado, se explica cómo combinar cambios realizados en el código con el proyecto de UModel original (un proceso conocido como ingeniería inversa).
El lenguaje de generación de código utilizado en este tutorial es Java, pero para los demás lenguajes de generación de código pueden seguirse instrucciones parecidas.
Crear un proyecto de UModel nuevo
Para crear un proyecto de UModel nuevo haga clic en el comando Archivo | Nuevo (o pulsando Ctrl+N o el botón Nuevo de la barra de herramientas).
El proyecto recién creado solamente contiene los paquetes predeterminados "Root" y "Component View". Estos dos paquetes no se pueden eliminar ni renombrar. "Root" es el nivel superior de agrupación para todos los demás paquetes y elementos del proyecto. El paquete "Component View", por su parte, es necesario para los procesos de ingeniería de código y suele almacenar componentes UML que serán realizados por clases o interfaces del proyecto. Sin embargo, hasta ahora no hemos creado ninguna clase.
Para empezar vamos a diseñar la estructura de nuestro programa:
1.Haga clic con el botón derecho en el paquete "Root" de la ventana Estructura del modelo y seleccione Elemento nuevo | Paquete en el menú contextual. Cambie el nombre del nuevo paquete por "src".
2.Haga clic con el botón derecho en "src" y seleccione Elemento nuevo | Paquete en el menú contextual. Cambie el nombre del nuevo paquete por "com"
3.Haga clic con el botón derecho en "com" y seleccione Elemento nuevo | Paquete en el menú contextual. Cambie el nombre del nuevo paquete por "nanonull".
4.Haga clic con el botón derecho en "nanonull" y seleccione Elemento nuevo | Clase en el menú contextual. Cambie el nombre de la nueva clase por "MiClase".
![um_tutorial_01](./images/um_tutorial_01.png)
Preparar el proyecto para la generación de código
Para generar código a partir de un modelo de UModel es necesario cumplir varios requisitos:
•Debe tener definido un paquete raíz de espacio de nombres Java, C# o VB.NET.
•Debe existir un componente que sea realizado por todas las clases o interfaces para las que se debe generar código.
•El componente debe tener asignada una ubicación física (un directorio). El código se generará en dicha ubicación.
•El componente debe tener habilitada la propiedad usar para ingeniería de código.
Estos requisitos se explican más abajo con más detenimiento, pero recuerde que puede comprobar en todo momento si el proyecto cumple con estos requisitos con solo usar la función de validación: haciendo clic en el comando Proyecto | Revisar la sintaxis del proyecto (F11)
Si se valida el proyecto en este momento, la ventana Mensajes emite el error de validación "No se encontró la raíz de espacio de nombres. Utilice el menú contextual (submenú "Ingeniería de código") en la estructura del modelo para definir un paquete como raíz de espacio de nombres." Para resolver este problema asignaremos el paquete src como raíz de espacio de nombres:
1.Haga clic con el botón derecho en el paquete "src" y seleccione Ingeniería de código | Establecer como raíz de espacio de nombres de Java en el menú contextual.
2.Cuando la aplicación pida confirmación para incluir el perfil Java Profile de UModel en el paquete, haga clic en Aceptar.
![um_tutorial_02](./images/um_tutorial_02.png)
Observe que ahora el paquete tiene un icono distinto () que nos indica que este paquete es una raíz de espacio de nombres de Java. Además, se añadió el perfil Java Profile al proyecto.
![um_tutorial_03](./images/um_tutorial_03.png)
El espacio de nombres propiamente dicho se puede definir de la siguiente manera:
1.Seleccione el paquete "com" en la ventana Estructura del modelo.
2.En la ventana Propiedades habilite la propiedad <<namespace>>.
![um_tutorial_03a](./images/um_tutorial_03a.png)
3.Repita el paso anterior con el paquete "nanonull".
Observe que los paquetes "com" y "nanonull" ahora tienen un icono distinto () que nos indica que estos paquetes son espacios de nombres.
Otro requisito para la generación de código es que los componentes sean realizados por una clase o una interfaz como mínimo. En UML un componente es una pieza del sistema. En UModel el componente nos permite especificar el directorio de generación de código y otras opciones de configuración. Si validamos el proyecto en este momento, aparecerá un mensaje de advertencia en la ventana Mensajes: "MiClase no tiene una RealizaciónDeComponente para un componente. No se generará código". Para resolver este problema basta con agregar un componente al proyecto:
1.En la ventana Estructura del modelo haga clic con el botón derecho en "Component View" y seleccione Elemento nuevo | Componente en el menú contextual.
2.Cambie el nombre del nuevo componente por "nanonull".
![um_tutorial_04](./images/um_tutorial_04.png)
3.En la ventana Propiedades cambie el valor de la propiedad directorio por el directorio donde se debe generar el código (p. ej. "src\com\nanonull"). Observe que la propiedad usar para ingeniería de código está habilitada, lo cual es otro requisito imprescindible para la generación de código.
![um_tutorial_05](./images/um_tutorial_05.png)
4.Elija un nombre para el proyecto de UModel y guárdelo en un directorio (en este ejemplo: C:\UModelDemo\Tutorial.ump).
Nota: | el directorio de generación de código puede ser absoluto o relativo al proyecto .ump. Si es relativo, como en este ejemplo, una ruta como src\com\nanonull crearía todos los directorio en el mismo directorio en el que se guardó el proyecto de UModel. |
En este caso hemos preferido generar código en una ruta de acceso que incluye el nombre de espacio de nombres para evitar mensajes de advertencia porque UModel muestra advertencias de validación si el componente está configurado para generar código Java en un directorio cuyo nombre no coincida con el nombre del espacio de nombres. En este ejemplo, el componente "nanonull" tiene la ruta de acceso "C:\UModelDemo\src\com\nanonull", por lo que no se emitirán advertencias de validación. Si quiere que UModel realice la misma comprobación con C# o VB.NET o si quiere deshabilitar la validación del espacio de nombres para Java, debe seguir estas instrucciones:
1.En el menú Herramientas haga clic en el comando Opciones.
2.Haga clic en la pestaña Ingeniería de código.
3.Marque la casilla correspondiente en el grupo de opciones Usar espacio de nombres para la ruta del archivo de código.
Ahora veamos cómo se puede crear la relación de realización de componente. En la ventana Estructura del modelo haga clic en la clase "MiClase" y arrástrela hasta el componente nanonull.
![um_tutorial_06](./images/um_tutorial_06.png)
De este modo, al componente lo realiza la única clase del proyecto (MiClase). También puede crear la realización de componente desde un diagrama de componentes (véase Diagramas de componentes).
Lo siguiente que deberíamos hacer es dar un nombre de archivo a las clases o interfaces que participarán en la generación de código. De lo contrario, UModel generará el archivo correspondiente con un nombre de archivo predeterminado y la ventana Mensajes emitirá una advertencia (no se configuró el nombre del archivo de código. Se generará un nombre predeterminado). Para solucionar este problema:
1.Seleccione la clase "MiClase" en la ventana Estructura del modelo.
2.En la ventana Propiedades cambie el valor de la propiedad nombre del archivo de código por el nombre correspondiente (p. ej. MiClase.java).
![um_tutorial_07](./images/um_tutorial_07.png)
Incluir los tipos JDK
Aunque este paso es opcional, recomendamos que incluya los tipos del lenguaje JDK (Jave Development Kit) como subproyecto de su proyecto de UModel. De lo contrario, los tipos JDK no estarán disponibles cuando cree las clases o interfaces. Esto se puede hacer de la siguiente manera (las mismas instrucciones pueden seguirse para C# y VB.NET):
1.En el menú Proyecto haga clic en Incluir un subproyecto.
2.Haga clic en la pestaña Java seleccione el proyecto Java JDK 9 (types only).
![um_include_jdk_types1](./images/um_include_jdk_types1.png)
3.Cuando la aplicación pregunte si se incluye mediante referencia o como copia, elija la opción Incluir mediante referencia.
![um_include_jdk_types2](./images/um_include_jdk_types2.png)
Generar código
Ahora que se cumplen todos los requisitos para la generación de código, podemos empezar el proceso:
1.En el menú Proyecto haga clic en el comando Combinar el código de programa con el proyecto de UModel (o pulse F12).
![um_tutorial_08](./images/um_tutorial_08.png)
2.Deje las opciones de sincronización predeterminadas como están y haga clic en Aceptar. UModel revisa la sintaxis del proyecto automáticamente y en la ventana Mensajes aparecen los resultados de la revisión:
![um_tutorial_09](./images/um_tutorial_09.png)
Modificar el código fuera de UModel
La generación de código de programa es el primero paso para empezar a desarrollar una aplicación o un sistema de software. En un proyecto real, el código sufrirá un gran número de modificaciones antes de llegar a ser un programa completo. Siguiendo con nuestro ejemplo, ahora abriremos el archivo generado MiClase.java en un editor de texto y añadiremos un método nuevo a la clase, como se muestra a continuación. El archivo MiClase.java tendrá este aspecto:
package com.nanonull; |
MiClase.java
Combinar cambios realizados en el código con el modelo original
Ahora podemos combinar los cambios realizados en el código con el código original:
1.En el menú Proyecto haga clic en el comando Combinar el proyecto de UModel con el código de programa (o pulse Ctrl+F12).
![um_tutorial_10](./images/um_tutorial_10.png)
2.Deje las opciones de sincronización predeterminadas como están y haga clic en Aceptar. UModel revisa la sintaxis del proyecto automáticamente y en la ventana Mensajes aparecen los resultados de la revisión:
![um_tutorial_11](./images/um_tutorial_11.png)
La clase sum (que se obtuvo mediante ingeniería inversa desde el código) aparece ahora en la ventana Estructura del modelo.
![um_tutorial_12](./images/um_tutorial_12.png)