Professional Documents
Culture Documents
Ingenierı́a Informática
Curso 2008-2009
Junio de 2009
El sudor ahorra sangre, la sangre ahorra vidas, y el cerebro ahorra ambas cosas.
Erwin Rommel
iii
iv
Agradecimientos
A Eduardo Mena, por predestinarme para este proyecto mediante el examen de DBDR
y por toda su ayuda durante el largo camino que vino después.
A Susana por ser, en parte, precursora de este PFC y hacer retroinformática para
recuperar la información que necesitaba.
A Max por resolver todas mis dudas haciendo gala de su particular forma de entender
las relaciones humanas.
A mis compañeros de prácticas desde Iván y Héctor en la primera, hasta Roberto e Ig-
nacio en la última, pasando por mis compañeros más asiduos Ricardo, Jacobo y Pablo. Sin
olvidarme del resto de compañeros de prácticas Rubén, Noelia, Rafael, Eduardo, Carlos,
Alberto, Adrián. . . ni de todos aquellos compañeros que no pudieron compartir prácticas
conmigo pero siempre lo desearon Javier, Héctor, Esther. . .
A mis profesores, de todos he aprendido algo y de la mayorı́a mucho, a todos ellos,
muchas gracias por enseñarme a aprender.
Y a todos los que han respondido en alguna ocasión a las preguntas que me acechaban,
sin olvidarme de aquellos a quienes ni siquiera he tenido que preguntar porque han dejado
sus conocimientos al alcance de todos en la red de redes.
v
vi
Resumen
vii
viii
Índice
1. Introducción 3
1.1. Estructura de la aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2. Puntos de la memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2. Aplicación web 7
2.1. Exigencias a la web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2. Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.1. Vista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2.2. Controlador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.3. Modelo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.3. Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.4. Problemas encontrados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3. Calendario 15
3.1. Requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.2. Visión general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.2.1. Cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.2.2. Modelo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.3. Tareas realizadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.3.1. Lectura y actualización de la base de datos . . . . . . . . . . . . . . 20
3.3.2. Deshacer y rehacer acciones . . . . . . . . . . . . . . . . . . . . . . 22
ix
3.4. Problemas de implementación . . . . . . . . . . . . . . . . . . . . . . . . . 23
5. Conclusiones 33
5.1. Utilidad del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.2. Reflexión personal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.3. Trabajos futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Bibliografı́a 36
A. Usuarios y entidades 41
A.1. Tipos de usuario y sus privilegios . . . . . . . . . . . . . . . . . . . . . . . 41
A.1.1. Coordinador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
A.1.2. Profesor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
A.1.3. Alumno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
A.1.4. Invitado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
A.2. Entidades del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
A.2.1. Curso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
A.2.2. Máster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
A.2.3. Usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
A.2.4. Aula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
x
B. Desarrollo del proyecto 49
B.1. Hitos del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
B.2. Empleo del tiempos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
B.3. Diagrama de Gantt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
C. Base de datos 55
C.1. Modelo entidad relación . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
C.1.1. Usuarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
C.1.2. Curso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
C.1.3. Máster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
C.1.4. Cuatrimestre y aula . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
C.1.5. Evento y mensaje . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
C.1.6. Participa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
C.2. Claves de la implementación . . . . . . . . . . . . . . . . . . . . . . . . . . 61
C.2.1. InnoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
C.2.2. Disparadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
C.3. Problemas encontrados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
xi
E. Tecnologı́as utilizadas 71
E.1. GWT para la construcción de calendarios . . . . . . . . . . . . . . . . . . . 71
E.1.1. Google Web Toolkit . . . . . . . . . . . . . . . . . . . . . . . . . . 71
E.1.2. FRT GWT Library . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
E.2. Algoritmos genéticos usando JGAP . . . . . . . . . . . . . . . . . . . . . . 73
E.2.1. Algoritmos genéticos . . . . . . . . . . . . . . . . . . . . . . . . . . 73
E.2.2. Java Genetic Algorithms Package . . . . . . . . . . . . . . . . . . . 74
E.2.3. JUnit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
E.3. MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
E.4. Java orientado a la generación web . . . . . . . . . . . . . . . . . . . . . . 76
E.4.1. JavaServer Pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
E.4.2. Struts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
E.4.3. Jmaki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
E.5. Programación con restricciones . . . . . . . . . . . . . . . . . . . . . . . . 77
E.5.1. Choco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
E.5.2. ECLiPSe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
E.6. Modelo Vista Controlador . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
F. Software de apoyo 81
G. Algoritmos genéticos 83
G.0.1. Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
G.0.2. Caracterı́sticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
G.0.3. Funcionamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
I. Manual de usuario 91
xii
I.1. Tipos de usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
I.2. Cabecera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
I.3. Página principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
I.4. Página de un máster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
I.4.1. Información principal . . . . . . . . . . . . . . . . . . . . . . . . . . 94
I.4.2. Cuatrimestres del máster . . . . . . . . . . . . . . . . . . . . . . . . 95
I.4.3. Coordinadores del máster . . . . . . . . . . . . . . . . . . . . . . . 96
I.4.4. Cursos del máster . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
I.4.5. Profesores del máster . . . . . . . . . . . . . . . . . . . . . . . . . . 97
I.4.6. Alumnos del máster . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
I.4.7. Información relevante . . . . . . . . . . . . . . . . . . . . . . . . . . 98
I.4.8. Cambios pendientes de ser aprobados . . . . . . . . . . . . . . . . . 99
I.4.9. Calendario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
I.5. Página de un curso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
I.5.1. Información principal . . . . . . . . . . . . . . . . . . . . . . . . . . 101
I.5.2. Aulas del curso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
I.5.3. Alumnos del curso . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
I.5.4. Cursos que son prerrequisitos . . . . . . . . . . . . . . . . . . . . . 103
I.5.5. Profesores del curso . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
I.5.6. Información relevante . . . . . . . . . . . . . . . . . . . . . . . . . . 104
I.5.7. Datos para la generación de horarios . . . . . . . . . . . . . . . . . 105
I.5.8. Calendario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
I.6. Página de un aula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
I.7. Página de un usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
I.8. Página de identificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
I.9. Calendarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
I.9.1. Tipos de calendarios . . . . . . . . . . . . . . . . . . . . . . . . . . 108
I.9.2. Tipos de eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
xiii
I.9.3. Colores de los calendarios . . . . . . . . . . . . . . . . . . . . . . . 109
I.9.4. Ventana de edición de eventos . . . . . . . . . . . . . . . . . . . . . 109
I.9.5. Panel de calendarios . . . . . . . . . . . . . . . . . . . . . . . . . . 110
I.9.6. Manejo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
I.10. Alertas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
xiv
Índice de figuras
1.1. Diagrama que muestra las diferentes partes del sistema y su interacción . . 4
2.1. Diagrama que muestra la interacción entre los paquetes que componen la
aplicación web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2. Aspecto visual fijado durante la etapa inicial de diseño para la página que
muestra un máster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.3. Diagrama que muestra la interacción entre los paquetes que componen el
calendario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
xv
C.1. Modelo entidad relación “resumido” de la base de datos . . . . . . . . . . . 56
C.2. Modelo de la entidad Usurio . . . . . . . . . . . . . . . . . . . . . . . . . . 57
C.3. Modelo de la entidad Curso . . . . . . . . . . . . . . . . . . . . . . . . . . 57
C.4. Modelo de la entidad Master . . . . . . . . . . . . . . . . . . . . . . . . . . 58
C.5. Modelo de las entidades Cuatrimestre y Aula . . . . . . . . . . . . . . . . . 59
C.6. Modelo de las entidades Evento y Mensaje . . . . . . . . . . . . . . . . . . 59
C.7. Modelo entidad relación de la relación Participa . . . . . . . . . . . . . . . 61
C.8. Modelo entidad relación que muestra la relación entre las entidades Máster
y Curso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
xvi
I.14. Cuadro que muestra el calendario de un máster para un coordinador . . . . 102
I.15. Cuadro que muestra la información principal de un curso para un coordinador103
I.16. Cuadro que, para no coordinadores, muestra la información sobre las aulas
de un curso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
I.17. Cuadro que muestra los alumnos matriculados y el formulario para agregar
uno nuevo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
I.18. Cuadro que muestra los profesores de un máster para usuarios con derechos
de edición . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
I.19. Cuadro que muestra los datos para la generación del horario del curso . . . 105
I.20. Cuadro con la información principal de un aula . . . . . . . . . . . . . . . 106
I.21. Página personal de un alumno . . . . . . . . . . . . . . . . . . . . . . . . . 107
I.22. Página personal de un profesor . . . . . . . . . . . . . . . . . . . . . . . . 107
I.23. Página de autentificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
I.24. Cuadro de diálogo de edición de eventos . . . . . . . . . . . . . . . . . . . 110
I.25. Panel que muestra los calendarios disponibles . . . . . . . . . . . . . . . . 111
I.26. Vista diaria del calendario . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
I.27. Vista semanal del calendario . . . . . . . . . . . . . . . . . . . . . . . . . . 113
I.28. Vista mensual del calendario . . . . . . . . . . . . . . . . . . . . . . . . . . 114
I.29. Vista anual del calendario . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
xvii
xviii
Índice de tablas
1
2
1. Introducción
3
1. Introducción 1.1 Estructura de la aplicación
Para comprobar que el sistema cumple los objetivos señalados, la aplicación ha sido
probada utilizando conjuntos de restricciones y datos reales de algunos de los másteres
que actualmente se imparten en el CPS.
Figura 1.1: Diagrama que muestra las diferentes partes del sistema y su interacción
Calendario web: Es el calendario online que muestra y permite editar los horarios
de los másteres.
4
1. Introducción 1.2 Puntos de la memoria
5
1. Introducción 1.2 Puntos de la memoria
la propuesta de posibles trabajos que se podrı́an llevar a cabo para seguir ampliando y
mejorando la aplicación.
Aunque la memoria es comprensible por ella misma, se adjuntan a ella varios anexos
cuya lectura es muy recomendable para profundizar tanto en el conocimiento de la apli-
cación desarrollada, como en el proceso de elaboración del proyecto:
El Anexo A enumera las acciones realizables por cada tipo de usuario de entre los que
se pueden dar de alta en la aplicación y comenta cuáles son las entidades principales del
sistema.
En el Anexo B se describe el desarrollo del proyecto, centrándose en los tiempos que
ha costado realizar cada una de las tareas que ha implicado, para lo que muestra los hitos
y el diagrama de Gantt del proyecto.
Sobre el Anexo C ya se ha comentado anteriormente que describe la base de datos del
sistema y su proceso de desarrollo.
Leyendo el Anexo D se conocerá el proceso de elección de las diferentes tecnologı́as
utilizadas y porque se ha decidido utilizar estas, antes que alguna de entre las otras muchas
disponibles.
El Anexo E describe las tecnologı́as sobre las que se ha creı́do que, por ser tecnologı́as
poco conocidas sobre las que los lectores pueden tener pocos conocimientos o por ser muy
importantes en el desarrollo de la aplicación, debı́an ser explicadas en detalle.
El Anexo F presenta muy brevemente el software de apoyo utilizado durante la ela-
boración de este proyecto, desde las herramientas de diseño, a las utilizadas durante la
redacción de esta memoria.
El Anexo G amplia la breve información dada en el Anexo E acerca de los algoritmos
genéticos, métodos adaptativos cuya comprensión es fundamental para poder entender en
su conjunto el proyecto desarrollado.
El Anexo H muestra información sobre la eficiencia del algoritmo de generación de
horarios, mediante datos obtenidos en pruebas con datos reales.
El Anexo I consiste en el manual de usuario de la aplicación, aunque se espera que la
aplicación resulte tan intuitiva que evite la necesidad de su consulta, es muy posible que
sea de gran utilidad en algunos casos puntuales.
El Anexo J consiste en el manual para el administrador de la aplicación, que será de
obligada lectura para que la aplicación pueda ponerse en funcionamiento de forma adecua-
da, también da algunas pautas a quienes intenten desarrollar mejoras para la aplicación,
aunque no es su función principal resolver esta cuestión y a quienes se encuentren en esta
situación se les recomienda consultar con el autor.
Finalmente, el Anexo K da unas breves indicaciones sobre el uso de la versión de
prueba de la aplicación.
6
2. Aplicación web
Se ha denominado aplicación web a la parte del sistema que se ocupa vı́a web de
la interacción con el usuario, sin incluir el calendario desarrollado en GWT que por su
complejidad y caracterı́sticas distintivas cuenta con un capı́tulo propio.
Aunque todas las partes de la aplicación se desarrollaron de forma, más o menos,
paralela se puede decir que la parte que ahora comentamos y detallamos, fue la que se
diseñó y se comenzó a implementar en primer lugar y la que fue definiendo los requisitos
de las demás partes, especialmente del algoritmo de búsqueda de horarios óptimos y de
la base de datos del sistema.
La web es la puerta que conecta a los usuarios con las funciones que ofrece la aplicación,
a través de ella tendrán accesos a todas las funciones y consultarán y modificarán todos
los datos sobre los que tengan privilegios.
De ahı́ que los requisitos básicos con que debe cumplir la web se extraigan directamente
de conocer las entidades que podrá crear, editar y modificar cada tipo de usuario y las
acciones que podrá realizar, estos datos se encuentran disponibles en el Apéndice A.
Una vez considerados estos requisitos especı́ficos, ya solo resta exigirle que su uso sea
tan sencillo e intuitivo como para no requerir de un aprendizaje, que funcione correcta-
mente en la mayorı́a de los navegadores conocidos, que minimice los tiempos de carga
necesarios, que proteja los datos privados de los usuario de la vista de las personas no
autorizadas y que cumpla los mismos principios generales de usabilidad que son deseables
para cualquier web [1, 2].
2.2. Diseño
7
2. Aplicación web 2.2 Diseño
Su influencia se puede apreciar en la Figura 2.1, que es una parte de la Figura 1.1, y
muestra los paquetes que componen la aplicación web y las interacciones entre ellos, con
el resto de la aplicación y con los usuarios.
Figura 2.1: Diagrama que muestra la interacción entre los paquetes que componen la aplicación web
La “Vista” está formada por las páginas JSP que conforman la parte de la aplicación
visible por el usuario. Los motivos que llevaron a la utilización de JSP se presentan en el
Anexo D.1.
El “Controlador” es un paquete que principalmente responde a los eventos que recibe
del usuario por medio de la “vista”, realizando los cambios pertinentes en el “Modelo” y
actualizando la “Vista” a partir de los datos que le transmite el “Modelo”.
El “Modelo” consiste en un paquete, formado principalmente por las funciones orien-
tadas a leer y actualizar la base de datos de másteres.
2.2.1. Vista
La primera etapa del diseño consistió en definir el aspecto visual aproximado de cada
página web en cada una de las situaciones en que podı́a ser necesario mostrarla.
La Figura 2.2 presenta un ejemplo de esta fase, e ilustra varias de las problemáticas
cuyas soluciones se comentarán a continuación.
La excesiva longitud de las páginas que se muestran en la figura hace intuir uno de los
problemas con los que topó el diseño de las diferentes páginas, su gran tamaño.
La solución a este problema consistió en dividir las páginas en secciones que se pueden
mostrar y ocultar a voluntad de forma independiente. Esta solución demostró ser muy
acertada al proporcionar el beneficio adicional de reducir el tiempo de carga inicial de la
página.
8
2. Aplicación web 2.2 Diseño
Figura 2.2: Aspecto visual fijado durante la etapa inicial de diseño para la página que muestra un máster
9
2. Aplicación web 2.2 Diseño
De esta forma para añadir una entidad ya existente el usuario simplemente deberá ha-
cer clic sobre su nombre y, en el caso de que la entidad que desea añadir no haya sido
creada todavı́a, deberá pinchar sobre “Crear uno nuevo” y rellenar el formulario que se
desplegará.
Esta fórmula se ha utilizado, por facilitar tanto el diseño de la web, como su posterior
utilización, en tantos campos como ha sido posible, principalmente a la hora de añadir
profesores, coordinadores, cursos y aulas.
Por último, podemos apreciar en la imagen que la página cuenta con campos consisten-
tes en fechas, para rellenar estos campos, se decidió utilizar calendarios desplegables para
una mayor comodidad de los usuarios, aunque por supuesto también se permite rellenar
manualmente dichos campos.
Una de las prioridades del diseño fue que la gran variedad de páginas que el servidor
necesitarı́a enviar al cliente no se reflejase en la creación de muchas páginas diferentes que
dificultasen la compresión y el mantenimiento del código.
De ahı́ que las vistas de másteres, cursos y demás objetos se generen, cada una, en
tiempo de ejecución a partir de la misma página JSP sea cual sea el tipo de usuario
autentificado en el servidor, consiguiéndose que todas las páginas principales se generen
a partir de solamente 6 ficheros JSP.
Por supuesto, las partes de las páginas que se repiten en varias de ellas, como es el
caso de los encabezamientos y pies de página, son generadas a partir de un sola página
JSP.
10
2. Aplicación web 2.2 Diseño
En cuanto a la forma de navegar entre las páginas que componen la web del proyecto,
se ha optado por la estrategia que se ha creı́do más sencilla para los usuarios. Cada vez que
se hace referencia a una entidad con página propia, en una de las páginas de la aplicación,
esta referencia es también un enlace que permite desplazarse hasta su página.
Utilizando estos enlaces y el enlace a la página de inicio que se encuentra en la cabecera
de todas las páginas, se ha conseguido que los usuarios nunca necesiten más de 4 pasos
para llegar a una de ellas, aunque la aplicación cuente con miles de páginas visitables en
ese momento.
2.2.2. Controlador
Para definir las funciones principales que debı́a satisfacer el paquete controlador se rea-
lizaron diagramas de secuencia, como el de la Figura 2.4, considerando todas las acciones
desencadenables en el sistema.
Estos diagramas son especialmente fructı́feros en este caso, ya que la tarea principal del
“Controlador” es recibir instrucciones de la “Vista”, que deberá transmitir al “Modelo”,
transformadas en acciones concretas para, a continuación, recibir la respuesta del “Mo-
delo” y comunicar a la “Vista” como debe actualizarse en función de los datos extraı́dos
de la base de datos por el “Modelo”.
Figura 2.4: Traza de eventos parcial de la página de un máster, utilizada durante la etapa de diseño
Se puede observar que al hacer las peticiones no se pasa el usuario activo como parte
de los datos, esto es porque se ha decidido que el usuario sea almacenado, en la máquina
cliente, mediante cookies en el momento de acceder al sistema. De ahı́ es de donde el
“Controlador” leerá el usuario siempre que sea relevante en su toma de decisiones.
11
2. Aplicación web 2.2 Diseño
Como es apreciable en la Figura 2.2, los diferentes formularios que contienen las páginas
cuentan con un botón “Modificar”, este se utilizará para guardar los cambios realizados
en cada uno de los formularios de la página.
Una de las decisiones más importantes que se tuvieron que tomar durante el diseño
del “Controlador” fue el tipo de acción que desencadenarı́an dichos botones, planteándose
si esta acción debı́a provocar la recarga de la página o, por el contrario, debı́a actualizarse
la página sin necesidad de recargarla.
En el primer caso, la opción principal era que el “Controlador” lo formasen princi-
palmente extensiones de las clases Action y ActionForm de Struts, que se presenta en el
Anexo E.4.2.
La ventajas principales del uso de esta herramienta frente a otras eran:
2.2.3. Modelo
12
2. Aplicación web 2.3 Implementación
Envı́o de emails, tanto para comunicar a los nuevos usuarios que han sido dados de
alta en el sistema, como para, de forma periódica, comunicarles los cambios en el
sistema.
2.3. Implementación
Se han utilizado ficheros “properties” y Bean [8] para brindar a la aplicación soporte
multilenguaje.
Commons Pool 1.4 [6] para la gestión de las conexiones a bases de datos.
Otras librerı́as como JMaki, que por su mayor relevancia han sido comentadas am-
pliamente en el Anexo E.
13
2. Aplicación web 2.4 Problemas encontrados
Los calendarios usados para la selección de fechas en los formularios web [11].
14
3. Calendario
3.1. Requisitos
Permitir elegir de que calendarios se desean ver y editar los eventos, de entre la lista
de calendarios disponible en cada momento y teniendo en cuenta los permisos del
usuario activo.
15
3. Calendario 3.2 Visión general
Posibilitar la copia y el pegado de eventos mediante el uso del botón derecho del
ratón.
Permitir crear o editar eventos sólo a los usuarios con permisos suficientes para el
calendario seleccionado.
Guardará los cambios realizados en los calendarios por usuarios sin plenos derechos
sobre ellos en forma de sugerencias, que más tarde deberán ser autorizadas para
convertirse en modificaciones definitivas (esto último no se hará desde el calendario).
Distinguirá los permisos del usuario sobre los diferentes calendarios, dándoles a los
eventos de estos diferentes colores.
Al hacer clic sobre un evento debe desplegar un panel que informe (permitiendo, o
no, editar el evento, dependiendo del caso) de los datos más relevantes acerca del
evento seleccionado.
Debe cargar los eventos desde una base de datos y guardar en ella las modificaciones
que se realicen.
No deben surgir problemas por el uso concurrente del sistema en varias máquinas
diferentes, aun en el caso de que se editen los mismo eventos en paralelo.
La interacción entre las diferentes partes del calendario y entre el calendario y el resto
de la aplicación y los usuarios, queda patente en la Figura 3.3, que es una parte de la
Figura 1.1.
16
3. Calendario 3.2 Visión general
17
3. Calendario 3.2 Visión general
Figura 3.3: Diagrama que muestra la interacción entre los paquetes que componen el calendario
3.2.1. Cliente
La parte de la aplicación a la que hemos llamado “Cliente” en la Figura 3.3, está for-
mada por lo que según el patrón Modelo Vista Controlador, englobarı́a la “Vista” y el
“Controlador”.
Esta parte ha sido construida partiendo del ejemplo de uso de la librerı́a FRT GWT
Library y utiliza una versión de dicha librerı́a que ha sido completamente remodelada
para adaptarla a las necesidades especı́ficas del proyecto.
Se ejecuta en el navegador del cliente y es la que trata con el usuario directamente,
siendo la parte más importante del calendario, tanto por tamaño, como por complejidad.
Como podemos ver en la Figura 3.3, leerá datos de la página que contiene el calen-
dario. Estos datos son necesarios para decidir qué calendarios se deben cargar, y son los
siguientes:
18
3. Calendario 3.3 Tareas realizadas
2. En qué tipo de página se encuentra integrado, de entre las que pueden contener un
calendario, siendo las posibilidades máster, curso, aula y usuario.
Sólo necesitará interactuar con el servidor para leer y actualizar la base de datos, cosa
que hará a través del “Modelo”, que al igual que en el caso de la aplicación web será la
parte del sistema que se ocupará de todas las tareas de este tipo.
3.2.2. Modelo
Las vistas diaria, semanal y mensual, que sólo necesitarán ser adaptadas a las ne-
cesidades especı́ficas de nuestro caso.
La interfaz con tecnologı́a AJAX que nos permite arrastrar y soltar eventos de una
fecha a otra y modificar gráficamente su duración haciendo más grandes o más
pequeños los recuadros que los representan; además de lanzar los paneles de edición
y creación de eventos al pinchar sobre diferentes zonas del calendario.
La gestión interna de los eventos que permite guardar en memoria los eventos crea-
dos.
19
3. Calendario 3.3 Tareas realizadas
Partiendo del código mencionado ha hecho falta añadir las funcionalidades necesarias
hasta satisfacer los requisitos presentados en el Capı́tulo3.1. Para conseguir esto, las tareas
principales a desarrollar han sido:
Modificar la gestión interna de los eventos y realizar los cambios necesarios para que
estos se carguen y guarden en una base de datos.
Integrar el calendario en las páginas JSP desarrolladas y hacer que lea de estas la
información que necesite.
Hacer que cargue los calendarios requeridos en cada momento y permita al usuario
elegir cuáles desea visualizar y editar de entre los disponibles.
La mayor parte del trabajo invertido en esta parte del proyecto se ha dedicado a
implementación y depuración, siendo las tareas de diseño dignas de mención escasas, a
continuación se comentan algunas de las más interesantes.
20
3. Calendario 3.3 Tareas realizadas
21
3. Calendario 3.3 Tareas realizadas
desea.
Se desea poder deshacer los cambios realizados durante la última sesión de edición del
calendario, al mismo tiempo se quiere que sea posible el rehacer las acciones que se han
deshecho previamente.
La estructura de datos que vamos a utilizar consiste en 4 pilas, a las que llamaremos
Pila1, Pila2, Pila3 y Pila4 para simplificar la comprensión de la explicación posterior:
22
3. Calendario 3.4 Problemas de implementación
Esta parte del proyecto ha sido la que más tiempo de implementación ha necesitado,
esto ha sido debido más que nada a las dificultades encontradas para realizar tareas que
en principio debı́an ser sencillas.
Tal es el caso de la integración del calendario en las páginas web, para conseguir que
el calendario no tapara el pie de página fue necesario fijar explı́citamente los tamaños de
todos los componentes que conforman su interfaz lo que fue una tarea muy laboriosa.
Otro ejemplo de esto, se produjo al modificar la forma de almacenar los eventos que
duran un dı́a completo. En la librerı́a original se señalaba que un evento duraba todo
un dı́a con un campo especial, durante la etapa de diseño se decidió simplificar esto, de
forma que un evento que ocupase un dı́a completo simplemente fuese señalado como un
evento que comprendiese desde las 0 hasta las 24 horas de ese dı́a, de forma que se podı́a
eliminar el campo que se utilizaba, tan sólo para marcar que un evento duraba todo el dı́a.
A la hora de la implementación, esto acarreó varios problemas difı́cilmente predecibles en
partes muy diversas de la aplicación.
Estos problemas con los que ha topado la implementación a cada paso, han tenido
varias causas, el principal ha sido la falta de documentación y de comentarios en el código
de la librerı́a principal que se estaba utilizando. Esto ha retrasado inútilmente el desarrollo
del calendario y la modificación de partes de las librerı́as que no se adaptaban a las
necesidades de la aplicación.
El segundo motivo ha sido la falta de documentación disponible acerca de GWT.
Si bien es verdad que la documentación puesta a disposición de los programadores por
Google es bastante extensa, al ser esta una tecnologı́a todavı́a poco utilizada, existen
pocos documentos que complementen la documentación oficial en los puntos en los que
serı́a necesario, tal y como si pasa con otros lenguajes o tecnologı́as como Javasctipt,
Apache Struts o Java, en los que es fácil encontrar información de utilidad para resolver
los problemas más comunes.
Los dos problemas mencionados anteriormente unidos al gran número de fallos con-
tenidos en las librerı́as utilizadas y las dificultades para encontrar estos de una forma
automática, han hecho que el desarrollo de esta parte de la aplicación haya tenido un
coste temporal muy superior al previsto inicialmente.
Por último, un problema puntual fue que la versión de GWT utilizada no permitı́a
manejar el botón derecho del ratón, lo que obligó a renunciar a la utilización de este
para copiar y pegar eventos, tal y como se habı́a planteado en los requisitos de sistema,
quedando este como el único requisito inicial de la aplicación que finalmente no ha podido
ser satisfecho.
23
3. Calendario 3.4 Problemas de implementación
24
4. Algoritmo de generación de horarios
A lo largo de este capı́tulo se describirá qué necesidades se querı́an cubrir con el algo-
ritmo de generación de horarios, cuáles fueron las diferentes alternativas que se valoraron
para satisfacer estos objetivos y el porqué de la solución elegida.
Además del diseño y la implementación del sistema y los problemas que se encontraron
durante las diferentes etapas del proceso.
La aplicación tiene que generar a partir de las restricciones introducidas por diferentes
usuarios sobre el máster a tratar, un horario óptimo para este, además de un informe
sobre el cumplimiento de los objetivos.
Con el diseño de la aplicación web finalizado tal y como se explica en el Capı́tulo 2.2,
estaba claro cuáles debı́an ser los datos de entrada y de salida del algoritmo.
25
4. Algoritmo de generación de horarios 4.1 Entrada y salida del algoritmo
Horario del profesor (para conocer las horas que tiene ocupadas. . . ).
Horario del aula (para conocer las horas que tiene ocupadas. . . ).
Horario del curso (para conocer las posibles recomendaciones horarias de los profe-
sores del curso. . . ).
26
4. Algoritmo de generación de horarios 4.2 Diseño
Profesores que imparten clases de teorı́a y en que orden y, para cada uno de ellos,
cuántas clases imparte.
Profesores que imparten clases de prácticas y en que orden y, para cada uno de ellos,
cuántas clases imparte.
Igual que a la hora de obtener los datos, el algoritmo interactuará con la base de datos
por medio del paquete “Modelo”, mientras que el informe de errores se comunicará al
usuario por medio del “Controlador”, que será quien actualice la “Vista” de la página
web, de acuerdo con lo comentado en el Capı́tulo 2.2.
4.2. Diseño
27
4. Algoritmo de generación de horarios 4.2 Diseño
El operador mutación.
4.2.1. Cromosoma
28
4. Algoritmo de generación de horarios 4.2 Diseño
El cromosoma representa el máster que estamos tratando, siendo cada gen un curso
de este máster.
Cada gen contiene los dı́as de la semana y las horas a las que se imparte el curso y el
aula en el que se imparten las clases.
Si los horarios y/o el aula son diferentes entre las clases de prácticas y las de teorı́a se
crearán 2 genes para la asignatura, uno para la parte teórica y otro para la parte práctica.
Es posible que el cromosoma sea tan sencillo porque la información que se necesita
almacenar es muy poca, ya que en el momento en que queramos reconstruir el horario de
las clases del máster, podemos completar la información contenida en el cromosoma con
todos los conocimientos que ya tenemos sobre el horario en la base de datos.
Es decir, para qué almacenar el profesor que dará la clase número 10, si en la base de
datos se almacena el orden en el que imparten clase los profesores y cuántas clases da cada
uno, con lo que este dato es fácilmente deducible. Se puede aplicar este razonamiento al
resto de información que, en principio, parecerı́a deberse guardar en el cromosoma.
4.2.2. Operadores
Una vez fija la estructura del cromosoma y de sus genes, es fácil decidir cuál debe ser
el operador de apareamiento, consistirá simplemente en intercambiar algunos genes de un
individuo con los de otro.
Para que se converja a una solución con la rapidez deseada, cuántos genes y qué genes
se intercambiarán debe decidirse de forma completamente aleatoria.
El otro operador a definir es la mutación, que consistirá en modificar algunos genes del
29
4. Algoritmo de generación de horarios 4.3 Reflexiones
4.3. Reflexiones
30
4. Algoritmo de generación de horarios 4.3 Reflexiones
31
4. Algoritmo de generación de horarios 4.3 Reflexiones
32
5. Conclusiones
Una vez finalizado el largo periodo de desarrollo, llega el momento de comprobar hasta
qué punto se han cumplido los objetivos propuestos.
El proyecto desarrollado no sólo cumple las especificaciones iniciales, sino que además
da respuesta a unas necesidades reales y cuenta con partes de software que pueden ser
reutilizadas en otros proyectos.
Este proyecto partı́a de la necesidad planteada por algunos profesores del Centro Po-
litécnico Superior de mejorar el modo actual de obtención de los horarios de los másteres,
que se calculan actualmente de forma manual y rudimentaria.
Este proyecto ha intentado responder a sus necesidades, proporcionandoles una herra-
mienta que facilita la colaboración entre ellos a la hora de especificar los requisitos de los
horarios a construir, generandolos automáticamente y permitiendo su posterior consulta
y gestión.
El trabajo a realizar a sido enorme, por lo que algunos aspectos, como el atractivo
visual de la parte web, no se han podido cuidar en exceso para no alargar demasiado el
tiempo de desarrollo.
Sin embargo, se puede afirmar que la herramienta desarrollada responde a los objetivos
propuestos y está lista para ser utilizada en el momento en que los coordinadores de algún
máster lo consideren adecuado.
Además 2 de las partes más relevantes de este proyecto, el calendario principal y la
herramienta de generación de horarios, cuya eficiencia se puede apreciar en las tablas del
Anexo H, podrı́an ser reutilizadas en nuevos proyectos, ya que responden a problemáticas
muy comunes para las que no se encontraron buenas soluciones ya implementadas.
33
5. Conclusiones 5.2 Reflexión personal
Algunos de los trabajos a realizar para mejorar la aplicación de cara a que en caso de
implantación real del sistema su utilización fuese más cómoda, o diese respuesta a nuevas
necesidades, serı́an entre otros:
34
5. Conclusiones 5.3 Trabajos futuros
Una vez implantado el sistema, las mejoras necesarias deberı́an ser respuestas a las
peticiones y quejas de los usuarios, estas mejoras o ampliaciones de la aplicación serı́an
casi ilimitadas, puesto que el objetivo de este proyecto es la gestión integral de los másteres
de diferentes centros y este es un objetivo enormemente ambicioso y difı́cil de cumplir en
su conjunto para un caso general.
Las propuestas anteriores van dirigidas a adaptar mejor el sistema al uso para el que ha
sido diseñado, pero también se podrı́a trabajar para que sea aplicable a otros problemas
de diferentes tipos, algunas de las mejoras posibles en esta dirección serı́an:
Adaptar la aplicación para gestionar no sólo los horarios de másteres, sino también
cualquier otro tipo de horarios.
35
36
Bibliografı́a
37
[14] Internet Calendaring and Scheduling Core Object Specification. http://tools.
ietf.org/html/rfc2445. Última consulta: 08/06/2009.
[27] David E. Goldberg. Genetic Algorithms in search optimization & Machine Learning.
The University of Alabama, 1989.
38
[33] Susana Abadı́n. DIEM: Diseño e integración de exposiciones en museos. Universidad
de Zaragoza, 2002.
[37] Uri Boness y Roald Bankras Bram Smeets. Beginning Google Web Toolkit. Apress,
2008.
[43] Vincent Massol with Ted Husted. JUnit In action. Manning, 2004.
[48] Jason Hunter y William Crawford. Java Servlet Programming. O’Reilly, 2001.
[51] W.F. Clocksin y C.S. Mellish. Programming in Prolog: Using the ISO Standard.
Springer, 2003.
39
[52] MySQL. http://www.mysql.com/. Última consulta: 10/05/2009.
[64] John H. Holland. Adaptation in Natural and Artificial Sistems. The University of
Michigan, 1975.
[65] Juan Alonso Ramos. Configuración de una Aplicación Web en Tomcat con codifica-
ción UTF-8. http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?
pagina=tomcatUTF8, 2007. Última consulta: 10/05/2009.
40
Anexo A. Usuarios y entidades
Conocer todos los datos que les sean permitidos de las entidades que componen el
sistema.
Modificar y crear todas las entidades sobre las que tengan permisos necesarios, de
entre las que forman parte del sistema.
Ası́ que los requisitos de la aplicación, se obtienen casi directamente de los datos que
pueden consultar, editar, crear y eliminar en el sistema cada uno de los tipos de usuario.
A.1.1. Coordinador
Una persona es considerada coordinadora, si ejerce como tal en uno o más másteres,
solo gozará de las atribuciones propias de los coordinadores en las páginas referentes a los
másteres de los que es coordinador y las referentes a sus cursos.
Si un usuario, por las tareas que desempeña, es coordinador y al mismo tiempo profesor
será considerado coordinador a todos los efectos, es decir, en un máster y sus cursos se es
coordinador antes que profesor.
Las atribuciones de un coordinador son:
41
A. Usuarios y entidades A.1 Tipos de usuario y sus privilegios
Crear profesores o buscar entre los ya creados y añadirlos como docentes a un curso
o como coordinadores a un máster.
Crear aula o buscar entre las ya creadas y añadirlas como disponibles a un curso.
Ser informado vı́a email de los cambios realizados en los horarios de cursos y máste-
res.
Autorizar o rechazar las modificaciones propuestas por los profesores para los hora-
rios de los cursos, decidiendo si finalmente se realiza la modificación o no.
A.1.2. Profesor
Ver el calendario y los datos de las aulas y editarlos en caso de que sea su creador.
Crear profesores o buscar entre los ya creados y añadirlos como docentes a un curso.
42
A. Usuarios y entidades A.1 Tipos de usuario y sus privilegios
Crear aula o buscar entre las ya creadas y añadirlas como disponibles a un curso.
Ser informado vı́a email de los cambios realizados en los horarios de los cursos.
A.1.3. Alumno
Se considera alumno a quien está matriculado en uno o más cursos, este rango sólo se
ostentará en esos cursos y en los másteres que los comprenden.
Las atribuciones de un alumno son:
Ser informado vı́a email de los cambios realizados en los horarios de los cursos.
A.1.4. Invitado
Una persona será considerada una invitada, cuando no esté autentificada en el sistema
o si estándolo navega por páginas no relacionadas con los cursos o másteres en los que
está implicada.
Las atribuciones de los invitados en el sistema son:
43
A. Usuarios y entidades A.2 Entidades del sistema
A.2.1. Curso
Número de clases de teorı́a tras las que comienzan a impartirse las prácticas.
Y los públicos:
44
A. Usuarios y entidades A.2 Entidades del sistema
Bibliografı́a relevante.
Criterios de evaluación.
Metodologı́a de enseñanza.
Comentarios adicionales.
Lista de profesores.
Su calendario.
A.2.2. Máster
Si los alumnos tienen permisos para ver las lista de alumnos de sus asignaturas.
Su calendario, que contendrá las restricciones horarias impuestas por los coordina-
dores de cara a la generación de horarios.
Cambios propuestos por los profesores pendientes de aprobación pos los coordina-
dores.
Y lo públicos:
45
A. Usuarios y entidades A.2 Entidades del sistema
Información general.
Preguntas frecuentes.
Proceso de admisión.
Requisitos de admisión.
Lista de coordinadores.
Lista de profesores.
A.2.3. Usuario
Área y departamento a los que está inscritos (en caso de tratarse de un profesor).
46
A. Usuarios y entidades A.2 Entidades del sistema
Y los privados:
Calendario personal, con las restricciones que impone a su docencia y sus eventos
personales (en caso de tratarse de un profesor).
A.2.4. Aula
47
A. Usuarios y entidades A.2 Entidades del sistema
48
Anexo B. Desarrollo del proyecto
49
B. Desarrollo del proyecto B.2 Empleo del tiempos
La Figura B.1 muestra la división aproximada del tiempo de trabajo entre las diferentes
partes de la aplicación.
50
B. Desarrollo del proyecto B.2 Empleo del tiempos
51
B. Desarrollo del proyecto B.3 Diagrama de Gantt
talladas, deberı́an considerarse tan solo una aproximación a los tiempos empleados, que
puede resultar de gran utilidad para comprender cuál ha sido el proceso de desarrollo del
sistema.
52
B. Desarrollo del proyecto B.3 Diagrama de Gantt
53
B. Desarrollo del proyecto B.3 Diagrama de Gantt
54
Anexo C. Base de datos
El sistema posee una única base de datos que contiene tanto los datos de interés para
los usuarios acerca de los másteres y las entidades relacionadas con ellos, como los datos
necesario para la generación de los horarios y los datos generados por esta.
A la hora de diseñar la base de datos se ha puesto mucho interés en que el modelo fuese
fácilmente ampliable, ante próximas mejoras de la aplicación, para que no se convirtiese
la base de datos en un cuello de botella que obstaculizase cambios futuros en el sistema.
Por su carácter libre, y gratuito, para proyectos de las caracterı́sticas del desarrollado,
se ha utilizado MySQL, que se presenta en el Anexo E.3, como gestor de bases de datos.
Esta opción era la más recomendada por su flexibilidad y rapidez, además de por ser
uno de los gestores mejor conocidos por la persona que iba a realizar el diseño de la base
de datos y la posterior implementación de las tablas SQL.
55
C. Base de datos C.1 Modelo entidad relación
C.1.1. Usuarios
El diagrama de la Figura C.2 nos permite ver qué guardamos en la base de datos 2
tipos de usuarios: los alumnos y los profesores.
Se distingue entre alumno y profesor, aunque la clase alumno no necesitarı́a una enti-
dad propia según la base de datos actual.
Esto se ha hecho para poder fácilmente ampliar la información guardada sobre los
alumnos, por ejemplo, con sus notas, si esto se decidiese durante una ampliación del
sistema. Esta es una de las mejoras más importantes, de entre las que se proponen en el
Capı́tulo 5.3.
Los profesores podrán, dependiendo de sus relaciones activas, ser coordinadores o
profesores, ser diferentes cosas para diferentes cursos y másteres o ser ambas cosas para
un mismo curso.
Los campos max h dia y max h seguidas hacen referencia al máximo número de horas
de clase seguidas y en un dı́a que no deben superar los cursos de un máster.
56
C. Base de datos C.1 Modelo entidad relación
C.1.2. Curso
Y en la parte izquierda se ven los que si son de interés para la aplicación, principalmente
por ser necesarios para la generación de horarios.
Los campos h teoria y h practicas contienen las horas de teorı́a y de práctica de las
que consta la asignatura, mientras que los campos h clase teor y h clase pract indican las
horas que dura una clase de teorı́a y una de práctica respectivamente.
Por su parte, los campos mismo aula y mismo horario, indican si el aula de las clases
57
C. Base de datos C.1 Modelo entidad relación
C.1.3. Máster
La entidad máster cuyos atributos se pueden ver en la Figura C.4 es la más importante
de la base de datos, de ella dependen como entidades débiles 1 algunas entidades relevantes,
como los curso y los cuatrimestres.
1
Es decir, la clave de máster es parte de la clave de las otras entidades.
58
C. Base de datos C.1 Modelo entidad relación
En primer lugar la entidad evento, que hace referencia tanto a las horas de clase de
un curso, como a los dı́as de fiesta de un máster, pasando por cualquier otra información
referente a un máster, un curso, un aula o un profesor que sea interesante guardar en un
calendario.
Todos los eventos relacionados con una entidad forman lo que podrı́amos considerar su
calendario. La creación de esta entidad calendario se desechó por ser innecesaria, ya que
59
C. Base de datos C.1 Modelo entidad relación
para conocer el calendario de una entidad simplemente se deben buscar todos los eventos
relacionados con ella.
Los campos fecha ini y fecha fin nos muestran cuándo empieza y finaliza el evento,
estas fechas deben formar parte de un mismo dı́a.
El nivel es uno de los campos más relevantes, indica el tipo del evento, que puede ser:
C.1.6. Participa
La Figura C.7 nos muestra los parámetros de la relación participa, que nos indica que
un profesor da clase en un curso dado.
La relación permite expresar, si el profesor imparte clases de teorı́a, de práctica o de
ambas, en que orden imparte clases de cada una de ellas en relación al resto de profesores
que también imparten clase en la asignatura y cuántas clases imparte.
60
C. Base de datos C.2 Claves de la implementación
Para que exista la relación es obligatorio que al menos uno de los campos, h teo
o h prac, sea no vacı́o y distinto de 0. Estos campos indican el número de horas que
impartirá ese profesor en la asignatura.
Si rellenamos h teo estaremos obligados a rellenar orden teo, que nos indica en que
posición, de entre el conjunto de profesores, comenzará ese profesor a impartir clases de
teorı́a. La misma relación existe entre h prac y orden prac.
C.2.1. InnoDB
61
C. Base de datos C.2 Claves de la implementación
uno de sus campos tenga un valor que coincida con el valor de un campo especı́fico de
otra de las entidades.
Por ejemplo, en nuestra base de datos, partiendo del modelo entidad relación de las
entidades máster y curso, que se muestra en la Figura C.8, obtendrı́amos la Tabla C.1
para los másteres y la Tabla C.2 para los cursos.
Figura C.8: Modelo entidad relación que muestra la relación entre las entidades Máster y Curso
El uso de InnoDB permite exigir a la tabla de cursos que el contenido de sus campos
máster y año coincida con el nombre y año de un máster existente. Esta es la única forma
de que la implementación realizada sea consistente con el diseño de partida y de forzar
que no se da la paradoja de que existan cursos pertenecientes a másteres inexistentes.
De esa forma el curso “Ácidos” serı́a correcto ya que pertenece a un máster existen-
te, mientras que el curso “Factorial” no podrı́a crearse al no existir un máster llamado
“Matemáticas” en el año 2010.
62
C. Base de datos C.3 Problemas encontrados
C.2.2. Disparadores
Los disparadores o triggers son procedimientos que se ejecutan cuando se cumple una
condición establecida al realizar una operación de inserción, actualización o borrado en
una base de datos.
Se han desarrollado disparadores para realizar las comprobaciones pertinentes sobre
los datos que se creen o actualicen y asegurar que los datos introducidos cumplen las
restricciones apropiadas.
Se ha hecho esto, por ser más sencillo y eficiente que realizar las comprobaciones desde
el código Java en el servidor web.
Algunas de las restricciones ası́ impuestas son, que la fecha de inicio de un máster tiene
que ser inferior a la fecha de finalización y que los nombre de los alumnos y profesores
deben ser cadenas que contengan algún carácter distinto del espacio.
Los disparadores también se han usado para crear las estructuras relacionadas con una
entidad en el momento de crear esta y para destruirlas al destruir esta.
Por ejemplo, en el momento de creación de un máster usamos un disparador para
generar un cuatrimestre asociado, que obligatoriamente debe existir, de esta forma no nos
tenemos que preocupar una y otra vez de realizar esta tarea.
La base de datos es la misma para las 3 partes que componen la aplicación y cada una
de las ellas tiene necesidades diferentes, por lo que ha sido necesario buscar soluciones de
compromiso, especialmente durante la etapa de diseño.
Además, la base de datos ha tenido que estar en funcionamiento desde que se inició la
construcción de la aplicación hasta la finalización del proyecto, debiendo estar terminada
al mismo tiempo que las primeras versiones de la aplicación web, cuando los diseños, tanto
del algoritmo genético, como del calendario, estaban poco avanzados. Esto dificultó mucho
la obtención de un diseño óptimo.
63
C. Base de datos C.3 Problemas encontrados
64
Anexo D. Elección de las tecnologı́as
Una de las partes más importantes de cualquier proyecto software es la elección de las
tecnologı́as, que, entre las disponibles, se seleccionarán para apoyar su desarrollo.
Esto es ası́, porque sin la reutilización de herramientas, ideas y código ya realizados
por otros, cada proyecto deberı́a comenzar desde el mismo punto de partida, bloqueando
cualquier intento de progreso.
En este anexo, se van a comentar los procesos de elección de las diferentes tecnologı́as
que se han tomado como punto de partida para cada una de las partes de la aplicación.
Las tecnologı́as utilizables para desarrollar las páginas web del proyecto eran muchas,
principalmente: PHP [16], ASP [17], GWT y JSP.
Al valorar GWT como la mejor opción de desarrollo para el calendario que se integrarı́a
en la web (tal y como se explica en el Anexo D.2), era deseable implementar también las
páginas web en esta tecnologı́a. De modo que se aumentase la cohesión y se facilitasen las
comunicaciones y la integración entre ambas partes del sistema.
Pero la aplicación no necesitaba una cantidad suficiente de código Javascript, ni tenı́a
la complejidad necesaria, para justificar el uso de GWT, cuyas caracterı́sticas se explican
en el Anexo E.1.1.
Entre las tres opciones más populares, PHP, ASP.NET y JSP, la balanza se inclinó del
lado de JSP, que se comenta en el Anexo E.4.1, siendo las razón principal, el permitir
implementar todas las partes de la aplicación en el mismo lenguaje, ya que las demás
partes del sistema se implementan en Java, que es el lenguaje madre de JSP.
Frente ASP.NET contaba, además, con la portabilidad como gran ventaja, al no es-
tar definida la plataforma en la que correrı́a el servidor de la aplicación y funcionar las
aplicaciones ASP “solamente” en sistemas operativos de la familia Windows.
65
D. Elección de las tecnologı́as D.2 Construcción de calendarios interactivos
D.2.2. Calendarios
66
D. Elección de las tecnologı́as D.2 Construcción de calendarios interactivos
El estar escrito en PHP, ya que se preferı́a el lenguaje Java, por ser este el
lenguaje utilizado en las demás partes del proyecto.
El no haber sido actualizado desde enero 2008 y la consiguiente falta de compa-
tibilidad con algunas de las últimas versiones de los navegadores más populares.
Webical [21]
Este es un caso similar al anterior, con la salvedad de estar basado en Java. Com-
partı́a con Monket Calendar su mayor handicap, el ser un proyecto abandonado
desde principios de 2008, sin haberse alcanzado una versión estable del mismo.
Podrı́a decirse que ninguna de las opciones de las que se podı́a partir era realmente
buena. Lo que se querı́a construir era algo muy especı́fico, además de complejo y poco
común y no existen aun herramientas adecuadas.
Sin embargo, al ser necesario decantarse por una de las opciones anteriores, se optó por
la utilización de FTR GWT Library.
Opción que parecı́a mucho más acertada, ya que:
67
D. Elección de las tecnologı́as D.3 Generación de horarios
Al estar escrito en Java, nos permitı́a escribir la práctica totalidad del código de este
proyecto en el mismo entorno de desarrollo y el mismo lenguaje de programación.
68
D. Elección de las tecnologı́as D.3 Generación de horarios
Como se explica en el Capı́tulo 4.2, otra de las necesidades que plantea el problema
a resolver es que el algoritmo decida el número de clases semanales y posteriormente
asigne un horario a cada una.
69
D. Elección de las tecnologı́as D.3 Generación de horarios
Hay que hacer notar que al hablar acerca de las dificultades ofrecidas por la programa-
ción con restricciones, estamos haciendo referencia a 2 intentos reales de implementar el
sistema mediante la librerı́a Choco [31] y el lenguaje ECLiPSe [32], que fueron las opcio-
nes que se consideraron más interesantes para abordar este problema y que se comentan
en el Anexo E.5.
Una vez decidido que se iba a desarrollar un algoritmo genético se intentó buscar la
mejor forma de afrontar el problema a resolver.
En primer lugar, se planteó el desarrollar desde cero el algoritmo, pero, puesto que
una gran parte del código de este tipo de algoritmo puede mantenerse estático mientras
se cambia su aplicación, parecı́a que hacer esto serı́a una decisión poco inteligente, al
desaprovechar la oportunidad de reutilizar código ya existente.
En segundo lugar, se planteó tomar como punto de partida el algoritmo genético
desarrollado dentro del proyecto [33]. Algoritmo que ya habı́a demostrado su eficiencia
para la distribución de cuadros en museos.
Al comprobarse que su adaptación serı́a complicada por no haber sido diseñado pen-
sado en su reutilización, se comenzaron a buscar librerı́as, si diseñadas con ese fin.
Descartando en un primer paso soluciones no basadas en el lenguaje Java, en el que ya
se estaba desarrollando el resto de la aplicación. Esto dejó fuera algunas de las opciones
más interesantes, como era el caso de GAUL [34], al no ser Java, sino C++, el lenguaje
más popular para este tipo de librerı́as.
Entre las restantes no fue difı́cil ver que la mejor opción, por reputación, número de
usuarios, aplicaciones ya construidas y calidad de los manuales disponibles era JGAP, que
se presenta en el Anexo E.2.2.
70
Anexo E. Tecnologı́as utilizadas
Para cumplir su objetivo global de gestionar los horarios de los másteres, la aplicación
desarrollada ha tenido que dar solución a diferentes problemas, necesitando cada uno de
ellos de tecnologı́as completamente diferente para ser desarrollado.
A continuación se explican, intentando dar una idea general, las tecnologı́as más re-
levantes de entre las utilizadas en el desarrollo de la aplicación, omitiendo aquellas que
pueden considerarse universalmente conocidas.
Google Web Toolkit[35], también conocido por las siglas GWT, es un framework de
desarrollo en Java publicado por Google Inc.
Su finalidad es facilitar la escritura de aplicaciones AJAX, proceso nada sencillo debido
a la poca estandarización y a la gran variedad de tecnologı́as implicadas.
La gran utilidad de las aplicaciones AJAX, radica en que se ejecutan en el cliente, es
decir, en el navegador de los usuarios, mientras se mantiene la comunicación ası́ncrona
con el servidor en segundo plano. De esta forma, es posible realizar cambios sobre las
páginas, sin necesidad de recargarlas, lo que significa aumentar la interactividad, velocidad
y usabilidad de las aplicaciones.
Al utilizar GWT el programador escribe código Java usando cualquier entorno de
desarrollo (IDE) de Java, como Eclipse o NetBeans, y el compilador lo traducirá a HTML
y JavaScript que se ejecutará en la máquina cliente y Java Servlets que se ejecutarán en
el servidor web, este proceso se puede observar en la Figura E.1.
71
E. Tecnologı́as utilizadas E.1 GWT para la construcción de calendarios
Para la comunicación entre el código GWT del lado cliente y el del lado servidor,
utiliza el protocolo de “Llamada a un Procedimiento Remoto”, que permite a un programa
ejecutar código en otra máquina remota, sin tener que preocuparse por las comunicaciones.
Otra ventaja importante que posee, es que el código generado funciona en todos los
navegadores, lo que facilita enormemente el trabajo del programador e incrementa sus-
tancialmente su rendimiento. Ya que escribiendo directamente el código Javascript, de-
berı́amos, en muchos casos, realizar diferentes implementaciones para cada uno de los
navegadores.
Además, no hay que olvidar que, incluso dejando esto a un lado, la depuración de
código Java es mucho más sencilla que la de código Javascript.
Su popularidad ha aumentado rápidamente desde su lanzamiento en 2006, ya que es
usado por gran parte de las conocidas herramientas de Google, como son Gmail [36] y
Google Calendar. Para profundizar más en esta tecnologı́a se puede consultar [37].
En este proyecto se ha utilizado la versión 1.4.62 de GWT, el motivo principal por el
que se escogió esta versión y no una posterior, fue el aumento de la potencia de cómputo
necesaria para la compilación del código, en las versiones más recientes.
Al no utilizarse máquinas de gran potencia en el desarrollo de este proyecto, el tiempo
de compilación del sistema usando la versión 1.5, o superiores, no era asumible.
72
E. Tecnologı́as utilizadas E.2 Algoritmos genéticos usando JGAP
La librerı́a FRT GWT Library [22] es un proyecto de software libre desarrollado bajo
licencia Apache License 2.0 [38] y alojado en Google Code [39].
La finalidad de esta librerı́a, es facilitar la creación de calendarios con un estilo si-
milar al del Google Calendar [12] de Google Inc., para lo que proporciona una serie de
componentes de interfaz de usuario de gran utilidad.
El ejemplo de uso de la librerı́a, es un sencillo calendario, con un funcionamiento
rudimentario y gran cantidad de errores, que es un punto de partida de gran utilidad para
las aplicaciones que vayan a usar la librerı́a.
Mención especial merece la nula documentación, la falta de comentarios en el código
y la gran cantidad de errores que se pueden encontrar en la librerı́a y que complican
bastante su utilización.
La versión de esta librerı́a que se ha utilizado es la 0.95, que era la última versión
disponible en el momento del inicio del proyecto.
Los algoritmos genéticos, en los que se profundiza más en el Anexo G, son una lı́nea de
la inteligencia artificial cuyas bases fueron sentadas a mediados de los años 70 por John
Henry Holland.
Su lógica se fundamenta en los principios de la teorı́a de la evolución de Darwin, según
la cual los individuos de una población compiten en la búsqueda de recursos y de pareja,
teniendo más posibilidades de sobrevivir y de pasar sus genes a la siguiente generación
los individuos más adaptados.
De forma que, los genes de individuos mejor adaptados se propagan en sucesivas ge-
neraciones, consiguiendo que los individuos vayan mejorando su adaptación al medio.
Por analogı́a, los algoritmos genéticos trabajan con una población de individuos, cada
uno de los cuales, representa una solución factible a un problema dado.
A cada individuo se le asigna un valor o puntuación, dependiendo de cuanto se acerque
73
E. Tecnologı́as utilizadas E.2 Algoritmos genéticos usando JGAP
a la solución deseada. Cuanto mayor sea la puntuación, mayor será la probabilidad de que
el mismo sea seleccionado para reproducirse, cruzándose con otro individuos seleccionados
de igual forma, lo que dará lugar a los individuos de la nueva generación.
Al tiempo que este proceso se repite, se producen en los individuos mutaciones alea-
torias, que introducen en la población caracterı́sticas que posiblemente ningún individuo
tenı́a hasta este momento.
La aplicación reiterada de mutaciones y cruces entre individuos, generación tras ge-
neración, hace que la población de posibles soluciones del problema converja hacia la
solución.
De todo lo anterior se desprende que las partes fundamentales de un algoritmo genético
son, la función de evaluación que asigna una puntuación a cada individuo, el operador
de cruce que debe combinar 2 individuos para dar como resultado uno nuevo mezcla de
ambos, el operador mutación que debe modificar de forma aleatoria el código genético
de los individuos y, especialmente, los cromosomas que conforman la identidad de cada
individuo que deben ser capaces de representar todas las posibles soluciones al problema.
1
Al que haremos referencia, de ahora en adelante, mediante las siglas JGAP.
2
Estructura de soporte definida, mediante la cual otro proyecto software puede ser organizado y
desarrollado.
74
E. Tecnologı́as utilizadas E.3 MySQL
E.2.3. JUnit
E.3. MySQL
3
Siglas en Ingles de “Structured Query Language”, traducido al castellano como lenguaje de consulta
estructurado.
75
E. Tecnologı́as utilizadas E.4 Java orientado a la generación web
JavaServer Pages 4 [47] es una tecnologı́a basada en Java para la generación dinámica
de contenidos web, fue desarrollado por Sun Microsystems, empresa que lo distribuye bajo
licencia libre.
La gran utilidad de JSP, radica en facilitar enormemente la escritura de servlets [48],
permitiendo mezclar el código Java con el HTML de forma muy intuitiva, mediante el uso
de etiquetas predefinidas o de las etiquetas que uno mismo construya.
Los servlets son programas escritos en Java, que se ejecutan normalmente en servidores
web, su finalidad es generar páginas web de forma dinámica, a partir de los parámetros
de las peticiones que reciba del navegador.
La versión utilizada de JSP para generara las páginas del proyecto ha sido la 1.2.
E.4.2. Struts
Struts [49] es una estructura de soporte para el desarrollo de aplicaciones web, bajo el
patrón Modelo Vista Controlador y el lenguaje Java.
El Modelo Vista Controlador, en el que se profundiza más en el Anexo E.6, es un patrón
de arquitectura de software cuyo uso es muy frecuente en el desarrollo de aplicaciones web
y cuya caracterı́stica principal es separar los datos de una aplicación, la interfaz de usuario,
y la lógica de control, en tres componentes distintos.
Struts es software libre desarrollado por Apache Software Foundation desde el año
2000, momento desde el cual su popularidad no ha hecho más que crecer.
Una de sus caracterı́sticas más identificables, es el uso de ficheros a los que llama
Action para definir que hacer al recibir una petición desde una página web y ficheros a
4
JSP, a partir de ahora.
76
E. Tecnologı́as utilizadas E.5 Programación con restricciones
los que bautiza como ActionForms para recoger los datos de los formularios web.
Cuenta con sus propias etiquetas JSP, de cara a facilitar tareas, como la internacio-
nalización de las páginas creadas y la reutilización de código.
La gran mayorı́a de las funcionalidades de Struts están orientadas a facilitar el diseño
y programación de la parte del sistema a la que el Modelo Vista Controlador, llama
“Controlador”.
Se ha utilizado en el desarrollo de la aplicación la versión 1.2.9 de Struts.
E.4.3. Jmaki
77
E. Tecnologı́as utilizadas E.6 Modelo Vista Controlador
E.5.1. Choco
Choco [31] es la librerı́a Java, de carácter libre, más popular para la programación
basada en restricciones.
E.5.2. ECLiPSe
Vista: Es la interfaz de usuario, muestra los datos de la foma apropiada para que el
usuario pueda interactuar con ellos.
78
E. Tecnologı́as utilizadas E.6 Modelo Vista Controlador
Vista: Páginas HTML, que pueden ser generadas dinámicamente a partir de páginas
JSP, PHP o de otras tecnologı́as similares.
Controlador: Recibe las peticiones de las páginas web e interactúa con el mode-
lo según le indiquen dichas peticiones, finalmente carga una nueva página web o
actualiza la que se estaba mostrando.
79
E. Tecnologı́as utilizadas E.6 Modelo Vista Controlador
80
Anexo F. Software de apoyo
LEd 0.526300 [61] como entorno gráfico para escribir los documentos.
MiKTeX 2.7 [62] como distribución TeX/LaTeX para Microsoft Windows XP.
81
F. Software de apoyo
82
Anexo G. Algoritmos genéticos
Los algoritmos genéticos son hoy en dı́a una de las lı́neas más prometedoras de la
inteligencia artificial. En este capı́tulo se va a dar una pequeña explicación de su historia
y su funcionamiento, para una introducción más amplia se puede consultar [28, 27].
G.0.1. Historia
Las bases del funcionamiento de los algoritmos genéticos fueron desarrolladas por John
Holland a mediados de los 70.
Holland, desde pequeño, se preguntaba, cómo podı́a la naturaleza crear seres cada
vez más perfectos. Fue esta inquietud la que le llevó, al iniciarse en el campo de la
programación, a buscar un algoritmo que:
G.0.2. Caracterı́sticas
Los algoritmos genéticos son programas computacionales cuyo fin es imitar el proceso
de “selección natural”, que según las teorı́as de Darwin rige el curso de la evolución, para
83
G. Algoritmos genéticos
84
G. Algoritmos genéticos
El poder de los algoritmos genéticos proviene del hecho de que son una técnica robusta,
y pueden tratar con éxito gran variedad de problemas provenientes de diferentes áreas.
Y aunque no se garantiza que el algoritmo genético encuentre la solución óptima del
problema, existen evidencias empı́ricas de que encuentra soluciones de un nivel aceptable,
en un tiempo competitivo con el resto de algoritmos de optimización combinatoria.
Son especialmente recomendados estos algoritmos en problemas para los cuales no
existan técnicas especializadas de resolución y no se conozca ningún algoritmo que de la
solución con certeza en un tiempo razonable.
Las caracterı́sticas fundamentales de los algoritmos genéticos son:
Hacen una barrida del subespacio de posibles soluciones válidas siendo, de entre los
algoritmos estocásticos, de los más explorativos disponibles, lo que consigue que no
sean dependiente de la posición inicial.
Los algoritmos genéticos son intrı́nsecamente paralelos. Esto significa que, indepen-
dientemente de que lo hayamos implementado de forma paralela o no, buscan en
distintos puntos del espacio de soluciones de forma concurrente, por lo que, en caso
de necesidad, la paralelización del código es casi inmediata.
G.0.3. Funcionamiento
85
G. Algoritmos genéticos
un número real, que se supone refleja el nivel de adaptación al problema del individuo
representado por el cromosoma.
Durante la ejecución del algoritmo, serán seleccionados un porcentaje de individuos
como padres para la reproducción. La selección de padres se efectúa mediante el proce-
dimiento de la ruleta sesgada, es decir, al azar usando un procedimiento que favorezca
a los individuos mejor adaptados, asignando a cada individuo una probabilidad de ser
seleccionado que es proporcional a su función de evaluación.
Según este esquema, los individuos bien adaptados se escogerán probablemente varias
veces por generación, mientras que, los pobremente adaptados al problema, no se esco-
gerán más que de vez en cuando. Estos individuos seleccionados serán los que se cruzarán
generando hijos.
Más tarde, sobre algunos de los individuos actuará un operador de mutación. Nueva-
mente evaluaremos cada uno de los individuos (padres e hijos), para después escoger a los
mejores, para que formen la siguiente población.
Las condiciones de parada más habituales para este tipo de algoritmos, son la conver-
gencia del algoritmo genético, el hallazgo de una solución lo suficientemente buena o bien
la superación de un numero máximo de generaciones exploradas.
86
Anexo H. Eficiencia de la generación de
horarios
Las siguientes cifras dan una idea del tamaño de la base de datos de la aplicación con
los 2 másteres cargados:
87
H. Eficiencia de la generación de horarios
H.1 Resultados de los experimentos
4300 eventos en sus calendarios, tan solo para reflejar los dı́as festivos y las horas
de clase.
6,6 MB de datos, la gran mayorı́a de ellos ocupados por eventos de los calendarios.
Las siguientes tablas H.1 y H.2 muestran los resultados experimentales obtenidos para
cada uno de los másteres sometidos a pruebas.
Los resultados mostrados son medias obtenidas tras cientos de repeticiones de los
experimentos, cada campo de las tablas simboliza:
88
H. Eficiencia de la generación de horarios H.2 Análisis de los resultados
Tiempo: Milisegundos utilizados para dar con la mejor solución posible para el
número de ejemplares dado.
89
H. Eficiencia de la generación de horarios H.2 Análisis de los resultados
de la solución.
Un dato curioso es que el número de iteraciones necesarias para llegar a una solución
óptima no parece tener una relación clara con el número de ejemplares vivos, aunque
como el tiempo por ejecución crece rápidamente con el número de ejemplares, el tiempo
de cómputo global si que crece.
El aumento de la calidad del resultado es muy rápido al principio pero se ralentiza
a medida que se va aumentando el número de ejemplares, esto hace que la inversión en
tiempo sea menos rentable al ir creciendo la población.
A la vista de los resultados obtenidos se ha considerado que 45 ejemplares por evolución
es un buen valor para fijar como predeterminado en la aplicación desarrollada, ya que la
relación calidad tiempo no parece recomendar ir más allá.
En cuanto al número de iteraciones máximas se fijará en 500, de forma que en la
mayorı́a de los casos la ejecución finalice por haber convergido a una solución, y sólo se
detenga el proceso de forma artificial en unos pocos casos al rebasarse un número de
ejecuciones, que se podrı́a considerar desmedido.
Si nos olvidamos de las conclusiones generales y nos fijamos en los datos obtenidos
para cada máster, vemos que los resultados del primero han sido mucho mejores que los
del segundo.
Analizando minuciosamente los casos parece posible inferir que al tener el máster en
Ingenierı́a Biomédica horario solo de tarde, le cuesta más al algoritmo colocar las clases
en posiciones válidas del horario. Es decir, que cuanto más restrinjamos el horario lectivo
del curso más le costará al programa encontrar una solución óptima, aun en el caso de
que la proporción de clases y horas disponibles se mantenga constante.
90
Anexo I. Manual de usuario
Este anexo contiene el manual de usuario de la aplicación web, si bien es probable que
su consulta no sea necesaria debido a lo sencillo e intuitivo de su manejo, es posible que
sea de gran utilidad en algún caso concreto.
Algunos colores o textos, o la disposición de algunos elementos, pueden variar mini-
mamente entre las capturas de la aplicación que aquı́ se mostrarán y la versión definitiva
del sistema, estas variaciones serán mı́nimas y no impedirán en ningún caso que la lectura
de este manual aclare cualquier duda acerca del uso de esta aplicación.
Antes de comenzar a detallar el funcionamiento de cada página de la aplicación, se
considera necesario comentar, que sea cual sea la página en la que nos encontremos, si
existe información más detallada sobre cualquier campo que se muestre, podremos acceder
a ella dirigiéndonos a la página que contiene esa información haciendo clic sobre dicho
campo, esta será la forma natural de navegar por los contenidos de la aplicación.
Coordinador de un máster: Puede editar su perfil, los másteres de los que es coor-
dinador y los cursos que forman parte de él. Puede crear coordinadores, aulas,
profesores y alumnos. Lo cursos de los que es coordinador aparecerán destacados.
Profesor de un curso: Puede editar su perfil y los cursos de los que es profesor. Puede
91
I. Manual de usuario I.2 Cabecera
crear aulas, profesores y alumnos. Sus ediciones sobre los calendarios de los cursos
deberán ser autorizados por los coordinadores. Lo cursos de los que es profesor
aparecerán marcados.
Invitado (no autentificado o no relacionado con la página visitada): Podrá ver los
datos públicos de la web.
Debido a que una persona puede cambiar de rol al pasar de visitar una página a otra,
no se han realizado versiones del manual independientes para cada tipo de usuario, sino
que las explicaciones relativas a todos ellos se encuentran entrelazadas en cada punto, del
mismo modo en el que podrán intercalarse en la aplicación real.
I.2. Cabecera
92
I. Manual de usuario I.3 Página principal
En la página principal se mostrará la lista de másteres que forman parte del sistema,
de la forma en que se puede ver en la Figura I.3.
Estarán ordenados temporalmente de forma que los más recientes, que son los que más
frecuentemente serán accedidos, aparezcan en la parte superior de la página.
A la izquierda del nombre aparecerá el perfil del usuario en dicho máster, en caso de no
haber iniciado sesión, el perfil será siempre el de invitado y en caso de estar autentificado
el perfil variará en función de cada máster y de las normas explicadas en el Anexo I.1.
Se deberá hacer clic, con el botón izquierdo del ratón, sobre el máster cuya información
se quiera editar o consultar.
La página de un máster contiene una gran cantidad de información, por ello se en-
cuentra dividida en pestañas, que podremos desplegar en el momento que lo deseemos, en
función de que esa información nos sea de interés o no. Esto se ha hecho también, para
reducir los tiempos de carga de la página.
Por eso, al cargar la página, la veremos tal y como se muestra en la Figura I.4.
93
I. Manual de usuario I.4 Página de un máster
94
I. Manual de usuario I.4 Página de un máster
Figura I.5: Cuadro que muestra la información principal de un máster, para usuarios no coordinadores
tas fechas servirán de guı́a a quienes visiten la página, para conocer entre que fechas se
desarrollan las clases del máster y también serán utilizadas durante la generación au-
tomática de horarios, para intentar enmarcar en el periodo que comprenden, las clases de
la asignatura.
El resto de campos serán solamente visibles y editables por coordinadores, pudiendo
especificar estos, de cara a la generación automática, el número de horas de clase que no
se quiere superar en un dı́a y el número de hora de clase consecutivas cuyo número no se
quiere superar.
Además, para proteger la privacidad de los alumnos, se podrá especificar si se desea
que los alumnos puedan ver el nombre, los apellidos y el email de sus compañeros de
máster.
El número de cuatrimestres y las fechas que los comprenden, será información consul-
table por todos los usuarios en el recuadro que se puede ver en la Figura I.6.
Figura I.6: Cuadro que muestra información sobre los cuatrimestres de un máster, para usuarios no
coordinadores
95
I. Manual de usuario I.4 Página de un máster
Figura I.7: Cuadro que muestra información sobre los cuatrimestres de un máster, para usuarios coordi-
nadores
Los coordinadores que forman parte de un máster serán visibles por todos los usuarios,
ası́ como su email y página web.
Los coordinadores además, podrán añadir nuevos coordinadores al máster usando el
campo con atocompletado que se encuentra en la parte superior del panel.
Al escribir texto en este campo, se devolverán como candidatos los profesores que se
encuentren dentro de la base de datos de la aplicación, aun no sean coordinadores del
máster y cuyo nombre, apellidos, email o nip comience con el texto escrito.
Si no ha sido creado todavı́a el profesor que se desea añadir, deberemos hacer clic
en “Crear uno nuevo”, opción que aparecerá al escribir cualquier texto en el campo con
autocompletado. Esto se comprenderá con mayor facilidad al visualizar la Figura I.8.
Al hacer esto, se desplegará un formulario en el que rellenaremos los datos del nuevo
profesor, es especialmente importante el email, que será la dirección a la que se envı́e la
contraseña de la cuenta que se creará para el nuevo profesor. El profesor ası́ creado se
añadirá automaticamente al máster como coordinador.
Los cursos del máster, junto al cuatrimestre en el que se imparten y nuestro rol en
dicho curso, serán campos visibles por todos los usuarios.
Los coordinadores podrán además, añadir cursos al máster del mismo modo en el que
se explicaba en el punto anterior, como hacerlo para los coordinadores. Esto se muestra
96
I. Manual de usuario I.4 Página de un máster
en la Figura I.9.
Todos los usuarios podrán ver que profesores imparten clase en algún curso del máster
y la web y email de estos.
No se podrán añadir profesores desde esta ventana, los profesores se añadirán desde
las páginas de los cursos y aparecerán automáticamente en el máster que contenga dichos
cursos.
Esta información será visible en un cuadro como el de la Figura I.10 para coordinadores
y profesores del máster, también podrán verla los alumnos si ası́ lo han especificado los
coordinadores.
97
I. Manual de usuario I.4 Página de un máster
Figura I.9: Cuadro que muestra información sobre los cursos de un máster, para usuarios coordinadores
Figura I.10: Cuadro que muestra información sobre los alumnos de un máster
Esta información estará disponible para todos los usuarios, aunque solo será editable
por los coordinadores.
El contenido de cada punto deberı́a ajustarse lo máximo posible a su tı́tulo, pero
esto dependerá del máster en cuestión, por lo que la información contenida puede variar
mucho.
La finalidad de los datos aquı́ contenidos, es dar una idea acerca de las caracterı́sticas
principales del máster, de cara a que pueda sea consultada por las personas interesadas.
98
I. Manual de usuario I.4 Página de un máster
Esta sección sólo es visible por los coordinadores, en ella podrán ver una lista con
todos los cambios en los horarios de las clases de las asignaturas del máster, que hayan
sido propuestos por los profesores de las diferentes asignaturas.
Estos cambios podrán aceptarse, con lo que se realizarán de forma definitiva en el
calendario, o rechazarse, borrándose la sugerencia de cambio de la lista.
Los cambios sugeridos podrán ser la edición, supresión o creación de una clase, los 3
casos pueden verse en la Figura I.11.
I.4.9. Calendario
En la sección que se muestra en la Figura I.12, todos los usuarios podrán ver los
horarios de los cursos que conforman el máster.
Los usuarios registrados podrán editar su horario personal y modificar los horarios de
los cursos del máster, en función de los derechos que tuviesen sobre ellos.
Los coordinadores podrán ver y editar, además de los calendarios nombrados anterior-
mente, el calendario del máster. Para más información sobre la edición del calendario se
debe consultar el Anexo I.9.5.
Otras de las atribuciones de los coordinadores, será la de importar el calendario de
festivo de otro máster. Este calendario lo conforman las horas y dı́as que han sido marcados
como no lectivos.
La utilidad de esto es no tener que introducir, una y otra vez, la lista de dı́as festivos
de un mismo centro o ahorrar el especificar las horas del dı́a que serán lectivas para un
máster, si estas ya se ha especificado para otro.
La opción más importante que tendrán disponible los coordinadores, será generar el
horario del máster automáticamente, pulsando el botón “Generar”, lo que borrará las ho-
ras de clase previamente asignadas a cada curso y les asignará unas nuevas, que cumplirán
en la medida de lo posible con los requisitos introducidos por coordinadores y profesores.
Al terminar la generación del horario, se mostrarán sobre el calendario el porcentaje
de éxito de la operación y la lista de restricciones que no han podido cumplirse, tal y
como se muestra en la Figura I.13.
Los horarios podrán regenerarse tantas veces como se desee, obteniéndose cada vez
resultados diferentes, aunque el porcentaje de éxito alcanzado se mantendrá, más o menos,
constante.
99
I. Manual de usuario I.5 Página de un curso
Figura I.11: Cuadro que muestra los cambios pendientes de aprobación en los calendarios de los cursos
100
I. Manual de usuario I.5 Página de un curso
Aquı́ se pueden ver los campos que identifican al curso, junto con el cuatrimestre del
máster en el que se imparte. Esta información será visible por todos los usuarios y editable
por profesores y coordinadores, de la forma en que se muestra en la figura I.15.
101
I. Manual de usuario I.5 Página de un curso
102
I. Manual de usuario I.5 Página de un curso
Figura I.15: Cuadro que muestra la información principal de un curso para un coordinador
Figura I.16: Cuadro que, para no coordinadores, muestra la información sobre las aulas de un curso
Los alumnos podrán ver al resto de alumnos del curso, si ası́ lo ha especificado el
coordinador del máster. Por su parte, profesores y coordinadores podrán, además de ver,
añadir alumnos al curso, tal y como se muestra en la Figura I.17.
Se muestra la lista de cursos del máster, que es necesario haber cursado con anterio-
ridad a este. Profesores y coordinadores, pueden ampliar dicha lista del mismo modo en
el que ya se ha visto como añadir aulas y alumnos.
Los usuarios que no sean profesores, ni coordinadores podrán ver la lista de profesores.
Por su parte, los que si lo sean, podrán, además, añadir profesores ya existentes o crear
nuevos profesores para ser añadidos, tal y como se puede ver en la Figura I.18.
Acerca de los profesores que tienen docencia asignada en el curso, los usuarios auto-
rizados podrán variar cuantas clases de teorı́a y de prácticas dan y el orden en que las
imparten (dentro del total de clases prácticas y teóricas de la asignatura).
En el caso especial, de que se quiera que 2 profesores impartan clase al mismo tiempo,
simplemente se tendrá que hacer coincidir su orden en la impartición de clases.
103
I. Manual de usuario I.5 Página de un curso
Figura I.17: Cuadro que muestra los alumnos matriculados y el formulario para agregar uno nuevo
Figura I.18: Cuadro que muestra los profesores de un máster para usuarios con derechos de edición
Esta información será visible por todos los usuarios y editable sólo por profesores y
coordinadores.
La información aquı́ mostrada, deberı́a dar una idea general sobre el curso en cuestión,
a las personas interesadas en él.
104
I. Manual de usuario I.5 Página de un curso
Aquı́ los coordinadores y profesores podrán especificar, las pautas que quieren que
se sigan durante la generación automática de horarios. Pudiendo indicar mediante el
formulario que se muestra en la Figura I.19:
Figura I.19: Cuadro que muestra los datos para la generación del horario del curso
I.5.8. Calendario
105
I. Manual de usuario I.6 Página de un aula
Además, si somos los creadores del aula, podremos ver y editar su calendario y su
descripción.
Esta página será solamente editable por el usuario que sea su propietario.
En el caso de los alumnos, mostrará al resto de usuarios autorizados su nip, nombre,
apellidos, email y los cursos en que está matriculado.
Si el usuario activo es un alumno, verá su página como la que se muestra en la Figura
I.21, en ella podrá editar el email en el que reciben los mensajes de la aplicación y que
se muestra al resto de usuarios y su clave de acceso al sistema, además de consultar los
horarios de todos los cursos en los que está matriculado.
Si el usuario es un profesor o coordinador, la página que se mostrará será la de la
Figura I.22 en la que se podrán ver su nip, nombre, apellidos y email, además del área y
departamento a los que pertenece, los cursos de los que es profesor y los másteres de los
que es coordinador.
El profesor propietario de la página, podrá además, editar esta información e informar
a la herramienta de generación de horarios de cuantas horas de clase consecutivas no desea
superar y cual es el número de horas que quiere impartir, como máximo, en un mismo
dı́a. También podrá editar su calendario personal y ver los horarios de sus cursos.
106
I. Manual de usuario I.8 Página de identificación
Para conseguirlo, únicamente hay que dar un usuario y contraseña válidos. El usuario
será siempre el nip de la persona y la contraseña será, en un primer momento, la que
hayamos recibido por correo electrónico al ser dados de alta y, más tarde, la que el propio
usuario haya elegido.
Marcaremos recordarme en este equipo, si no queremos tener que volver a autentifi-
107
I. Manual de usuario I.9 Calendarios
I.9. Calendarios
A continuación, se dan las pautas necesarias para el uso correcto de los calendarios de
la aplicación. Esta es la parte del manual cuya lectura es más recomendable, al introducir
conceptos poco corrientes como el de “sugerencia de modificaciones”.
108
I. Manual de usuario I.9 Calendarios
Sin relevancia: Este evento no será tenido en cuenta por el generador de eventos, su
funcionalidad principal es informar a los usuarios, que vean el calendario, de alguna
actividad.
Periodo no lectivo: Los eventos de este tipo marcan, principalmente, los dı́as de
fiesta y las horas fuera del horario lectivo.
El color de los calendarios nos informa de nuestros privilegios de edición sobre ellos:
Morado: Podemos sugerir modificaciones sobre las horas de clase y modificar libre-
mente los eventos que no sean horas lectivas.
109
I. Manual de usuario I.9 Calendarios
Fijaremos también el nombre del evento y daremos una pequeña descripción sobre el.
Podremos además, asignarle un calendario de entre los que estén disponibles en este
momento y un tipo de ente los presentados en el Anexo I.9.2.
Si queremos crear eventos que se repitan de forma periódica, podremos utilizar para
ello las opciones de la parte inferior del cuadro.
Este cuadro de diálogo será también utilizado para borrar eventos, pulsando el botón
pertinente.
En el panel de la Figura I.25, se ven los calendarios disponibles en cada momento, los
calendarios se cargan en función del usuario y de la página visitada.
Los que estén marcados, serán los que se veremos en el calendario y los que podremos
editar, es decir:
110
I. Manual de usuario I.10 Alertas
I.9.6. Manejo
Mediante los botones del panel principal podremos elegir entre las diferentes vistas
disponibles, estas serán dı́a, semana, mas y año. Las figuras I.26, I.27, I.28 y I.29 son
capturas de cada una de estas vistas.
En todas ellas, podremos editar y crear eventos, a excepción de la vista anual, en la
que no es posible, ya que su utilidad radica en poder conocer de un solo vistazo cuáles
son los dı́as de un año con eventos marcados.
El desplazamiento temporal se realizará haciendo uso del calendario de la parte su-
perior izquierda o de las flechas que se encontrarán en la parte superior de la vista que
tengamos desplegada en ese momento. Además, se tendrá disponible el botón “Hoy” para
regresar a la fecha actual.
Para ver los datos de un evento, simplemente se tendrá que hacer clic sobre él. Mientras
que, para crear un evento, se deberá hacer clic sobre un espacio libre del calendario,
normalmente sobre la posición en la que se quiera que aparezca el evento.
Para editar eventos, se debe pinchar sobre ellos, para, a continuación, realizar los cam-
bios mediante el cuadro de diálogo presentado en el Anexo I.9.4 o simplemente arrastrar,
alargar o encoger los recuadros que los representan.
I.10. Alertas
Se mandarán alertas por email a los usuarios para comunicarles datos que puedan ser
de su interés urgente.
111
I. Manual de usuario I.10 Alertas
112
I. Manual de usuario I.10 Alertas
113
I. Manual de usuario I.10 Alertas
114
Anexo J. Manual del administrador
La aplicación desarrollada está lista para su uso, aun ası́ siempre será necesario un
administrador que se haga cargo de ella. En una primera fase para su instalación y más
tarde para su mantenimiento.
J.1. Tomcat
Una vez hecho esto sólo habrá que copiar los 2 ficheros que forman la aplicación,
115
J. Manual del administrador J.2 MySQL
J.2. MySQL
J.2.1. Configuración
Aunque se ha intentado que la aplicación funcione sin realizar cambios sobre la confi-
guración estándar de MySQL, esto no ha podido evitarse por completo.
Es necesaria la modificadión del fichero DIRECTORIO_INSTALACION_MYSQL\bin\my pa-
ra activar el uso del tipo de tabla “Innodb”.
Para conseguir esto se deberá substituir la lı́nea:
s k i p −innodb
116
J. Manual del administrador J.2 MySQL
Una vez concluido el paso anterior tenemos que lanzar MySQL y crear la base de datos
de la aplicación y el usuario que utilizará para acceder a ella.
De forma predeterminada, la aplicación trabajará con la base de datos “masters”,
situada en la dirección predeterminada de MySQL jdbc:mysql://localhost:3306.
Debemos crear esta base de datos y cargar en ella las tablas y Triggers contenidos en
los ficheros DVDPROYECTO\otrosAnexos\sql\tablas.sql y DVDPROYECTO\otrosAnexos\
sql\triggers.sql.
Si ası́ se desea, se podrán también cargar los datos de ejemplo contenidos en los ficheros
de la carpeta DVDPROYECTO\otrosAnexos\sql\ejemplos\.
Una vez hecho esto crearemos el usuario “usuario” de contraseña “nosena” y le daremos
los permisos necesarios para que pueda realizar las operaciones Select, Insert, Update y
Delete sobre la base de datos de la aplicación.
Con esto se ha finalizado la preparación de la base de datos y la aplicación puede
empezar a funcionar.
Si no queremos usar la base de datos y el usuario predeterminados, deberemos seguir
los pasos que se especifican en el Anexo J.2.3.
117
J. Manual del administrador J.3 NetBeans
</bd>
Para que dicho fichero sea cargado al arrancar la aplicación, tiene que encontrase en el
fichero en el que Tomcat (o el servidor utilizado) vaya a buscarlo, normalmente en Tomcat
esta dirección será DIRECTORIO_INSTALACION_TOMCAT\bin.
J.3. NetBeans
118
Anexo K. Versión de evaluación
Los usuarios pueden acceder a la versión de prueba de la aplicación, con cada uno de
los diferentes perfiles posibles, referidos a los másteres:
K.2. Limitaciones
La aplicación no enviará emails informando a los usuarios del sistema de las modifica-
ciones realizadas en los calendarios, ni a los nuevos usuarios para comunicarles su nombre
de usuario y contraseña.
119
K. Versión de evaluación K.2 Limitaciones
Esto es obligado, para no molestar a las personas cuyos datos se han tomado para
recrear los diferentes másteres de ejemplo.
120