Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
U N I V E R S I D A D N A C I O N A L A U T Ó N O M A D E M É X I C O FACULTAD DE ESTUDIOS SUPERIORES ACATLÁN Desarrollo de un framework de mapeo de objetos a bases de datos relacionales (ORM) utilizando Java y XML. T E S I S PARA OBTENER EL TITULO DE: LICENCIADO EN MATEMÁTICAS APLICADAS Y COMPUTACIÓN P R E S E N T A GUILLERMO ELEAZAR CABRERA BERNAL Asesor: Licenciado Jaime Vergara Prado Fecha: Agosto 2009 UNAM – Dirección General de Bibliotecas Tesis Digitales Restricciones de uso DERECHOS RESERVADOS © PROHIBIDA SU REPRODUCCIÓN TOTAL O PARCIAL Todo el material contenido en esta tesis esta protegido por la Ley Federal del Derecho de Autor (LFDA) de los Estados Unidos Mexicanos (México). El uso de imágenes, fragmentos de videos, y demás material que sea objeto de protección de los derechos de autor, será exclusivamente para fines educativos e informativos y deberá citar la fuente donde la obtuvo mencionando el autor o autores. Cualquier uso distinto como el lucro, reproducción, edición o modificación, será perseguido y sancionado por el respectivo titular de los Derechos de Autor. Agradezco al gran arquitecto del universo: por el camino que me ha indicado para llegar a este momento, por mis padres de los que siempre estoy orgulloso y mis hermanas que son mis mejores amigas y mi adoración. Dedico este trabajo a mis padres que siempre me acompañan. UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 1 CONTENIDO. INTRODUCCION. ....................................................................... ¡ERROR! MARCADOR NO DEFINIDO. CAPITULO 1. CONCEPTOS BÁSICOS. .................................... ¡ERROR! MARCADOR NO DEFINIDO. 1.1 INTRODUCCIÓN. ............................................................................. ¡ERROR! MARCADOR NO DEFINIDO. 1.2 DEFINICIÓN DE FRAMEWORK. ......................................................... ¡ERROR! MARCADOR NO DEFINIDO. 1.3 LENGUAJE DE PROGRAMACIÓN JAVA. ............................................. ¡ERROR! MARCADOR NO DEFINIDO. 1.4 LENGUAJE DE REPRESENTACIÓN XML. ........................................... ¡ERROR! MARCADOR NO DEFINIDO. 1.5 BASES DE DATOS ENTIDAD-RELACIÓN. ............................................ ¡ERROR! MARCADOR NO DEFINIDO. 1.6 LENGUAJE UNIFICADO DE MODELADO UML. ................................... ¡ERROR! MARCADOR NO DEFINIDO. 1.6.1 Vistas. ............................................................................................ ¡Error! Marcador no definido. 1.6.2 Diagramas. .................................................................................... ¡Error! Marcador no definido. 1.7 PATRONES DE DISEÑO. ................................................................... ¡ERROR! MARCADOR NO DEFINIDO. 1.8 MAPEO DE OBJETOS A BASES DE DATOS ENTIDAD - RELACIÓN. ........ ¡ERROR! MARCADOR NO DEFINIDO. CAPITULO 2. FASE DE ANÁLISIS. .......................................... ¡ERROR! MARCADOR NO DEFINIDO. 2.1 INTRODUCCIÓN. ............................................................................. ¡ERROR! MARCADOR NO DEFINIDO. 2.2 CASOS DE USO. .............................................................................. ¡ERROR! MARCADOR NO DEFINIDO. 2.2.1 Realización de los casos de uso del paquete de componentes de acceso de base de datos y ejecución de transacciones. ..................................................................... ¡Error! Marcador no definido. 2.2.2 Realizaciones de casos de uso del paquete de componentes ORM. ... ¡Error! Marcador no definido. 2.2.3 Inventario de clases de análisis por paquete. .................................. ¡Error! Marcador no definido. CAPITULO 3. FASE DE DISEÑO .............................................. ¡ERROR! MARCADOR NO DEFINIDO. 3.1 INTRODUCCIÓN .............................................................................. ¡ERROR! MARCADOR NO DEFINIDO. 3.2 ARQUITECTURA CONCEPTUAL DEL FRAMEWORK. ............................ ¡ERROR! MARCADOR NO DEFINIDO. 3.3 MODELO DE DISEÑO DEL DOCUMENTO DE MAPEO XML ................... ¡ERROR! MARCADOR NO DEFINIDO. 3.4 REALIZACIONES DE CASOS DE USO DEL PAQUETE DE COMPONENTES DE ACCESO DE BASE DE DATOS Y EJECUCIÓN DE TRANSACCIONES. .......................................................... ¡ERROR! MARCADOR NO DEFINIDO. 3.4 REALIZACIONES DE CASOS DE USO DEL PAQUETE DE COMPONENTES DE ACCESO DE BASE DE DATOS Y EJECUCIÓN DE TRANSACCIONES. .......................................................... ¡ERROR! MARCADOR NO DEFINIDO. 3.5 REALIZACIONES DE CASOS DE USO DEL PAQUETE DE COMPONENTES ORM. ....... ¡ERROR! MARCADOR NO DEFINIDO. 3.6 INVENTARIO DE CLASE DE DISEÑO POR PAQUETE. ............................ ¡ERROR! MARCADOR NO DEFINIDO. CAPITULO 4. FASE DE CONSTRUCCIÓN Y PRUEBAS. ...... ¡ERROR! MARCADOR NO DEFINIDO. 4.1 INTRODUCCIÓN. ............................................................................. ¡ERROR! MARCADOR NO DEFINIDO. 4.1 ARQUITECTURA DE DESARROLLO Y FÍSICA DEL FRAMEWORK. .......... ¡ERROR! MARCADOR NO DEFINIDO. 4.2 INVENTARIO DE CLASES POR PAQUETE. ........................................... ¡ERROR! MARCADOR NO DEFINIDO. 4.3 CASOS DE PRUEBA. ........................................................................ ¡ERROR! MARCADOR NO DEFINIDO. 4.4 EJEMPLO DE IMPLEMENTACIÓN. ...................................................... ¡ERROR! MARCADOR NO DEFINIDO. 4.5 ANÁLISIS DE INFORMACIÓN. ........................................................... ¡ERROR! MARCADOR NO DEFINIDO. CONCLUSIONES:................................................................................................................................ ... 90 BIBLIOGRAFÍA. ......................................................................... ¡ERROR! MARCADOR NO DEFINIDO. GLOSARIO. ................................................................................. ¡ERROR! MARCADOR NO DEFINIDO. UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 2 INTRODUCCION. El presente trabajo está enfocado a la creación de un framework que contribuya a optimizar tiempo y mejorar de calidad en la infraestructura de software de proyectos, particularmente en sistemas que tienen como base arquitectónica el uso de la plataforma Java versión 1.3 o mayor en combinación con el uso de alguno de los siguientes motores de base de datos relacionales: MySQL versión 4.0 o superior, INFORMIX versión 7.3 o mayor o SQL Server versión 6.0 o mayor. El desarrollo de sistemas de información se compone de diferentes áreas de conocimiento tales como levantamiento de requerimientos, análisis y diseño orientado a objetos, metodologías de desarrollo, conocimientos técnicos de hardware y software dependiendo de la arquitectura a implantar y evidentemente lenguajes de programación. Adicionalmente, en la industria se han estado definiendo de hace tiempo a la fecha estándares mundiales para homogenizar y estabilizar la creación de productos de software para las diferentes tecnologías, ejemplos de tales estándares en el tiempo son la definición de C ANSI, SQL ANSI, JAVA, UML, J2EE, RUP, Microsoft .NET, AJAS, JavaScript, HTML, BPEL, XPDL, BPMN, etc. Así mismo existen organizaciones encargadas de conciliar, consolidar y publicar dichos estándares (IEEE, ANSI, OMG, ISO, CMMI, OASIS y W3C) que establecen las formas concretas de plasmar los productos generados para las áreas de conocimiento mencionadas, esto evidentemente enfocado a la búsqueda de homogeneizar, medir y controlar los tiempos necesarios de desarrollo de los sistemas así como simplificar el mantenimiento de los mismos, pudiendo así tener proyectos de desarrollo más grandes y ambiciosos; Proyectos en Internet o Intranet donde participende 50 a 500 personas, donde el beneficio al usuario final y responsabilidad y riesgo de éxito de las empresas o instituciones participantes es mayor. Ejemplos de estos sistemas en nuestro país en la actualidad, pueden ser los relacionados con el sector gobierno (Secretaría de Hacienda, IMSS, Secretaria de Gobernación), los cuales mediante la ley de transparencia hacen disponibles, sus bases de licitación en Internet. Otro ejemplo de este tipo de sistemas son los ubicados en el sector bancario donde ya no es necesario el papel para fichas de depósito, o retiro. Todos estos sistemas deben atender a millones de usuarios, asegurando la disponibilidad, exactitud y seguridad de los movimientos ejecutados, para la completa satisfacción de sus clientes. Para que las empresas de desarrollo de software, puedan permanecer en la competencia por el mercado del tipo de proyectos mencionados, es necesario contar con una infraestructura administrativa, hardware, software y recursos humanos especializada, dependiendo de la tecnología y necesidad del usuario. Los siguientes capítulos tienen como objetivo, guiar al lector a través de las diferentes fases del proceso de desarrollo del framework. El diagrama de componentes de la figura I, muestra la ubicación del framework a desarrollar dentro de la arquitectura de un sistema. Figura I, Diagrama de conceptual de componentes donde participa el framework. UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 3 Como se puede observar la capa del framework está ubicada entre la base de datos y la capa de reglas de negocio, por lo tanto sus usuarios son componentes de negocio de algún sistema, El presente trabajo utiliza como metodología de desarrollo el Proceso Unificado de Desarrollo de software, lo cual significa que el desarrollo del framework esta dirigido por la definición de casos de uso y la arquitectura. Es muy importante aclarar al lector que dada la ubicación y naturaleza del framework, el modelado de la fase análisis de los componentes participantes, será a muy bajo nivel, es decir, el negocio a modelar en los casos de uso en la fase de análisis está descrita en términos y definiciones de software, dado que es el contexto de negocio requerido. El capítulo uno describe brevemente las disciplinas que sustentan los conceptos del mapeo de objetos relacionales (Object Relational Mapping ORM), indicando su relevancia en la construcción del framework. El capítulo dos presenta la vista de casos de uso de la definición del framework, el capítulo tres, presenta la vista de lógica o modelo de diseño del framework, y por ultimo el capítulo 4, presenta la arquitectura física del sistema y sus relaciones en clases de código fuente Java. Finalmente se presentan las conclusiones, es importante aclarar que el presente trabajo no es una guía de cómo realizar un análisis, diseño o construcción de un sistema, por lo cual el lector debe tener conocimientos básicos de estos temas, de igual manera tampoco se pretende enseñar a programar utilizando Java o XML. UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 4 CAPITULO 1. Conceptos básicos. 1.1 Introducción. El presente capítulo tiene como meta inducir de forma general al lector en las áreas principales parte de la arquitectura del framework. Las cuales son: lenguaje Java, lenguaje XML, bases de datos relacionales, UML, Patrones de diseño y técnicas de mapeo de objetos a modelo entidad-relación. La figura 1.1 muestra la ubicación de soporte e importancia de cada una de las disciplinas. Como se puede ver en la figura 1.1, UML es un pilar de conocimiento vertical que apoya a la definición y modelado de las áreas del lado derecho, mientras que las debajo del rectángulo con el nombre framework ORM son, en orden de aparición de abajo hacia arriba, las que dan soporte horizontal al desarrollo. 1.2 Definición de framework. Según Ivar Jacobson, Grady Booch y James Rumbaugh autores del libro del Proceso Unificado de desarrollo de software, creadores de UML y de las metodologías mas representativas para el análisis y diseño orientado a objetos, el término de framework en la industria del software corresponde a una micro-arquitectura que proporciona una plantilla o templete incompleto para sistemas de un determinado contexto, el cual está compuesto por conjuntos de componentes relacionados. Por ejemplo: Java es un framework que permite crear programas independientes de la plataforma de hardware a través de la máquina virtual, en español, framework se traduce como marco de trabajo. La figura 1.2 muestra de manera simple el marco de trabajo de Java, el cual permite desarrollar código fuente de programación independiente del sistema operativo. Básicamente el marco de trabajo consiste en la creación de librerías y componentes de ejecución nativos en el sistemas operativo, las cuales son accedidas por el marco de trabajo de java (Maquina Virtual) el cual interpreta el programa conforme al sistema operativo en uso, así, el programador no se preocupa de estas actividades y utiliza las mismas sentencias de programación sin importar la plataforma de ejecución, en otras palabras la creación de objeto ventana en java crea una ventana en Windows, MAC, Linux o Uníx Solaris de manera transparente dependiendo de donde se ejecute el programa y con la maquina virtual adecuada instalada. La siguiente sección da más detalle Java. Figura 1.1 Diagrama que representa las áreas de conocimiento del framework a desarrollar. UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 5 1.3 Lenguaje de programación Java. El lenguaje de programación Java es utilizado para la implementación del framework. Las características principales por las cuales se trabaja con esta lenguaje obedecen básicamente a la portabilidad de código, es decir, los programas escritos en dicho lenguaje con el concepto de escribe una vez, ejecuta donde sea; adicionalmente Java* posee de forma intrínseca el uso de hilos* de ejecución y control de los mismos, así como un API* para el acceso a base de datos relacionales, JDBC* • Interfaces, clases y objetos. , además de todas las ventajas de los lenguajes orientados a objetos, Finalmente la portabilidad de Java hace posible que los frameworks implementados en este lenguaje, puedan participar en diferentes tipos de arquitecturas, desde aplicaciones Web, hasta aplicaciones de estación de trabajo o incluso en celulares, todo por el mismo precio de codificación del programa. Los siguientes párrafos describen de forma rápida los conceptos más importantes del lenguaje. Los principales componentes de construcción de java son: Clases: Son los entidades de información y comportamiento que implementan propiedades (atributos) y las acciones (métodos) que ejecutan los objetos. Una clase puede tanto implementar métodos de una interfaz así como implementar los propios o heredarlos de otra clase. Propiedades: Son atributos que definen características atómicas de la clase, por ejemplo una clase Persona puede tener una propiedad llamada edad Métodos: Son operaciones o acciones que puede realizar una clase. Continuando con el ejemplo de la clase Persona, una operación o método factible para una Persona puede ser dormir. Objeto: Un objeto es una instancia de clase; es una clase en tiempo de ejecución de programa. Encapsula un estado, que es definido por los valores de las propiedades del mismo, los cuales pueden ser alterados mediante la modificación de las propiedades o mediante la ejecución de alguno de los métodos existentes.* Ver sección de glosario y para información www.javasoft.com Figura 1.2 Diagrama conceptual del relación entre componentes de la plataforma de tiempo de ejecución java UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 6 Interfaz: Una interfaz solamente define tipos de atributos, y métodos, es decir una interfaz no puede tener instancias y ni sentencias de programación en sus métodos. • Paquetes. La definición de paquetes es un mecanismo de ámbito de nombres para clase e interfaces en java. El ámbito de nombres alcanza los siguientes resultados: Se agrupan clases e interfaces juntas Se permite que una clase o interfaz tenga el mismo nombre en diferentes ámbitos, es decir, en diferentes paquetes y pueden ser distinguidas por el nombre completo o calificado del ámbito. • Objetos en tiempo de ejecución. Los objetos en tiempo de ejecución son instancias de clase. En el caso de Java, un objeto siempre esta asociado a una máquina virtual Java, que aloja la memoria donde un objeto mantiene su estado y ejecuta el código byte-code que le representa. Una máquina virtual puede ejecutar uno o más objetos. Las máquinas virtuales pueden ser implementadas para diferentes dispositivos de hardware (PC, servidores, celulares, etc.) como procesos del sistema operativo. La ejecución del programa Java sigue el flujo de llamados entre métodos de clase y los retornos de manera secuencial de los mismos, o por medio de un hilo de ejecución (thread)*, alternativamente Java permite a cada programa, la creación y control de sus propios hilos de ejecución e incluso a través de algunas librerías la creación de instancias de objetos entre máquinas virtuales, la figura 1.31 , esquematiza el uso de diferentes hilos de ejecución, así como la existencia de varios objetos en la misma; finalmente también refleja la posibilidad de llamado a otras instancias de objetos a otros equipos. 1.4 Lenguaje de representación XML. El lenguaje XML (Extensible Markup Language) representa un importante paso en la representación de datos. Por lo general para la creación de archivos de configuración de almacenamiento de datos, se había recurrido a archivos de texto que utilizaban como separador de campos al carácter coma, el carácter pipe o algún otro sin estándar alguno a seguir. * Ver sección de glosario 1 La imagen pertenece al libro de Java Programming with CORBA, nombrado en la bibliografía Figura 1.3, Objetos Java en tiempo de ejecución UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 7 XML resuelve este problema definiendo una manera estándar de representar datos, una manera estándar para identificar los datos con su tipo, y una forma estándar de describir la estructura. XML es muy simple, de leer y entender el ser visto. Para mayor claridad a continuación se indican algunas de las cosas que XML no es: XML no es el reemplazo de HTML. Sin embargo existe una versión XML compatible con HTML, XML no define cómo representar datos en un navegador. XML no es una cura para todos los tipos de formatos, varios sectores de la industria siguen tratando de llegar a acuerdos sobre ello. XML no es un lenguaje de programación, XML permite describir datos, pero no permite describir cómo los datos serán procesados. El uso de XML como parte de la solución al framework ORM, obedece a que se requiere guardar en algún formato estándar, la definición de los mapeos de objetos a tablas de base de datos; esto se ve con mayor claridad en la sección 1.5 y 1.8 del presente capítulo. • Estructura estándar de un documento XML. La estructura de un documento XML se compone de un encabezado, y elementos, de los cuales uno debe ser raíz de los demás y dentro de él pueden haber más que tienen o no atributos; todo elemento incluye un tag de apertura <elemento> y uno de cierre </elemento>. El siguiente ejemplo muestra la estructura de un documento XML que realiza el mapeo de una clase java con nombre calificado com.sigmatao.unitTest.entidad.ClliSysDAO a una tabla clli_sys 1. <?xml version="1.0" encoding="ISO-8859-1"?> 2. <!-- Archivo de configuracion de clases O/R --> 3. <descriptores-clase> 4. <clase nombre="com.sigmatao.unitTest.entidad.ClliSysDAO" tabla="clli_sys"> 5. <atributo> 6. <cmp-pk>true</cmp-pk> 7. <cmp-clase>TipoSis</cmp-clase> 8. <cmp-bd>tipo_sis</cmp-bd> 9. <cmp-tipo>INTEGER</cmp-tipo> 10. <cmp-requerido>true</cmp-requerido> 11. <nulo>-2147483648</nulo> 12. <default></default> 13. </atributo> 14. <atributo> 15. <cmp-clase>TipoCodif</cmp-clase> 16. <cmp-bd>tipo_codif</cmp-bd> 17. <cmp-tipo>INTEGER</cmp-tipo> 18. <cmp-requerido>false</cmp-requerido> 19. <nulo>-2147483648</nulo> 20. </atributo> 21. <atributo> 22. <cmp-clase>Observaciones</cmp-clase> 23. <cmp-bd>observaciones</cmp-bd> 24. <cmp-tipo>VARCHAR</cmp-tipo> 25. <cmp-requerido>false</cmp-requerido> 26. <nulo>nulo</nulo> 27. </atributo> 28. <atributo> 29. <cmp-clase>CveFun</cmp-clase> 30. <cmp-bd>cve_fun</cmp-bd> 31. <cmp-tipo>INTEGER</cmp-tipo> 32. <cmp-requerido>false</cmp-requerido> 33. <nulo>-2147483648</nulo> 34. </atributo> 35. </clase> 36. </descriptores-clase> UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 8 El elemento clase de la línea 4 posee dos atributos uno se llama nombre el cual almacena el nombre calificado de la clase de mapeo y otro llamado tabla tiene el nombre de la tabla asociada a la clase. 1.5 Bases de datos entidad-relación. El objetivo principal del presente documento es lograr mejorar la productividad en la construcción del acceso, modificación y consulta de bases de datos relacionales a través del mapeo de clases a tablas, así que en esta sección describiremos brevemente en qué consiste una base de datos relacional y de que maneras puede ser explotada. Una base de datos relacional es como su nombre lo indica, un repositorio de información relacionada; la manera de estructurar el repositorio consiste en definir mediante un análisis y diseño de base de datos, las entidades, atributos y relaciones que deben existir para almacenar cierta información de negocio. A continuación se describen los componentes principales de la base de datos. • Entidad: Una entidad de base de datos o tabla es un concepto del negocio del cual se debe almacenar información; por lo general son sustantivos, en la descripción del caso de uso y cuando se tiene un modelo de objetos, las clases de análisis por lo general terminan siendo también entidades de base de datos. Por ejemplo en un sistema de nómina seguramente existe la tabla y la clase Empleado. • Atributos: Los atributos son las características inherentes a cada entidad, al igual que en las entidades, en un modelo de objetos por lo general las propiedades encontradas para las clases se convierten en los atributos de las entidades, Continuando con el ejemplo la entidad Empleado, ésta seguramente tiene las características o atributos: nombre, dirección, puesto, departamento y salario. • Relaciones: Las relaciones son la manera de modelar las asociaciones existentes entre las diferentes entidades, aquí la única posible relación con el modelo de objetos es la cardinalidad de la relación y nada más; La cardinalidad de la relación de una entidad con otra, puede ser cualquiera de las siguientes: Uno a uno: Una relación de este tipo significa que cada registro2 Uno a muchos: Esta relación representa quecada registro de la entidad C, puede estar asociada a uno o varios registros de la entidad D. Por ejemplo, una organización puede tener uno o varios departamentos. de la entidad A esta asociado a uno y sólo un registro de la entidad B. Por ejemplo, un empleado puede estar asociado sólo a un departamento de una organización. Muchos a Muchos: Esta relación es la más compleja de todas en el modelado de bases de datos relacionales, y representa que cada registro de una entidad D, puede estar asociado a muchos registros de la entidad F, y que la entidad F a su vez también tiene la característica de que cada unos de sus registros puede estas asociado a uno o muchos, registros de la entidad D. Por ejemplo Un empleado puede tener que desarrollar una o más actividades en su trabajo y una actividad puede se realizada por uno o mas empleados. Como es de suponerse, el modelo de base de datos en análisis sólo se describe con conceptos de negocio de manera que es un documento que apoya la comunicación con el usuario final siendo un indicador de compresión del negocio. En la fase de diseño, cada entidad y sus atributos es convertida a tablas con campos y estos tienen tipos de datos en el contexto del software. Como el lector puede intuir, el mapeo de objetos a tablas es bastante simple en concepto, sin embargo su implementación en software es más compleja, como se ve en la sección 1.8 del presente capítulo. La manera de explotar y afectar la información de una base de datos relacional, es por estándar a través del uso del lenguaje estructurado de consulta, SQL (Structure Query Language), este lenguaje dio pie a que los programas desarrollados pudiesen ser independientes de la base de datos donde se construyeron 2 Una registro es un conjunto de valores asociados a los atributos de una entidad, por ejemplo en la tabla Empleado pueden existir muchos registros con la información de muchas personas UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 9 simplemente utilizando el estándar mundial; es decir un programa en C con SQL ANSI puede funcionar utilizando la base de datos MySQL, Oracle, Informix o SQL Server3 1.6 Lenguaje unificado de modelado UML. . Con la aparición de la tecnología cliente/servidor, Microsoft liberó ODBC (Open DataBase Connectivity) con la cual desde cualquier lenguaje de programación que se pueda ejecutar en la plataforma Microsoft Windows u otro sistema operativo que soporte librerías ODBC se puede conectar y realizar sentencias SQL para explotar la información de una base de datos. Evidentemente Sun Microsystems no tardo en reaccionar y liberó las librerías JDBC (Java DataBase Connectivity) con las cuales un programa puede conectarse y explotar una base de datos a través de SQL. Dado que Java es independiente de la plataforma, entonces los programas escritos en Java con JDBC y SQL ANSI son independientes de la plataforma de hardware y del motor de base de datos. El lenguaje unificado de modelado (UML por sus siglas en ingles) tiene como meta ser utilizado como herramienta para la representación de negocios de sistemas de software que tienen de premisa utilizar la implementación de algún lenguaje orientado a objetos; en teoría modela cualquier construcción que posea una estructura estática y dinámica. En orden de mantener estás amplias capacidades, el lenguaje está definido para ser extensible y suficientemente general para permitir el modelado de sistemas diversos, evitando la complejidad y especialización Esta sección pretende hacer una rápida introducción a UML, con la intención de esclarecer y homogeneizar conceptos con respecto a los diferentes artefactos4 Vistas: Las vistas muestran diferentes aspectos del sistema a ser modelado, una vista no es un diagrama, sino más bien una abstracción, que consiste de un número determinado de diagramas. Sólo a través de la definición de un numero de vistas es posible mostrar un aspecto particular del sistema y se puede ver un panorama completo de lo que se construirá. del lenguaje, los cuales son ocupados en el presente trabajo. Los artefactos a describir son: Diagramas: Los diagramas son las gráficas de describen el contenido de una vista. UML5 tiene nueve diferentes tipos de diagramas que se utilizan en combinación para proveer todas las vistas del sistema. 1.6.1 Vistas. Modelar un sistema complejo es una tarea exhaustiva, de manera ideal, es descrito en un solo diagrama que muestra ambiguamente el panorama completo de su estructura, lo cual lo hace fácil de comunicar y comprender. Sin embargo, esto es usualmente imposible. Un solo diagrama no puede capturar toda la información necesaria para describir un sistema. La descripción por lo general es realizada por diferentes aspectos: funcionales (estructura estática e interacciones dinámicas), no funcionales (rendimiento, escalabilidad, despliegue, etc.) u organizacionales (organización del, trabajo, mapa de módulos de codificación, etc.). Por lo tanto, un sistema es descrito por un número de vistas, donde cada vista representa una proyección de la descripción completa, mostrando un aspecto particular cada vez. 3 Proveedores de motores de bases de datos relacionales 4 Un artefacto es una pieza de trabajo tangible creada por alguno de los roles participantes en el desarrollo del software 5 Para mas información ver www.uml.org UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 10 Vista de casos de uso. La vista de casos de uso describe el funcionamiento del sistema a desarrollar encontrando los actores y casos de uso que interactúan entre sí en el sistema, los actores pueden ser distintos perfiles de usuarios (administradores, ventas, contadores, etc.) otro sistema o cualquier entidad externa al mismo. Parte del objetivo de los artefactos de esta vista es permitir una interacción del equipo de desarrollo con el cliente final mucho mas eficaz, los productos generados en esta vista son: descripciones de casos de uso y diagramas de casos de uso, los cuales son usados, por los analistas orientados a objetos para hacer los que se conoce en el Proceso Unificado de Desarrollo de software como realizaciones de casos de uso, lo cual consiste en crear los diagramas de clases de análisis y diagramas de secuencia de análisis para uno de los casos de uso encontrados, esto a partir de su descripción, lo más importante, de esta vista son las descripciones, las cuales plasman el alcance funcional del sistema. Como ya se menciono en párrafos anteriores cada descripción hecha para el trabajo actual será en un nivel muy técnico dado el contexto donde se ubica el framework es dentro del sistema, por lo que, los evidentes actores del framework serán las clases java que lo utilicen. De manera muy simple la descripción de un caso de uso es el diálogo sostenido entre un actor y el sistema, para ejecutar una operación atómica, cada descripción debe contener al menos los siguientes puntos: Nombre de caso de uso: Es el nombre que identifica la transacción de negocio a describir, por ejemplo “Registra contribuyente”, siempre debe indica con un verbo en tercera persona. Objetivo: Es la meta que da razón de ser a la existencia del caso de uso. Precondiciones: Son las actividades o insumos necesarios para que se pueda ejecutar el caso de uso. Curso Básico: Esta sección describe el dialogo entre el actor y el sistema para el flujo de éxito más común, solo existe uno por descripción y normalmente es conocido como el “Happy Path”. Por ejemplo: “Registra persona física” Curso Alterno Esta sección describe el dialogo entre el actor y el sistema para flujos alternos más específicos dependiendo un actoro ciertas precondiciones, (pueden existir varios por descripción). Por ejemplo: “Registra persona moral”. Cursos de excepción: Esta sección describe el dialogo entre al actor y el sistema para cuando se presentan inconsistencias, errores o problemas en el curso básico o alterno, por ejemplo: “Persona física ya registrada en otra entidad federativa”. Poscondiciones: Es el estado final del sistema al termino de la ejecución de caso de uso. A partir de esta descripción se encuentran las clase candidatas iniciales para el sistema y las operaciones de las mismas. Finalmente ésta vista es la base y guía de todas las demás. Vista lógica. La vista lógica describe cómo se proveerá la funcionalidad del sistema en términos de hardware y software, está puramente enfocada a diseñadores orientados objetos y desarrolladores. En contraste con la vista de casos de uso, la vista lógica ve hacia dentro del sistema, describiendo la estructura estática y dinámica del mismo. Esta vista, como se menciono en la sección anterior es conducida por los casos de uso, es decir por las realizaciones de análisis de la vista de casos de uso, de manera más concreta por los diagramas de clase y secuencia de cada caso de uso los cuales sirven ahora como entrada para la realización de los casos de uso en diseño, así ésta vista redefine o detalla en el contexto de construcción, la estructura estática y dinámica de cada caso de uso, La estructura estática es descrita mediante diagramas de clases y la estructura dinámica se describe mediante diagramas de estados, secuencia, colaboración o actividades. UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 11 Vista de componentes. Cada una de las clases encontradas en la vista lógica a partir de las realizaciones de diseño se traducirán finalmente en algún componente de hardware o software, por ejemplo una librería compartida, un archivo ejecutable, o un documento dinámico. Estos componentes se agrupan en módulos por tener objetivos similares o pertenecer a la misma solución. La vista de componentes es una descripción de los módulos implementados y sus dependencias. Es principalmente para desarrolladores y es representada por el diagrama de componentes. Vista de despliegue. Finalmente la vista de despliegue muestra las ubicaciones físicas del sistema, es decir indica donde residirá cada módulo o componente desarrollado del sistema en equipos tales como computadoras o dispositivos (a los cuales se les conoce en UML como nodos) y como se comunican unos con otros. La vista de despliegue es para desarrolladores, integradores e ingenieros de pruebas, y está representada por el diagrama de despliegue. De manera concreta, es un mapa que muestra cómo los componentes son posicionados en la arquitectura física del sistema. 1.6.2 Diagramas. Los diagramas son representaciones gráficas que modelan aspectos o conceptos del sistema. Como se comentó en las anteriores secciones cada vista posee un conjunto de diagramas que tienen la meta de modelar los aspectos relevantes de cada fase para la construcción de cada caso de uso. Diagramas de casos de uso. Un diagrama de casos de uso modela un número de actores externos al sistema y su interrelación, ver figura 1.4. Dependiendo de la complejidad del sistema se pueden tener diagramas de casos de uso para cada módulo o grupos de casos de uso asociados, de manera que se pueden ver las dependencias entre ellos y las diferentes perspectivas de los mismos dependiendo de si es usado por más de un actor. Figura 1.4 diagrama de casos de uso de una aseguradora. UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 12 Diagramas de clases. Un diagrama de clases muestra la estructura estática de las clases de un sistema o una realización de un caso de uso, y representan las cosas que son manejadas por el sistema. Las clases se pueden relacionar unas con otras de diferentes maneras, por asociación (conectadas una con otra), dependencia (una clases depende o usa otra clase), especialización (una clase es una especialización de otra clase) o por paquete (agrupación de las clases como una unidad). Todas éstas relaciones pueden ser representadas en diagramas de clases en términos de propiedades y métodos. El diagrama es considerado estático en el sentido de que la estructura descrita es siempre válida en cualquier momento del tiempo de ejecución del sistema. Este diagrama tiene cierta semejanza con un diagrama Entidad – Relación. Diagramas de estados. Un diagrama de estados es típicamente un complemento a la descripción de una clase. Muestra todos los estados posibles que los objetos de una clase pueden tener, y qué eventos provocan los cambios de estado (ver figura 1.6). Un evento puede ser disparado por otro objeto que le envía un mensaje – por ejemplo, indicando que un tiempo especifico se ha alcanzado- o que alguna condición ha sido completada: Un cambio de estado es conocido con el término de transición. Una transición puede además tener una acción asociada que especifica que debe ser realizada como consecuencia de la transición. Figura 1.5, diagrama de clases de un inventario. Figura 1.6, diagrama de estados de un elevador. UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 13 Los diagramas de estados no son realizados para todas las clases, sólo para aquéllas que tienen un número bien definido de estados y donde el comportamiento de las clases es afectado y cambiado por diferentes estados. Diagramas de secuencia. Un diagrama de secuencia muestra la colaboración dinámica entre un determinado número de objetos, como se muestra en la figura 1.7; el aspecto más importante de este tipo de diagramas es modelar la secuencia de mensajes enviados entre objetos, cada mensaje simboliza el llamado a un método de una clase a otra, representando una foto del comportamiento en tiempo de ejecución del sistema o de la realización de un caso de uso. En un diagrama de secuencia se representan por rectángulos con líneas verticales en la parte inferior y el tiempo de ejecución transcurre de arriba hacia abajo. Los mensajes de envío o llamados métodos son representados por líneas con puntas de flecha, entre las líneas verticales de los objetos. La especificación del tiempo y los comentarios se indican en texto el margen del diagrama. Diagramas de componentes. Un diagrama de componentes muestra la estructura física del código en términos de piezas de código. Un componente puede ser un archivo fuente compilado, un archivo binario, o una librería ejecutable. Permitiendo un mapeo de la vista lógica a la vista de componentes. La dependencia entre componentes es representada por flechas, permitiendo identificar qué componentes son afectados por otros. Los componentes también pueden ser representados por cualquiera de las interfaces que exponen, tales como la interfaces de componentes OLE/COM6 o JavaBeans7 , además los componentes pueden ser agrupados en paquetes conforme a su propósito u objetivo. 6 Librerías compartidas de sistemas operativos Microsoft, para la definición de OLE y COM, ver la sección glosario 7 Librearías compartidas para aplicaciones con interfaz grafica en Java Figura 1.7, diagrama de secuencia de un servidor de impresión. Figura 1.8, diagrama de componentes de una pantalla, construida con C++. UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 14 Diagramas de deployment.El diagrama de deployment o despliegue representa la arquitectura física de hardware y software del sistema, se pueden modelar las computadoras y dispositivos (nodos) actuales, incluyendo las conexiones que tienen entre ellos; se puede además representar el tipo de comunicación a utilizar en estas conexiones. Dentro de los nodos, se pueden incluir los componentes ejecutables y objetos alojados, para mostrar las unidades de software que se ejecutan en cada uno. Como se comentó previamente, el diagrama de deployment representa la vista de deployment, que describe la arquitectura física de un sistema; esto es lejano de la descripción funcional en la vista de caso de uso. Sin embargo, con un modelo bien definido, es posible navegar todo el camino de un nodo de la arquitectura del sistema hacia sus componentes y de ahí a sus clases, interacciones y finalmente casos de uso8 . 1.7 Patrones de diseño. Hasta el momento se ha hablado acerca de los dos pilares de conocimiento del framework ORM: Lenguaje Java y XML, también se ha descrito y explicado el lenguaje unificado de modelado UML. Esta sección aterriza los conceptos planteados hasta el momento, es decir combina los conceptos de la programación orientada a objetos y cómo modelarla a través de UML representando patrones que dan solución a un problema en específico. El propósito de los patrones de diseño es recopilar la experiencia en el diseño orientado a objetos, para que otros puedan reutilizar estas soluciones, generando de esta manera un conjunto de soluciones hechas por gente experimentada, ya probadas en otros sistemas. Los patrones de diseño ayudan a escoger alternativas de modelado en la fase de diseño y otorgan cualidades que hacen al sistema reutilizable y eliminan las alternativas que lo comprometen. Los patrones de diseño pueden también mejorar la documentación y el mantenimiento de los sistemas existentes proveyendo una especificación explícita de clases e interacciones entre objetos, así como su funcionamiento implícito. En otras palabras, los patrones ayudan a realizar diseños de una manera correcta y rápida. 8 A esto se le conoce en el Proceso Unificado de Desarrollo de software como traza Figura 1.9, diagrama de deployment de una aplicación cliente, servidor, tres capas (cliente, midleware y base de datos). UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 15 Definición. La definición de Chistopher Alexander, arquitecto de la industria de la construcción, de un patrón de diseño es: “Cada patrón describe un problema el cual aparece una y otra vez en nuestro ambiente, y se describe el núcleo de la solución a dicho problema, el cual es un camino para utilizar esa solución millones de veces, sin tener que resolverlo una y otra vez”9 Nombre del patrón: éste puede describir el problema del diseño, su solución, y sus consecuencias en una o dos palabras, Nombrar un patrón incrementa inmediatamente el vocabulario de diseño. Esto nos permite diseñar a un alto nivel de abstracción, de manera que se tiene un vocabulario de patrones, y con ello se puede hablar con los colaboradores del proyecto, como si se tratase de algún deporte. . Como es de esperarse, Alexander se refería a patrones en construcciones y ciudades. Sin embargo también existen diferentes catálogos de patrones que ayudan a la industria del software; por ejemplo, existen catálogos de patrones de soluciones de análisis para negocios específicos, de programación, de modelos de base de datos Entidad-Relación y evidentemente para la fase de diseño y arquitectura de sistemas. El framework ORM tiene como base varios patrones de diseño que lo ayudan a ser entendible, extensible y reutilizable. Características. En general un patrón de diseño tiene cuatro elementos esenciales: Problema: describe cuándo aplicar un patrón, explica el problema y su contexto. Debe de describir un problema de diseño en específico. Algunas veces el problema incluirá una lista de condiciones que deben conocerse antes de su uso para que tenga sentido su aplicación. Solución: describe los elementos que dan forma al diseño, sus relaciones, responsabilidades y colaboraciones entre clases. La solución no describe un diseño en particular o una implementación en concreto, dado que un patrón es una plantilla que puede ser aplicada, en diferentes situaciones, en lugar de ello, el patrón provee una descripción abstracta de un problema de diseño con el agrupamiento de ciertos elementos que pueden resolverlo. Consecuencias: son los resultados y los márgenes de factibilidad de aplicar un patrón. A pesar de que las consecuencias son raramente mencionadas cuando se describen decisiones de diseño, son críticas para evaluar alternativas de diseño y para entender el costo-beneficio de aplicar un patrón10 En resumen, los patrones son descripciones de objetos y clases intercomunicadas, que se adaptan para resolver un problema de diseño en un contexto particular. . Catálogo de patrones GoF. Existen muchos y muy diversos catálogos de patrones de diseño (por ejemplo el catálogo de patrones J2EE de Sun Microsystems), sin embargo todos los catálogos que el autor del presente trabajo conoce hacen referencia base al catálogo de patrones GoF. La palabra GoF corresponde a la contracción en inglés de Gang of Four (banda de los cuatro) nombre se le dio al primer grupo de diseñadores que crearon catálogos de patrones de diseño apegados a la tecnología de la programación orientada a objetos, el presente trabajo esta sustentado en el diseño de varios de los patrones de este catálogo. 9 Definición descrita en el libro de Erick Gamma, Desing Patterns y reusable objects 10 Para mayor información se puede consultar dirección www.patterndigest.com UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 16 Categorías de patrones de diseño del catálogo GoF. La siguiente es una lista de las categorías establecidas por el catálogo de patrones de diseño de GoF: Patrones de creación- Muestran la guía de cómo crear objetos cuando sus creaciones requieren tomar decisiones. Estas decisiones normalmente serán resueltas dinámicamente decidiendo sobre que tipos de instancias de clases crear o sobre qué objetos se delegan responsabilidades (ver tabla 1.1). Patrones estructurales - Describen la forma en que diferentes tipos de objetos pueden ser organizados para trabajar unos con otros (ver tabla 1.2). Patrones de comportamiento- Se utilizan para organizar, manejar y combinar comportamientos (ver tabla 1.3). Lista de patrones de diseño GoF. La siguiente lista es una referencia parcial por categoría de los patrones GoF. Tabla 1.1, Patrones de creación. Nombre Descripción Abstract Factory Proporciona una interfaz para crear familias de objetos relacionados o dependientes sin especificar su clase concreta. Builder Permite a un objeto construir otro más complejo especificando sólo su tipo y contenido. Factory Method Define una interfaz para crear un objeto, dejando a las subclases decidir el tipo específico. Prototype Permite a un objeto crear instancias personalizadas sin conocer su clase exacta o los detalles de cómo crearlos. Singleton Garantiza que solamente se crea una instancia de la clase y provee un punto de acceso global a él. Tabla 1.2, Patrones de estructura. Nombre Descripción Adapter Convierte la interfaz que ofrece una clase en otra esperada por los clientes. Bridge Desacopla una abstracción de su implementación y les permite variar independientemente. Composite Permite construir objetos complejosmediante composición recursiva de objetos similares. Decorator Extiende la funcionalidad de un objeto dinámicamente de tal modo que es transparente a sus clientes. Facade Simplifica los accesos a un conjunto de objetos relacionados proporcionando un objeto de comunicación. Flyweight Usa la compartición para dar soporte a un gran número de objetos de grano fino de forma eficiente. Proxy Proporciona un objeto con el que controlamos el acceso a otro objeto. Tabla 1.3, Patrones de comportamiento. Nombre Descripción Chain of Responsability Evita el acoplamiento entre quien envía una petición y el receptor de la misma. Command Encapsula una petición de un comando como un objeto. Interpreter Dado un lenguaje, define una representación para su gramática y permite UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 17 Nombre Descripción interpretar sus sentencias. Iterator Acceso secuencial a los elementos de una colección. Mediator Define una comunicación simplificada entre clases. Memento Captura y restaura un estado interno de un objeto. Observer Una forma de notificar cambios a diferentes clases dependientes. State Modifica el comportamiento de un objeto cuando su estado interno cambia. Strategy Define una familia de algoritmos, encapsula cada uno y los hace intercambiables. Template Method Define un esqueleto de un algoritmo y delega partes concretas del mismo a las subclases Visitor Representa una operación que será realizada sobre los elementos de una estructura de objetos, permitiendo definir nuevas operaciones sin cambiar las clases de los elementos sobre los que opera. 1.8 Mapeo de objetos a bases de datos Entidad - Relación. Esta sección es la culminación de la combinación de los conocimientos en el modelado de bases de datos relaciones, modelado orientado a objetos, programación en lenguajes orientados a objetos, patrones de diseño y UML de la figura 1.1, los cuales dan como resultado las técnicas que se mencionan aquí. El rol del DBA. La figura 1.10, indica que el rol que juega un DBA, cuando se está utilizando mapeo de objetos a relaciones y tablas, se centra en tres actividades: 1. Mapeo (Mapping): La meta básica es determinar la estrategia efectiva para llevar a cabo la persistencia de objetos que representan las tablas. 2. Implementar el mapeo (Implementing mappings): Consiste en crear los componentes necesarios de mapeo, tales como descriptores XML que tienen la información del mapeo entre las clases y las tablas los cuales deben ser mantenidos ante los posibles cambios. 3. Realizar afinación (Performance tuning): Consiste en afinar el rendimiento de la implementación. Algo interesante de la figura 1.10, es que el DBA y los desarrolladores de la aplicación trabajan en conjunto en las tres actividades. Trabajando en conjunto se conduce al éxito del desarrollo de software de manera ágil. La realización de la afinación no es parte del alcance del presente documento por lo que no será comentada. Figura 1.10, Relación en la construcción de un sistema entre el DBA y un programador UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 18 Cuando se aprende a realizar el mapeo de objetos a bases de datos relacionales, el lugar para empezar de forma inmediata es con las propiedades de las clases. Una propiedad tiene una representación con cero o más columnas de una tabla en una base de datos relacional, no todas las propiedades son persistentes11 y algunos son datos calculados, por ejemplo el promedio de un alumno no es almacenado en base de datos, más bien se almacenan las calificaciones. La manera más sencilla de realizar el mapeo es entre propiedades de clase y campos de tablas uno a uno, conservando las mismas características en tipos y longitudes, por ejemplo una propiedad java.lang.String contra un campo VARCHAR. La figura 1.11, representa a un diagrama de clases UML y el modelo físico de datos, ambos diagramas muestran un subconjunto de un modelo de dominio de un sistema general de ordenes, como se puede ver la propiedad DateFulfilled de la clase Order mapea a la columna dataFulFilled de la tabla Order y que la propiedad numberOrdered de la clase OrderItem mapea a la columna NumberOrdered de la tabla OrderItem. Mapeo meta-data La tabla 1.4, muestra los datos representando los mapeos de propiedades para persistir la información de las clases Order y OrderItem de la figura 1.11, Esta tabla es conocida como meta-data y este concepto es crítico para la funcionalidad de los framework de persistencia, los cuales son una estrategia de encapsulado que puede agilizar las técnicas de base de datos. Tabla 1.4, Mapeo propiedad – columna de un sistema de órdenes. Propiedad Columna Order.orderID Order.OrderID Order.dateOrdered Order.DateOrdered Order.dateFulfilled Order.DateFulfilled 11 Termino utilizado en la industria del software para indicar que algo debe ser perdurable, perdurable en base de datos, sistema operativo, etc. Figura 1.11, Mapeo de clases a tablas de un diagrama de clases UML a un físico de base de datos UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 19 Propiedad Columna Order.getTotalTax() Order.Tax Order.subtotalBeforeTax Order.SubtotalBeforeTax Order.shipTo.personID Order.ShipToContactID Order.billTo.personID Order.BillToContactID Order.lastUpdate Order.LastUpdate OrderItem.ordered OrderItem.OrderID Order.orderItems.position(orderItem) OrderItem.ItemSequence OrderItem.item.number OrderItem.ItemNo OrderItem.numberOrdered OrderItem.NumberOrdered OrderItem.lastUpdate OrderItem.LastUpdate Mapeo de estructuras de herencia Las base de datos relacionales no soportan propiamente la herencia, esto provoca forzar el mapeo de estructura de herencia dentro del esquema de objetos a un esquema de base de datos. El concepto de herencia da un giro interesante cuando se trata de guardar objetos dentro de una base de datos relacional. Y la pregunta que resalta es ¿cómo se puede organizar a los atributos heredados dentro del modelo?. Para contestar esta pregunta existen las siguientes técnicas: • Mapeo de cada jerarquía12 • Mapeo de cada clase concreta completa de una clase en una sola tabla – Siguiendo esta estrategia se almacena todos los atributos de las clases en una sola tabla. 12 • Mapeo de cada clase a su propia tabla – Siguiendo esta estrategia, se crea una tabla por clase, con una columna por atributo de clase de negocio y cualquier información de identificación necesaria. a su propia tabla – Con este esquema una tabla es creada por cada clase concreta, cada tabla incluye los atributos de ella y los de sus derivadas. • Mapeo de las clases dentro de una estructura de tabla general – Esta estrategia es para realizar el mapeo de estructuras de herencia en una base de datos relacional; es un enfoque dirigido por meta-datos para el mapeo de las clases con sus tablas respectivas. La tabla 1.5 muestra las ventajas y desventajas de cada técnica. 12 Ver glosario. UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 20 Tabla 1.5, Tabla de ventajas y desventajas en el mapeo. Estrategia Ventajas Desventajas Cuando usar Una tabla por jerarquía - Enfoque sencillo - Fácil de agregar nuevas clases, sólo se requiere agregar nuevas columnas para los datos adicionales. - Soporta polimorfismo simplemente cambiando los tipos del registro. - El acceso a la base de datos el rápido, dado quelos datos están en una tabla. - La realización de reportes es muy simple, dato que los datos se encuentran en una sola tabla. - La dependencia dentro de la jerarquía de clases se incrementa, dado que todas las clases están asociadas a una sola tabla. Un cambio en una clase puede afectar a la tabla única que a su vez impactará a las demás clases en la jerarquía. - Espacio potencial desperdiciado en la base de datos. - La tabla puede crecer rápidamente en jerarquías. Ésta es una buena estrategia para jerarquías simples o poco profundas, donde es poco el traslape entre tipos dentro de la jerarquía. Una tabla por clase concreta - La realización de reportes, dado que todos los datos necesarios están almacenados, accediendo por una sola clase y una sola tabla. - Buen rendimiento para acceso a un solo objeto de datos. - Cuando se modifica una clase, se necesita modificar su tabla asociada y todas las subclases involucradas. - Es difícil de mantener múltiples roles y continuar manteniendo la integridad de los datos. Cuando el cambio de tipos o traslapes entre los tipos es raro. Una tabla por clase - Fácil de entender, dado que se tiene un mapeo uno a uno. - Soporta polimorfismo, solamente se tienen registros de la tabla apropiada para cada clase. - Las súper clases son fáciles de modificar y añadir nuevas subclases que solamente modifican una tabla. - El tamaño de los datos crece en proporción al crecimiento del numero de objetos. - Hay muchas tablas en la base de datos, una por clase. - Potencialmente toma más tiempo realizar consultas, dado que se tienen que acceder a múltiples tablas; este problema se puede evitar, si se diseña correctamente la base de datos. - La generación de reportes es difícil, dado que se tienen que acceder a diferentes tablas o crear vistas para las consultas deseadas. Cuando hay un traslape significativo entre tipos o cuando el cambio de tipos es común. UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 21 Tabla 1.2, Tabla de ventajas y desventajas en el mapeo, Continuación. Estrategia Ventajas Desventajas Cuando usar Esquema genérico - Es una ventaja cuando se desea encapsular la base de datos mediante un framework de persistencia. - Se pueden extender para proveer un meta-data que soporte un amplio rango de tipos de mapeo, incluyendo mapeo de relaciones. De manera rápida es el inicio de motor de mapeo de datos ORM. - Técnicas muy avanzadas que pueden dificultar su implantación al principio. - Sólo funciona para pequeñas cantidades de información, porque se necesita acceder a múltiples tablas para crear un solo objeto de mapeo. - Se necesita al menos un administrador que mantenga la información del meta-data. - La generación de reportes puede ser muy compleja dado que se requiere acceder a múltiples registros. Para aplicaciones complejas con cantidades pequeñas de información, o para aplicaciones donde el acceso a datos no es muy común o bien puede cargar caches13. Mapeo de relaciones de objetos. En adición a las características de mapeo de propiedades y mapeo de herencia, se necesita entender los conceptos de mapeo de relaciones. Hay tres tipos de relaciones entre objetos para realizar el mapeo: asociación, agregación y composición. Tipos de relaciones. Hay tres categorías de relaciones entre objetos que se necesitan conocer para el mapeo. La primera categoría es basa en la multiplicidad tal y como se menciono a la sección de base de datos e incluye tres tipos: • Relaciones Uno a Uno - Ésta es una relación donde el máximo de cada una de las multiplicidades involucradas es uno. Un ejemplo de esta relación es la definida entre Employee y Position de la figura 1.13. • Relaciones uno a muchos – También conocida como la relación de muchos a uno, esto ocurre cuando una de la multiplicidades es uno y la otra es mayor que uno. Un ejemplo de esta relación es la definida entre Employee y Division en la figura 1.13. • Relaciones de muchos a muchos - Ésta es una relación donde el máximo de ambas multiplicidades son mayor a uno. Un ejemplo de esta relación es la definida en la relación entre Employee y Task en la figura 1.13. 13 Término utilizado en la industria del software para indicar que se almacena en memoria cierta información. UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 22 La segunda categoría esta basada en la dirección y contiene dos tipos, relaciones uni-direccionales y relaciones bi-direccionales: • Relación uni-direccional - Una relación uni-direccional es cuando un objeto conoce acerca de otro(s) con los que está relacionado pero los otros objetos no conocen al objeto original. Un ejemplo de esta relación es entre Employee y Position en la figura de abajo. • Relación bi-direccional - Una relación bi-direccional existe cuando los objetos involucrados en ella se conocen mutuamente. Un ejemplo de esta relación esta definida entre Employee y Division en la figura de abajo. Todos los conceptos presentados en este capitulo son la base para las fases de análisis, diseño y construcción de la implementación del framework ORM del presente trabajo. Figura 1.13 Diagrama de clases de una empresa la cual tiene las clases Posición, Empleado, actividad y división. UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 23 CAPITULO 2. Fase de análisis. 2.1 Introducción. El objetivo del capitulo es definir el alcance del framework a desarrollar, a través de las descripciones de los casos de uso de desarrollo, las cuales parten de las áreas del conocimiento mencionadas en el capitulo uno. Cada descripción de caso de uso es realizado a través de: diagrama de casos de uso, diagramas de clases; diagramas de secuencia y/o diagramas de estados para encontrar las clases de análisis que serán base del framework. Como se mencionó en el capítulo anterior, en el Proceso Unificado de Desarrollo de Software, la palabra realizar significa, tomar una descripción de caso de uso y encontrar las clases de análisis asociadas a través de los diagramas ya mencionados. Por lo tanto se presentan inicialmente los grupos existentes de casos de uso llamados paquetes y para cada uno se muestra su realización. Para los diferentes artefactos (casos de uso, diagramas, etc.), se utiliza la siguiente nomenclatura en prefijos: CU en casos de uso y sus descripciones, DCU para diagramas de casos de uso, DSA y DCA para diagramas de secuencia de análisis y diagramas de clases de análisis, DSD y DCD para diagramas de secuencia y clases de diseño respectivamente, finalmente DED, DC, DD para diagramas de estados diseño, diagramas de componentes y diagramas de deployment. 2.2 Casos de uso. Paquetes de análisis. Los paquetes2 • Componentes de acceso de base de datos y control de transacciones – Este paquete contiene las clases relacionadas con la abstracción del API JDBC para simplificación de su uso y el control de transacciones del mismo. definidos a continuación tienen dos objetivos, el primero agrupa clases del framework que hacen uso del API JDBC, el segundo agrupa las clases de mapeo ORM, que explotan las clases del primer paquete para automatizar la construcción de sentencias SQL y controlar el uso de los componentes generales de acceso de base de datos y control de transacciones. La arquitectura del framework está dividida entonces en: • Componentes ORM (Object Relacional Mapping)– Paquete que contiene los componentes de mapeo ORM del framework Actores Para la realización de la vista de casosde uso, parte de los artefactos de análisis a encontrar son los actores14 14 Ver glosario. . Los actores como se menciona en el capítulo uno, sección UML, son entidades externas al sistema, las cuales interactúan con los casos de uso definidos. En el presente trabajo sólo existe un actor, el cual al igual que las descripciones de caso de uso, tiene que ver con el contexto donde se encuentra el framework: Clase Java - Este actor representa a cualquier clase Java que hace uso de las clases del framework. UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 24 Casos de uso por paquete Las siguientes tablas, listan los casos de uso por paquete de análisis. Cada uno de ellos está descrito para el uso de JDBC o Tomcat 4.1.12 Datasource, para acceso a bases de datos. Tabla 2.1, Casos de uso del paquete de Componentes de acceso de base de datos y control de transacciones. Nombre Descripción CU_Abrir conexión de base de datos Realiza la apertura de una conexión de base de datos por conexión directa JDBC o por un Datasource. CU_Afectar información de base de datos Realiza el manejo de los movimientos de actualización, inserción o eliminación de información de la base de datos en aplicaciones. CU_Cerrar conexión de base de datos Realiza el cierre de una conexión de base de datos en aplicaciones ya se de una conexión directa vía JDBC o por un conexión de Datasource. CU_Consultar información de base de datos Realiza el manejo de las consultas hacia listas dinámicas por conjuntos de resultados de JDBC o en colecciones de objetos específicos Java desde la conexión de base de datos en aplicaciones. CU_Controlar conexión de base de datos Realiza el control de la apertura, uso y cierre de una conexión de base de datos en aplicaciones. CU_Controlar transacciones de base de datos Realiza el control de la apertura, commit o rollback de transacciones planas y anidadas de base de datos en aplicaciones. Tabla 2.2, Casos del uso del paquete Componentes ORM Nombre Descripción CU_Actualizar información Realiza actualizaciones por llave primaria sobre una entidad de base de datos a través de un javaBean entidad que tiene una correspondencia campo a campo con la misma CU_Consultar información Realiza consultas completas o filtradas sobre una entidad de base de datos a través de una instancia de un| javaBean de entidad que tiene una correspondencia campo a campo con la misma CU_Eliminar información Realiza eliminaciones por llave primaria o por filtro sobre una entidad de base de datos a través de un javaBean entidad que tiene una correspondencia campo a campo con la misma CU_Insertar información Realiza inserciones sobre una entidad de base de datos a través de un javaBean entidad que tiene una correspondencia campo a campo con la misma CU_Mapeo de tabla de base de datos a clase javaBean entidad Realiza el mapeo de una tabla de base de datos sobre una entidad de una instancia de un javaBean de entidad UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 25 Diagramas de casos de uso Las figuras 2.1 y 2.2, son diagramas de casos de uso que representan las relaciones existentes entre los mismos por paquete. Figura 2.1, Diagrama de casos de uso del paquete de componentes de acceso de base de datos y ejecución de transacciones. Figura 2.2, Diagrama de casos de uso del paquete de componentes ORM. UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 26 2.2.1 Realización de los casos de uso del paquete de componentes de acceso de base de datos y ejecución de transacciones. La presente sección muestra las descripciones de cada uno de los casos de uso del paquete de análisis de componentes de acceso de base de datos y ejecución de transacciones, junto con sus diagramas de realización (diagramas de secuencia y clases). Los diagramas de secuencia en la fase de análisis son el flujo de actividades a realizar por el sistema expresado a través de mensajes entre el actor y las clases. El diagrama de clases simplemente indica las relaciones entre las clases encontradas. Por lo tanto cada actividad que es comentada mientras dialoga el actor con el sistema en la descripción de caso de uso, debe estar reflejada en la realización de sus diagramas de secuencia, dependiendo las características del caso de uso, la realización puede necesitar uno o varios diagramas de secuencia de análisis. Requerimientos Generales del paquete. Conexiones. El framework debe soportar el uso de conexiones directas de base de datos o a través de fuentes de datos (Datasource) es decir, para obtener una conexión de base de datos a través del API JDBC debe ocupar cualquiera de las siguientes formas: Conexión directa JDBC – Este tipo de conexión obtiene un canal exclusivo de comunicación con la base de datos, es decir, este tipo de conexión crea un enlace con la base de datos por cada instancia del programa en ejecución. Conexión JDBC por fuente de datos (Datasource) – Este tipo de conexión obtiene un canal exclusivo temporal de comunicación con la base de datos, es decir, este tipo de conexión obtiene un canal de acceso a base de datos a través de un componente que |controla y administra el número de conexiones disponibles y así tener control del acceso y demanda del número total de conexiones para la aplicación, es decir, este esquema permite agilizar el uso de las conexiones reales a utilizar, e incrementa el rendimiento de los programas ya que el tiempo invertido en obtener conexiones directas menos eficiente. Comportamiento general del uso de conexiones y transacciones de base de datos. El diagrama de secuencia de la figura 2.3, representa el comportamiento del framework a construir cuando diferentes instancias de objetos necesitan utilizar una conexión de base de datos. El diagrama muestra como la instancia Z crea una conexión de base de datos y en su ejecución, hace uso de la instancia X a través de la llamada al método XXX, el cual también crea una conexión de base de datos, ambos métodos en las instancias Z y X cierran la conexión de base de datos utilizada, el objetivo del framework en este punto es hacer que la instancia de la conexión de base de datos en Z y X sea la misma de manera transparente evitando así el uso excesivo de conexiones y finalmente conservar la integridad de dicha conexión permitiendo cerrar solo la conexión a la instancia creadora de la misma, en el caso de la figura 2.3, el creador de la conexión es instancia Z, esto sí y solo sí las conexiones pertenecen a la misma base de datos de lo contrario existirán dos creadores de conexión y el framework mantendrá de igual manera su integridad. UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 27 El diagrama de secuencia de la figura 2.4, representa el comportamiento del framework a construir cuando diferentes instancias de objetos crean transacciones y las inician, consolidando o deshaciendo la misma. El diagrama muestra cómo la instancia Z crea una transacción y en el transcurso de la secuencia la instancia Z, hace uso de la instancia Y a través de llamar al método XXX el cual también crea una transacción ambos métodos en las instancias Z e Y controlan sus transacciones. El objetivo del framework en este punto es hacer que cada una de las transacciones anidadasen la secuencia den como resultado una sola coordinada por la transacción mas exterior en el caso del diagrama la transacción controlada por la instancia X, esto sí y solo si las transacciones pertenecen a la misma base de datos. sd DSA_Escenario de transacciones anidadas Base de datosInstancia Y :Clase Java «worker» Instancia X :Clase Java «worker» Instancia Z :Clase Java «worker» :Clase Java «worker» La clasa java, crea una instancia de la clase X, y abre la transaccion principal Transacción anidada nivel 2 ( BD1 - Hilo1 ) Transacción anidada nivel 2 ( BD 1 - Hilo 1 ) Incio transaccion principal nivel 1 (BD1 - Hilo1) Terminar transaccion principal nivel 1 (BD 1 - Hilo 1) Name: DSA_Escenario de transacciones anidadas Author: Guillermo Cabrera Bernal Version: 1.0 Created: 08/07/2003 12:00:00 a.m. Updated: 21/08/2003 12:00:00 a.m. <<Instanciación X>> << Lllamada al metodo XXX >> << Abre Transaccion >> << Instanciacion Z >> << Llamada al metodo ZZZ >> << Abre Transaccion >> << Sentencia SQL >> << Se hace commit o rollback >> << Instanciacion Y >> << Llamada al metodo YYY >> << Abre Transaccion >> << Sentencia SQL >> << Se hace commit o rollback >> << Se hace commit o rollback >> Figura 2.3, Escenario de reutilización de conexiones. Figura 2.4, Escenario de control de transacciones anidadas. UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 28 Cada descripción de caso de uso del presente paquete considera el uso de los dos escenarios de obtención de conexión y los escenarios de uso de la conexión y transacciones en un hilo de ejecución y estas características serán heredadas al paquete de componentes ORM. Descripción del caso de uso “CU_Controlar conexión de base de datos”. Objetivo El caso de uso tiene como objetivo el control de la apertura, uso y cierre de una conexión de base de datos en aplicaciones utilizando JDBC o Tomcat 4.1.12 Datasource para acceso a bases de datos Tipo Concreto Abstracto Actores • Clase Java Precondiciones Se debe conocer la información de la base de datos a utilizar (Conforme al driver de cada provedor). • Nombre de la base de datos. • IP o nombre del servidor donde esta el RDBMS de base de datos. • Servidor de instancia a utilizar. • Puerto de acceso. • Driver del JDBC. Relaciones Nombre del Caso de Uso Tipo de Relación CU_Abrir conexión de base de datos <include> CU_Cerrar conexión de base de datos <include> Curso básico 1. Una clase java solicita una conexión de base de datos indicando el nombre de la base de datos a la que se quiere el acceso. 2. El servicio de conexiones por hilo intenta abrir la conexión, para el hilo de ejecución actual (ver caso de uso CU_Abrir conexión de base de datos). 3. Si el servicio de conexiones por hilo pudo obtener la conexión se le asigna a la clase java que la solicito. 3.1. La clase java puede hacer uso de la conexión, ejecutando sentencias SQL, para realizar altas, cambios y consulta de registros y tablas, así como las transacciones (ver casos de uso CU_Consultar Información de base de datos, CU_Afectar información de base de datos y CU_Controlar Transacciones de base datos). 3.2. La clase Java puede solicitar al servicio de conexiones por hilo cerrar la conexión del hilo de ejecución actual independientemente si tiene una conexión JDBC o por Datasource (ver caso de uso CU_Cerrar conexión de base de datos). 4. Termina caso de uso. Curso alterno NO APLICA Curso de excepción NO APLICA UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 29 Poscondiciones La clase java obtuvo, utilizó y liberó una conexión de base de datos Diagramas de clase y secuencia. Las figuras 2.5 y 2.6, son los diagramas de clase y secuencia de la descripción del caso de uso. Figura 2.5, Diagrama de clases que muestra la relación estática para el control de la apertura, uso y cierre de una conexión de base de datos en aplicaciones utilizando JDBC o Tomcat 4.1.12 Datasource para acceso a bases de datos, para mayor claridad en este diagrama se representan los componentes de conexión relacionados. Figura 2.6, Diagrama de secuencia que muestra el comportamiento entre objetos para el control de la apertura, uso y cierre de una conexión de base de datos en aplicaciones utilizando JDBC o Tomcat 4.1.12 Datasource para acceso a bases de datos. UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 30 Descripción del caso de uso “CU_Abrir conexión de base de datos”. Objetivo El caso de uso tiene como objetivo abrir una conexión de base de datos en aplicaciones utilizando JDBC o Tomcat 4.1.12 Datasource para acceso a bases de datos Tipo Concreto Abstracto Actor • Clase Java Precondiciones El caso de uso sólo puede ser iniciado a partir del caso de uso CU_Controlar de conexiones de base de datos. Relaciones Nombre del Caso de Uso Tipo de Relación No aplica No aplica Curso básico 1. El curso básico inicia cuando una clase java solicita al control de conexiones una conexión de base de datos. 2. Si la clase java no indica el nombre de la base de datos a utilizar y en el control de conexiones ya existe una conexión para el hilo de ejecución actual, como consecuencia de la creación de conexiones anidadas entre métodos de diferentes instancias de clase en el mismo hilo de ejecución (ver: Figura 2.3). 2.1. El control de conexiones devuelve la conexión existente a la clase java que la solicitó. 2.2. El control de conexiones registra a la clase java solicitante no es creadora de la conexión en el control de conexiones. 2.3. Si no se puede realizar la obtención de la conexión, se emite el mensaje de excepción relacionado de la base de datos o de la clase. 2.4. De lo contrario, se termina el curso básico del caso de uso. 3. Si la clase java indica el nombre la base de datos a utilizar y existe en el control de conexiones una conexión a la misma base de datos solicitada en el hilo de ejecución actual, como consecuencia de la creación de conexiones anidadas entre métodos de diferentes instancias de clase en el mismo hilo de ejecución (ver: Figura 2.3). 3.1. El control de conexiones devuelve la conexión existente a la clase java que la solicito. 3.2. El control de conexiones registra que la clase java solicitante no es la creadora de la conexión en el control de conexiones. 3.3. Si no se puede realizar la obtención de la conexión se emite el mensaje de excepción relacionado de la base de datos o de la clase. 3.4. De lo contrario, se termina el curso básico del caso de uso. 4. Si la clase java no indica el nombre de base de datos a utilizar. 4.1. El control de conexiones busca en la configuración la primer definición de base de datos para la aplicación y obtiene el nombre correspondiente. 4.2. Si no existe información definida para base en la configuración. 4.2.1. Ir a cursos de excepción Error de configuración ninguna base de datos. 4.3. De lo contrario. 4.3.1. El control de conexiones toma al nombre definido en la configuración como el nombre de base de datos indicado por la clase java. UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Campus Acatlán Tesis de licenciatura en Matemáticas Aplicadas y Computación 31 5. Si el control de conexiones está configurado para obtener conexiones vía JDBC y se conoce la base de datos solicitada. 5.1. El control de conexiones obtiene la información de driver, usuario, contraseña y URL a utilizar
Compartir