Una Herramienta CASE para la Generación de Código a partir de

Anuncio
UMLGEC ++: Una Herramienta CASE para la
Generación de Código a partir de Diagramas de Clase
UML
Irving Alberto Cruz Matías 1 y Carlos Alberto Fernández y Fernández 2
1
Universidad Tecnológica de la Mixteca – carretera a Acatlima Km. 2.5, Huajuapan de
León, Oaxaca, 69000. México
irving@nuyoo.utm.mx
2
Instituto de Electrónica y Computación, Universidad Tecnológica de la Mixteca –
carretera a Acatlima Km. 2.5, Huajuapan de León, Oaxaca, 69000. México
caff@mixteco.utm.mx
Resumen. Hoy en día existen muchas herramientas CASE (Computer Aided
Software Engineering) con soporte a UML (Unified Modeling Language), sin
embargo para muchas personas el adquirir una de estas herramientas tiene como
inconvenientes: un precio elevado y una dificultad de aprendizaje si se es
principiante, esto debido a la gran cantidad de opciones y configuraciones que
presentan, sobre todo si se quiere obtener el máximo beneficio a las funciones
importantes, como la generación de código fuente. En este documento, se
plantea el desarrollo de una herramienta que soporte la notación UML para
diagramas de clase y generación de código en C++, con un interfaz lo más
completa y sencilla posible que ayude a quien apenas comienza con el
aprendizaje de la Análisis y Diseño Orientado a Objetos (AyDOO).
Palabras clave: CASE, UML, RUP, Ingeniería de Software.
1 Introducción
Las herramientas CASE nacen para auxiliar a los desarrolladores de sistemas, lo que
permite el apoyo computarizado en todo o en parte del ciclo de vida del desarrollo de
un sistema de software, tal es el caso de las herramientas CASE con soporte a UML.
1.1 Alcance de la Herramienta
El proyecto de desarrollo de esta herramienta CASE (UMLGEC ++) no pretende dar
solución a los problemas que la gente demanda de las actuales herramientas CASE de
UML, únicamente se ajusta a la creación de una herramienta que soporte la notación
UML para diagramas de clase y generación de código en C++, con una interfaz lo mas
completa y sencilla posible.
Específicamente, la herramienta está orientada a ser un material de apoyo para la
materia de Programación Orientada a Objetos II, impartida en la Universidad
Tecnológica de la Mixteca, asignatura en la que los alumnos aprenden el uso del UML
y desarrollan un proyecto final con base en éste.
1.2 El UML y el RUP
En la búsqueda de software de calidad, la Ingeniería de Software ha creado técnicas de
AyDOO que buscan facilitar el proceso de desarrollo de software, tal es el caso del
UML, cuya finalidad es la de crear un lenguaje gráfico estándar independiente de
cualquier metodología de desarrollo [1]. El UML es utilizado para el desarrollo de
componentes de software en diversos campos y fue aceptado como un estándar por el
OMG (Object Management Group - Grupo de Administración de Objetos) en
Noviembre de 1997 [2].
Los principales creadores del UML (Grady Booch, Ivar Jacobson y James
Rumbaugh) desarrollaron también un proceso de desarrollo para trabajar de la mano
con el UML: el RUP (Rational Unified Process - Proceso Unificado de Rational),
definido por Ivar Jacobson como: "el conjunto de actividades necesarias para
transformar los requisitos de un usuario en un sistema de software" [3].
Como se menciona en la sección 3, tanto UML como el RUP fueron utilizados para
diseñar la herramienta CASE que aquí se presenta.
2 Componente de la herramienta CASE
A continuación se describen brevemente los principales componentes de una
herramienta CASE [4], [5] y cómo han sido implementados. Este análisis fue necesario
para identificar las características clave de la herramienta a desarrollar.
2.1 Depósito de datos
Es la base de datos de información central de la herramienta CASE, en este depósito se
almacena toda la información creada y generada a través de las etapas que cubre la
herramienta de determinado proceso de desarrollo. Este componente es implementado
cuando se necesitan cubrir requerimientos para trabajo en grupo.
Dado que UMLGEC ++ se ha considerado como una aplicación que trabajará en una
sola terminal, no fue necesario implementar un depósito de datos. Toda la información
editada en tiempo de ejecución es almacenada temporalmente en objetos dinámicos que
contienen información que les corresponde, hasta que el usuario guarda esta
información en un archivo.
Para el almacenamiento en archivo se creó un código que pudiera almacenar y leer
estructuras con información de cada componente involucrado en un diagrama de clases,
como son: las clases, las relaciones y notas. Esta información incluye datos sobre la
posición y tamaño visual, información propia de cada componente como el nombre,
atributos, etc., así como relaciones entre componentes.
2.2 Módulo para Creación de Diagramas y Modelado
Consiste en dar soporte para la creación de los diagramas más utilizados para el análisis
y diseño del software como los diagramas de flujo de datos, el modelo entidadrelación, y los diagramas de clase. Las principales características con las que debe
cumplir este módulo y que han sido implementadas son el número máximo de objetos
que se permiten en un diagrama y la posibilidad de deshacer los cambios hechos a los
diagramas.
Para UMLGEC ++, el número máximo de objetos está limitado por la cantidad de
memoria que el sistema operativo destine a la ejecución de la herramienta, ya que cada
vez que se intente crear un nuevo componente en tiempo de ejecución, primero se
revisa si existe memoria suficiente para llevar a cabo dicha tarea.
La posibilidad de deshacer los últimos cambios hechos en el diagrama está
implementada mediante una pila, donde cada elemento en la pila contiene información
del cambio realizado a la estructura del diagrama conforme es modificada, los cambios
que se pueden deshacer son: mover una clase o una nota, y borrar cualquier
componente del diagrama.
2.3 Generador de código
Es uno de los componentes indispensables de las herramientas CASE. Las
características más importantes de este componente son: el o los lenguaje(s) de
programación para los que se genera código y el alcance de la generación del cuerpo
del programa.
UMLGEC ++ tiene un generador de código que crea código en lenguaje C++ a
partir del diagrama de clases, con lo que se puede obtener la estructura estática de un
sistema; es decir, se generan las estructuras de las clases que participan en el sistema
modelado y las relaciones entre ellas, adoptando buenas prácticas de programación
como la declaración de funciones inline y uso de la STL (Standard Template Library Biblioteca de Plantillas Estándar) de C++.
2.4 Analizador de sintaxis
El analizador de sintaxis verifica la validez y el correcto uso de la información
introducida a la herramienta, de acuerdo a la notación soportada. Este componente es
muy importante para ayudar al desarrollador a no cometer errores de sintaxis al
momento de crear los diagramas y generar un código más completo y preciso.
La revisión de sintaxis en UMLGEC ++ va implícita en el momento de edición de
un diagrama, ya que cada componente ha sido implementado de manera que cada una
de sus partes esté validada para evitar errores de sintaxis.
Con esto cada vez que el usuario esté modelando un diagrama y cree o modifique
algún componente, la herramienta le indica si está violando la sintaxis de UML.
3 Metodología usada
La herramienta fue desarrollada tomando como lenguaje de modelado al UML, como
proceso de desarrollo al Proceso Unificado, como lenguaje de programación C++, y
como ambiente de desarrollo a Borland C++ Builder 5.
Para obtener los requisitos de la herramienta se hicieron pruebas de comportamiento
a las herramientas CASE: Rose de Rational Corporation, Rhapsody de Ilogix, Visual
UML de Visual Object Modelers y Objecteering de Softeam.
La Fig. 1 muestra el diagrama de casos de uso al que se llegó una vez finalizada la
captura de requerimientos.
Fig. 1. Diagrama de Casos de Uso de UMLGEC++
4 Resultados
Una vez terminada la herramienta, se necesita el diseño de un sistema de prueba. Se
diseñaron y realizaron varias pruebas, aunque solo se mostrará una de ellas.
El sistema de prueba se obtuvo de un problema publicado por primera vez por Grady
Booch [Trutra 98], se consideró interesante especialmente para mostrar cómo un
problema no tan complicado, ni tan simple, podría tener un diseño sencillo y cómo sólo
un poco de código necesita ser escrito manualmente. El problema (Home Heating
System) consiste en lo siguiente:
Supongamos que tenemos algunos cuartos (en una casa, un edificio, etc), en alguna
parte en nuestro diseño, y tenemos que diseñar un sistema de calefacción, de tal
manera que en cualquier momento que un cuarto desee un poco de calor, el sistema
proveerá tal calor, y en cuanto el cuarto no lo necesite mas, el sistema dejará de
mandar calor a tal cuarto.
Naturalmente, el sistema de calefacción contendrá un horno, el cuál será la fuente
de calor, y un regulador de flujo de calor, el cual controlará el flujo de calor, este
enviará el calor a un cuarto a través del sistema de calefacción, o detendrá el calor al
cuarto, según sea el caso. El calor será enviado a cualquier cuarto usando agua
caliente: el cuarto que reciba el calor, abrirá la válvula de agua caliente.
La Fig. 2 muestra el diseño del programa modelado en UMLGEC ++ y la ejecución del
programa una vez generado el código fuente y completado con código C++ “a mano”.
La compilación fue realizada en C++ Builder 5.0.
Fig. 2. Diagrama de clases modelado en la herramienta UMLGEC ++ y ejecución del sistema
“Home Heating System”.
De la generación de código se puede decir:
• A partir del diagrama se genera la estructura de las clases.
• Se crean automáticamente: el constructor, el constructor de copia, el operador de
asignación, las operaciones de igualdad y el destructor.
• Todos los atributos y asociaciones son establecidos como privados
independientemente de la visibilidad establecida por el usuario, pero el acceso a
ellos está permitido mediante operaciones get y set generadas automáticamente
para cada atributo o asociación, las cuáles adquieren la visibilidad
correspondiente al atributo o asociación al que hacen referencia.
• Se definen los cuerpos de las operaciones get y set, como funciones inline.
• Para el caso de las asociaciones, cuando se trata de un rol con multiplicidad
mayor a 1, el acceso a los objetos que participan en el se establece mediante el
uso la STL de C++.
5. Conclusiones y trabajos a futuro
El contenido presentado en este documento dio una perspectiva del seguimiento de la
Ingeniería de Software mediante el UML y el Proceso Unificado para crear una
herramienta CASE para diagramas de clase de UML; con la cuál, a través la correcta
compilación y ejecución de las pruebas que se han hecho es posible concluir lo
siguiente:
Durante el desarrollo de este proyecto, nos damos cuenta de lo importante que es
seguir un proceso formal y un lenguaje igualmente bien definido, que al final es de
gran utilidad, ya que se crea una documentación fortalecida con una notación estándar cómo lo es el UML - que puede ser retomada después, y ampliar la construcción
siguiendo cualquier metodología de desarrollo.
Por eso, dentro de los desarrollos a futuro de esta herramienta se pueden considerar:
• Aumentar la capacidad de soportar otros diagramas de UML, como los diagramas
de secuencia, colaboración, de casos de uso, etc., y con ello soportar una mayor
parte del ciclo de desarrollo del software y por tanto poder generar un código
más completo.
• Generación de código en otros lenguajes. Se pude crear diferentes plantillas de
generación de código para otros lenguajes como Java, C#, etc.
• Compatibilidad con otras herramientas CASE. La estructura de almacenamiento
en archivo tiene como base el formato de los archivos .mdl de Rational Rose,
aunque no es compatible con éste; pero la estructura para guardar un archivo
puede ser modificada agregando o quitando información con el fin de ser
compatible con algunas otras herramientas CASE existentes.
Referencias
[1] M. Fowler, UML Gota a Gota. Addison Wesley Longman de México, México, 1999.
[2] G. Booch, "UML in Action", Communications of the ACM, 26 October 1999, Vol.42 No.10.
pp. 26-28.
[3] I. Jacobson, G. Booch, and J. Rumbaugh, El Proceso Unificado de Desarrollo de Software.
Pearson Educación, Madrid, 2000.
[4] Instituto Nacional de Estadística e Informática del Perú, Herramientas CASE, Sub-Jefatura de
Informática -Dirección Técnica de Desarrollo Informático, Peru, 1999.
http://www.uap.edu.pe/samples/demo/Libro-5103.pdf
[5] C. Lokan, and G. Millar, "Methods for IS Development", Course Notes of Information
Systems, School of Computer Science - University of New South Wales, 1999.
http://www.cs.adfa.edu.au/teaching/studinfo/is1/Lectures/topic19.html
[6] P. Salinas y N. Hitschfeld, Tutorial de UML, Departamento de Ciencias de la Computación Universidad de Chile. http://www.dcc.uchile.cl/~psalinas/uml/
Descargar