TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 ›...

245

Transcript of TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 ›...

Page 1: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos
Page 2: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

AGRADECIMIENTOS

A mi familia por su apoyo durante toda la carrera.

A mi tutor Vicente por brindarme su ayuda y dedicacion.

Page 3: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Indice general

1. RESUMEN 11.1. ESPANOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.2. ENGLISH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2. INTRODUCCION Y OBJETIVOS 32.1. OBJETIVOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.1.1. PRIMERA FASE . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.1.2. SEGUNDA FASE . . . . . . . . . . . . . . . . . . . . . . . . . 5

3. BREVE ESTUDIO DEL ALGORITMO 63.0.3. DEFINICION: . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

3.0.4. CARACTERISTICAS PRINCIPALES: . . . . . . . . . . . . . . 7

4. TOMA DE MEDIDAS 8

5. FASE 1 125.1. MAPA CONCEPTUAL 1º FASE . . . . . . . . . . . . . . . . . . . . . . 12

5.2. ESPECIFICACION DE REQUISITOS . . . . . . . . . . . . . . . . . . . 14

5.3. DISENO DE ALTO NIVEL PRIMERA FASE . . . . . . . . . . . . . . . 15

5.4. DISENO DE BAJO NIVEL PRIMERA FASE . . . . . . . . . . . . . . . 15

5.5. PLAN DE PRUEBAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

5.5.1. PRUEBAS UNITARIAS . . . . . . . . . . . . . . . . . . . . . . 17

5.5.2. PRUEBAS DE ENSAMBLAJE . . . . . . . . . . . . . . . . . . 18

5.5.3. CASOS DE USO . . . . . . . . . . . . . . . . . . . . . . . . . . 21

5.6. IMPLEMENTACION PRIMERA FASE . . . . . . . . . . . . . . . . . . 31

5.6.1. LIBRERIAS UTILIZADAS . . . . . . . . . . . . . . . . . . . . 31

5.6.2. OTROS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

5.6.3. CODIGO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

2

Page 4: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

5.7. EVALUACION DE LA PRIMERA FASE . . . . . . . . . . . . . . . . . 32

6. FASE 2 346.1. MODIFICACIONES AL PROYECTO . . . . . . . . . . . . . . . . . . . 34

6.2. DIAGRAMA DE GANTT DEL PROYECTO . . . . . . . . . . . . . . . 35

6.3. RE-ANALISIS DE REQUISITOS . . . . . . . . . . . . . . . . . . . . . 37

6.4. MAPA CONCEPTUAL 2º FASE . . . . . . . . . . . . . . . . . . . . . . 39

6.5. DISENO DE ALTO NIVEL 2º FASE . . . . . . . . . . . . . . . . . . . 41

6.6. DISENO DE BAJO NIVEL 2º FASE . . . . . . . . . . . . . . . . . . . . 41

6.7. IMPLEMENTACION 2º FASE . . . . . . . . . . . . . . . . . . . . . . . 43

6.7.1. PROGRAMAS UTILIZADOS . . . . . . . . . . . . . . . . . . . 43

6.7.2. LIBRERIAS UTILIZADAS . . . . . . . . . . . . . . . . . . . . 43

6.7.3. OTROS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

6.7.4. CODIGO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

6.8. PLAN DE PRUEBAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

6.8.1. PRUEBAS UNITARIAS . . . . . . . . . . . . . . . . . . . . . . 45

6.8.2. PRUEBAS DE ENSAMBLAJE . . . . . . . . . . . . . . . . . . 50

6.8.3. CASOS DE USO . . . . . . . . . . . . . . . . . . . . . . . . . . 55

7. RESUMEN Y CONCLUSIONES 697.1. EVALUACION FINAL . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

7.2. CONCLUSIONES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

8. CITAS Y BIBLIOGRAFIA 73

9. ANEXO A: CODIGO DESARROLLADO 1º FASE 749.1. Package Arbol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

9.1.1. Arbol.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

9.1.2. Elemento.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

9.1.3. LTree.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

9.1.4. LTree.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

9.2. Package Grafica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

9.2.1. AA.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

9.2.2. ChoiceLle.java . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

9.2.3. ChoiceSal.java . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

9.2.4. Dibujo.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

9.2.5. Pixel.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

9.2.6. Ventana.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

9.3. Package Grafo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

9.3.1. Grafo.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

9.3.2. Nodo.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

3

Page 5: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

10. ANEXO B: CODIGO DESARROLLADO 2º FASE 14310.1. Package Arbol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

10.1.1. Arbol.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

10.1.2. Elemento.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

10.1.3. LTree.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

10.1.4. LTreeNode.java . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

10.2. Package Grafica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

10.2.1. AA.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

10.2.2. ChoiceLle.java . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

10.2.3. ChoiceSal.java . . . . . . . . . . . . . . . . . . . . . . . . . . . 190

10.2.4. Dibujo.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199

10.2.5. menuayuda.java . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

10.2.6. menumapa.java . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

10.2.7. Pixel.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216

10.2.8. Principal.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218

10.2.9. Ventana.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219

10.3. Package Grafo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229

10.3.1. Grafo.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229

10.3.2. Nodo.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234

Page 6: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos
Page 7: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

Capıtulo 1

RESUMEN

1.1. ESPANOLEl presente proyecto tratara sobre la aplicacion de un algoritmo que ayude a tomar

decisiones en un grafo para llegar desde un nodo a otro. Dicho grafo representara el mapa

de la ciudad de Valencia, el cual tendra tantos nodos como estaciones existan. Para dicho

proyecto el objetivo es preparar y documentar el proceso que se darıa a lo largo de un

proyecto real de software estableciendo ası tanto los requisitos como los disenos de alto ybajo nivel para el mismo, un plan de pruebas, la implementacion del proyecto en lengua-

je java y una evaluacion final que ayude a determinar la solidez de la aplicacion de ese

algoritmo en dicho grafo.

Al igual que en los proyectos software, el desarrollo del mismo se hara en varias fases

bien definidas entre sı, en las cuales se ira depurando y mejorando. Dada la dificultad

del proyecto, el numero de fases establecidas ha sido de dos. En ambas se aplicaran los

mismos criterios de programacion y desarrollo de la documentacion, entregandose ası en

la memoria de seguimiento la primera fase del proyecto casi en su totalidad siendo de esta

forma establecida como primer Deadline de entrega del proyecto.

La segunda fase, se dedicara a cumplir con los requisitos que no hayan sido superados

a lo largo del primer ciclo o que se hayan decidido anadir tras la finalizacion de la primera

fase (re-analisis), finalizando ası todo el proyecto en la entrega del segundo Deadline y ha-

biendo solucionado los posibles errores de implementacion encontrados en la evaluacion

de la primera fase.

R.Sanz 1

Page 8: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

1.2. ENGLISHThe following project will show the application of decision making algorythms in the

selection of the fastest path between two nodes. This selection will be done in a specific

graph: Valencia’s Underground System. The number of nodes will be defined by the num-

ber of stations that this map has.

This project will be defined and done like a software engineering project, establishing

a system of requirements, the high level design and the low level design. Also, a system

test will be done and the implementation of the proyect using Java language. Finally, an

evaluation will be applied using the test system in order to find out the mistakes and sub-

sequently,in a second phase fix them.

The second phase will be used to finish all the requirements (including the new ones)

and the mistakes of the first phase will be arranged.

There will be two deadlines along the development: the first one will coincide with the

delivery of the tracking memory and the second one will be on the delivery of the finalmemory.

R.Sanz 2

Page 9: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

Capıtulo 2

INTRODUCCION Y OBJETIVOS

En la actualidad, la aplicacion de diferentes algoritmos matematicos se encuentra en

todos los ambitos de nuestra vida. Desde las busquedas mas sencillas que un usuario

puede hacer en un buscador de internet, hasta los sistemas de geoposicionamiento mas

sofisticados del momento.

Estos algoritmos, tienen una mayor o menor capacidad de adaptacion a la resolucion de

ciertos problemas, resultando ası mas o menos utiles segun que problemas necesitemos

resolver. Con el actual crecimiento exponencial de los nucleos urbanos, los sistemas de

transporte se han ido sofisticando y agrandando en funcion de las necesidades, llegando a

un punto en el cual, el usuario necesita la ayuda de sistemas informaticos que le puedan

orientar tanto para localizar el destino al que quieren llegar como la forma de llegar a ese

destino.

Este proyecto, pretende abordar la problematica de estos usuarios, centrandolo en las

busquedas de caminos mas cortos para llegar desde su origen a su destino y aplicandolo

mas concretamente a los sistemas de metro que tantas ciudades poseen en todo el mundo

y a su vez, presentando de forma grafica una interfaz amigable que permita mostrarles el

resultado de la busqueda en cuestion.

De entre todos los algoritmos existentes en la actualidad para localizar el camino de me-

nor coste, se utilizara el Algoritmo a Estrella cuya definicion viene dada por la siguiente

afirmacion (entre otras): .El algoritmo A* se clasifica dentro de los algoritmos de busquedainformados. Encuentra siempre y cuando se cumplan unas determinadas condiciones, elcamino de menor coste entre un vertice origen y uno destino.

El problema de algunos algoritmos de busqueda en grafos informados, es que se guıanen exclusiva por la funcion heurıstica, la cual puede no indicar el camino de coste mas

R.Sanz 3

Page 10: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

bajo, o por el coste real de desplazarse de un nodo a otro. Pudiendose dar el caso deque sea necesario realizar un movimiento de coste mayor para alcanzar la solucion. Seda por ello el hecho de que un buen algoritmo de busqueda informada deberıa tener encuenta ambos factores, el valor heurıstico de los nodos y el coste real recorrido.

Ası, el algoritmo A* utiliza una funcion de evaluacion F = G + H, donde H represen-ta el valor heurıstico del nodo a evaluar desde el actual hasta el nodo de destino. Y G elcoste real del camino recorrido para llegar a dicho nodo destino.[2]”

R.Sanz 4

Page 11: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

2.1. OBJETIVOSLos objetivos son:

Breve estudio del algoritmo.

2.1.1. PRIMERA FASE1. Analisis del problema.

2. Analisis de requisitos: Elegir el orden de los problemas, estableciendo unos requi-

sitos que permitan solucionarlos.

3. Disenos de alto y bajo nivel.

4. Plan de pruebas.

5. Implementacion y codificacion:

Implementar el algoritmo.

Crear una interfaz grafica.

6. Evaluacion de la primera fase: Aplicar el plan de pruebas para depurar y mejorar el

proyecto en una segunda fase pasado el primer Deadline.

2.1.2. SEGUNDA FASE1. Reanalisis del problema partiendo de los datos obtenidos en la primera fase.

2. Revision de los requisitos para la segunda fase.

3. Cambios en el diseno de alto y bajo nivel en el caso de ser necesarios.

4. Implementacion y codificacion:

Mejorar la implementacion del algoritmo su fuera necesario.

Modificar la interfaz grafica para que quede de forma definitiva.

5. Evaluacion de la segunda fase.

R.Sanz 5

Page 12: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

Capıtulo 3

BREVE ESTUDIO DEL ALGORITMO

En esta seccion se introducira de forma orientativa el algoritmo siguiendo distintas

definiciones encontradas por Internet [4].

3.0.3. DEFINICION:El algoritmo de busqueda A* se clasifica dentro de los algoritmos de busqueda en

grafos. Presentado por primera vez en 1968 por Peter E. Hart, Nils J. Nilsson y BertramRaphael, el algoritmo A* encuentra, siempre y cuando se cumplan unas determinadascondiciones, el camino de menor coste entre un nodo origen y uno objetivo.

El problema de algunos algoritmos de busqueda es que se guıan en exclusiva por lafuncion heurıstica, la cual puede no indicar el camino de coste mas bajo, o por el costereal de desplazarse de un nodo a otro (como los algoritmos de escalada), pudiendose darel caso de que sea necesario realizar un movimiento de coste mayor para alcanzar lasolucion.

Es por ello que un buen algoritmo de busqueda informada deberıa tener en cuenta ambosfactores, el valor heurıstico de los nodos y el coste real del recorrido.

Ası, el algoritmo A* utiliza una funcion de evaluacion:

f(n) = g(n) + h′(n) (3.1)

Donde,

g(n) : el coste real del camino recorrido para llegar a dicho nodo, n, desde el nodo inicialh′(n) : representa el valor heurıstico del nodo a evaluar

R.Sanz 6

Page 13: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

A su vez, A* mantiene dos estructuras de datos auxiliares, que podemos denominar abier-tos, implementado como una cola de prioridad (ordenada por el valor f(n) de cada no-do), y cerrados, donde se guarda la informacion de los nodos que ya han sido visitados.En cada paso del algoritmo, se expande el nodo que este primero en abiertos, y en casode que no sea un nodo objetivo, calcula la f(n) de todos sus hijos, los inserta en abiertos,y pasa el nodo evaluado a cerrados.

3.0.4. CARACTERISTICAS PRINCIPALES:Como todo algoritmo de busqueda en amplitud, A* es un algoritmo completo: en

caso de existir una solucion, siempre dara con ella.

Si para todo nodo n del grafo se cumple g(n) = 0, nos encontramos ante una busquedavoraz. Si para todo nodo n del grafo se cumple h(n) = 0, A* pasa a ser una busqueda decoste uniforme no informada.

Para garantizar la optimizacion del algoritmo, la funcion h(n) debe ser heurıstica ad-misible, esto es, que no sobrestime el coste real de alcanzar el nodo objetivo.

De no cumplirse dicha condicion, el algoritmo pasa a denominarse simplemente A, ya pesar de seguir siendo completo, no se asegura que el resultado obtenido sea el ca-mino de coste mınimo. Asimismo, si garantizamos que h(n) es consistente (o monotona),es decir, que para cualquier nodo n y cualquiera de sus sucesores, el coste estimado dealcanzar el objetivo desde n no es mayor que el de alcanzar el sucesor mas el coste dealcanzar el objetivo desde el sucesor.

R.Sanz 7

Page 14: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

Capıtulo 4

TOMA DE MEDIDAS

La toma de medidas se ha realizado con la herramienta de medicion de Google Maps.

Dichas medidas son aproximadas ya que se han ajustado algunas a mano para la rea-

lizacion de pruebas. A continuacion se muestran algunas imagenes extraıdas de dicho

proceso. No se ha tomado ninguna estacion como referencia al tratarse de un grafo por lo

que la medicion se ha hecho entre estaciones sin dejar ninguna variacion entre medias.

Posicionamiento de estaciones de metro y cercanıas de Valencia:

R.Sanz 8

Page 15: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

Situacion geografica de todo el plano zonal valenciano:

Gracias a la tecnologıa desarrollada por Google Maps, se puede superposicionar el plano

zonal de transportes de Valencia para trabajar sobre el terreno. Esto ha sido de gran ayuda

ya que si hubiera sido de otra forma, se habrıan dado serios problemas debido a que el

tiempo habrıa sido todavıa mucho mayor del que ha sido hasta ahora, que ya ha supuesto

demasiado.

R.Sanz 9

Page 16: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

Confluencia de varias lineas en una misma estacion:

Ejemplos de extraccion de medidas con google maps:

R.Sanz 10

Page 17: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

R.Sanz 11

Page 18: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

Capıtulo 5

FASE 1

En esta seccion se detallara el desarrollo de todo el proyecto al completo. Ambas fases

vendran detalladas en la memoria de forma que se puedan ver los cambios que se han ido

realizando a lo largo del mismo.

5.1. MAPA CONCEPTUAL 1º FASEEn esta seccion se muestra un mapa conceptual de las principales funciones de la apli-

cacion. Las ’extras’ como cargado y guardado de rutas no se muestran.

Como podemos observar, el usuario mediante su computadora seleccionara una estacion

origen y una estacion destino de las que estan incluidas en el metro de Valencia. Una

vez realizada dicha seleccion, el usuario pulsara el boton ’Send’ el cual dara la orden de

busqueda de la ruta mas corta al algoritmo implementado en el desarrollo.

A su vez, se generara una ventana emergente la cual mostrara por pantalla la ruta es-

cogida por el algoritmo, dando una lista detallada de las estaciones y la lınea al a que

pertenece dicha estacion (el itinerario a seguir por el usuario). Una vez mostrado, el usua-

rio volvera a obtener el control del programa.

R.Sanz 12

Page 19: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos
Page 20: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

5.2. ESPECIFICACION DE REQUISITOSEn la siguiente seccion se describen los requisitos establecidos en una reunion pre-

desarrollo. Como se podra comprobar, estan divididos en dos clases: de Sistema y de

Interfaz. En los primeros se detallaran los requisitos relativos a que pautas deben seguir-

se y cumplirse para crear el proyecto. En los requisitos de Interfaz se detallara que debe

cumplirse a la hora de crear la interfaz grafica del proyecto.

La especificacion de requisitos y su organizacion se basa en el estandar IEEE-STD-830-

1998 [1]:

1. Sistema

1.1. El Sistema tendra que contener tantos nodos como estaciones tenga el metro

de Valencia

1.2. El Sistema implementara el algoritmo a estrella para calcular el camino de

menor coste.

1.3. El Sistema funcionara de forma autonoma y sin conexion a Internet.

1.4. El Sistema debera estar implementado en Java, utilizando una librerıa espe-

cializada.

1.5. El Sistema debera ser aplicable a cualquier red de metro en caso de ser nece-

sario.

NOTA: Se debera encontrar una solucion generica al problema que aplique el algoritmo y permita ser utilizado para

cualquier red de metro cambiando los datos de las estaciones en cuestion.

2. Interfaz

2.1. El Sistema mostrara una lista de todas las estaciones por las que debera pasar

para llegar desde el origen al destino.

2.2. El Sistema permitira al usuario seleccionar la estacion de origen.

2.3. El Sistema permitira al usuario seleccionar la estacion destino.

2.4. El Sistema tendra una interfaz grafica depurada que muestre las estaciones de

forma intuitiva y sencilla.

2.4.1. El Sistema sera lo mas fiel posible a la regla de los 3 clics [5]

2.4.2. El Sistema permitira salir de la aplicacion mediante el correspondiente

boton.

2.4.3. El Sistema ofrecera la posibilidad de mostrar quien ha sido el desarrolla-

dor del sistema.

R.Sanz 14

Page 21: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

5.3. DISENO DE ALTO NIVEL PRIMERA FASELa arquitectura utilizada para el diseno de alto nivel de la aplicacion, es la arquitectura

basada en capas, la cual esta formada por tres en este caso:

Capa de Presentacion: La interfaz grafica, la cual estara de cara a los usuarios de la

aplicacion.

Capa de Negocio: En esta capa se situa toda la implementacion interna del algoritmo

a estrella, la cual se encargara de procesar las rutas encontrando el camino mas corto

para cada peticion que haga el usuario.

Capa de Datos: Esta capa contendra todos los datos extraıdos del metro de Valencia

y los cuales seran la fuente en la cual se apoyara la capa de Negocio para realizar

las busquedas.

5.4. DISENO DE BAJO NIVEL PRIMERA FASEEl diseno de Bajo Nivel ha sido creado con la herramienta ObjectAid UML Explorer

para el entorno de desarrollo Eclipse.

R.Sanz 15

Page 22: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos
Page 23: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

5.5. PLAN DE PRUEBASEl siguiente plan se ha disenado para poner a prueba de tres formas distintas el proyec-

to. A pesar de ser pocas pruebas, las funciones principales del programa han sido cubiertas

en esta primera fase. En las pruebas unitarias lo mas importante es la comprobacion del

algoritmo (ver que calcula bien la ruta que se elija y que devuelve la lista de estaciones

por las que pasar a modo de itinerario del camino mas corto).

Respecto a las pruebas de ensamblaje, lo mas importante es probar los 4 puntos crıticos

del sistema que son los puntos donde interfaz grafica y codigo se unen: las pulsaciones de

los botones, las selecciones de las estaciones y la devolucion de la ruta en cuestion en una

ventana emergente.

Por ultimo, como pruebas definitivas, se han disenado varios casos de uso en los cua-

les la utilizacion del software sera puesto a prueba, y el algoritmo tendra que buscar rutas

cada vez mas complicadas.

5.5.1. PRUEBAS UNITARIASSeleccion del camino mas corto (prueba del algoritmo):

• Objetivo: Dada una estacion origen y una estacion destino, la aplicacion de-

bera devolver una ruta que sea la del camino mas corto para llegar de una

estacion a otra

• Resultado: SATISFACTORIO

Como ejemplo, para la estaciones seleccionadas: Alameda y Alboraya Palmaret, el

camino devuelto es el siguiente:

R.Sanz 17

Page 24: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

5.5.2. PRUEBAS DE ENSAMBLAJESeleccion de estacion origen:

• Objetivo: Buscar mediante scroll vertical la estacion de origen que el usuario

quiera seleccionar.

• Resultado: SATISFACTORIO

Seleccion de estacion destino:

• Objetivo: Buscar mediante scroll vertical la estacion de destino que el usuario

quiera seleccionar.

• Resultado: SATISFACTORIO

R.Sanz 18

Page 25: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

Seleccion de Envıo de informacion:

• Objetivo: Una vez superadas las dos pruebas anteriores, Pulsado de boton

Aceptar. Debe devolver una ventana emergente con una lista de estaciones.

• Resultado: SATISFACTORIO

Ensamblado de Interfaz grafica con modulo de codigo:

• Objetivo: Comprobar que todas las selecciones y botones realizan su funcion.

Seleccionar estacion de origen y estacion destino. Una vez seleccionadas pul-

sar Aceptar.

• Devuelve: Debe generar una ventana emergente en la cual aparecera una lista

de las estaciones en cuestion que sigue el camino calculado.

• Resultado: SATISFACTORIO

R.Sanz 19

Page 26: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

R.Sanz 20

Page 27: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

5.5.3. CASOS DE USOEn esta seccion se detallan algunos casos de uso utilizados para poner a prueba la

aplicacion. Van de menor a mayor dificultad.

De una estacion a otra adyacente:

Nombre Trayecto de estaciones adyacentes

Actores Usuario

Funcion Saber cual es el itinerario mas corto entre dos estaciones adyacen-

tes

Descripcion El usuario puede elegir una estacion origen y una estacion des-

tino que sean adyacentes. El usuario puede pulsar aceptar una vez

seleccionadas y recibir el itinerario de las estaciones por las que

pasara el metro.

Origen: Empalme (Linea 4)

Destino: Palau de Congressos (Linea 4)

R.Sanz 21

Page 28: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

R.Sanz 22

Page 29: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

De una estacion a otra de la misma linea:

Nombre Trayecto de una lınea sin transbordos

Actores Usuario

Funcion Saber cual es el itinerario mas corto entre dos estaciones de la

misma linea

Descripcion El usuario puede elegir una estacion origen y una estacion destino

dentro de la misma linea de metro. El usuario puede pulsar aceptar

una vez seleccionadas y recibir el itinerario de las estaciones por

las que pasara el metro.

Origen: Empalme (Linea 4)

Destino: Transits (Linea 4)

R.Sanz 23

Page 30: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

R.Sanz 24

Page 31: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

De una estacion a otra de una linea distinta con un transbordo:

Nombre Trayecto de varias lineas con un transbordo

Actores Usuario

Funcion Saber cual es el itinerario mas corto entre dos estaciones de dis-

tintas lineas

Descripcion El usuario puede elegir una estacion origen y una estacion destino

situadas en dos lineas distintas siempre y cuando solo haya un

transbordo entre ellas. El usuario puede pulsar aceptar una vez

seleccionadas y recibir el itinerario de las estaciones por las que

pasara el metro.

Origen: Sagunt (Linea 4)

Destino: Orriols (Linea 6)

R.Sanz 25

Page 32: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

R.Sanz 26

Page 33: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

De una estacion a otra de una linea distinta con dos transbordos:

Nombre Trayecto de una linea con dos transbordos

Actores Usuario

Funcion Saber cual es el itinerario mas corto entre dos estaciones de dis-

tintas lineas

Descripcion El usuario puede elegir una estacion origen y una estacion des-

tino situadas en dos lineas distintas siempre y cuando haya dos

transbordo entre ellas. El usuario puede pulsar aceptar una vez

seleccionadas y recibir el itinerario de las estaciones por las que

pasara el metro.

Origen: Palau de Congressos (Linea 4)

Destino: Mislata (Linea 3)

R.Sanz 27

Page 34: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

R.Sanz 28

Page 35: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

Usuario quiere ver quien desarrollo el proyecto:

Nombre Ver desarrollador

Actores Usuario

Funcion Consultar quien ha desarrollado la aplicacion

Descripcion El usuario puede consultar quien es ha desarrollado de la aplica-

cion

Hacer click en ’Archivo’, ’A cerca de...’

R.Sanz 29

Page 36: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

Usuario quiere salir del programa

Nombre Salir del programa

Actores Usuario

Funcion Salir del programa sin haber hecho una busqueda

Descripcion El usuario puede salir del programa sin haber hecho una busqueda

previamente sin tener que cerrar la ventana de forma abrupta

Hacer click en ’Archivo’, ’Salir’

R.Sanz 30

Page 37: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

5.6. IMPLEMENTACION PRIMERA FASE

5.6.1. LIBRERIAS UTILIZADASPara el desarrollo del proyecto se han utilizado especıficamente dos librerıas externas

de Java a parte de las que vienen por defecto:

Java Decision Diagram Libraries:

Esta librerıa se puede localizar el siguiente enlace [6]:

http://java-decision-diagram-libraries.soft112.com/

This project contains two different Binary Decision Diagrams (BDD) libraries:

1. JBDD: a Java interface to two popular BDD libraries, CUDD and BuDDy.

2. JDD: a native Java library supporting BDD, Z-BDD and more (graph/automata/Pe-

tri nets/SAT).

Net Datastructures 5:

Esta librerıa se puede localizar en el siguiente enlace [7]:

http://net3.datastructures.net/

net.datastructures is a Java package containing a collection of Java interfaces and clas-

ses that implement fundamental data structures and algorithms, such as: sequences, trees,

priority queues, search trees, hash tables sorting algorithms graphs, their traversals, and

applications, (e.g. shortest paths) The package was designed for educational use. It pro-

vides a set of functional components defined by simple APIs and easy to use. The code

is readable, reliable, asymptotically efficient, and object-oriented. Programming can be

done through interfaces only, with knowledge of specific implementations necessary only

for specialized applications. net.datastructures has been developed at Brown University

and at the University of California, Irvine. The work on this project was supported in part

by the National Science Foundation under grants DUE-0231202 and DUE-0231467.

R.Sanz 31

Page 38: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

5.6.2. OTROS

ObjectAir UML Explorer

Herramienta de visualizacion de codigo creada para el IDE de Eclipse. Permite ver

en tiempo real el codigo implementado dentro de un proyecto como si fuera un diagrama

UML.[8].

Latex

Toda la memoria del proyecto ha sido realizada en Latex, utilizando diversas librerıas

de insercion de codigo para los Anexos finales.[9].

5.6.3. CODIGOTodo el codigo desarrollado en el ciclo 1 se podra ver en el Anexo B situado al final

de la Memoria de Seguimiento.

El lenguaje utilizado es Java, con el entorno Eclipse Jee Neon. Las librerıas ya men-

cionadas en la seccion anterior son las que se han utilizado para desarrollar el proyecto.

5.7. EVALUACION DE LA PRIMERA FASEEn general el desarrollo del proyecto ha sido un poco complicado desde el punto de

vista de tener que compaginar toda la documentacion con el desarrollo del algoritmo.

Inicialmente con la creacion del mapa conceptual se pudo aproximar una idea muy gene-

ralizada del objetivo de la aplicacion pudiendo ası perfilar lo que serıa posteriormente el

proyecto una vez se ahondase en el mismo.

Una vez visto el objetivo que se pretendıa conseguir, toda la atencion se centro en la

busqueda de unos requisitos que pudieran acotar el problema a resolver por parte del

creador del proyecto y a su vez tomar un primer contacto con la supuesta organizacion

del codigo a desarrollar. La inversion de tiempo en lo que a los disenos de Alto y Bajo

nivel se refiere, quedaron un poco descompensadas desde el punto de vista del desarrollo

puesto que se fueron dando cambios que pudieran ayudar a implementar de una forma

mas sencilla el proyecto en detrimento de la idea inicial.

Respecto al plan de pruebas, se diferenciaron tres tipos de pruebas: unitarias, ensamblaje

y casos de uso. Teniendo en cuenta el enfoque del desarrollo, se considero que el plan

creado era mas que suficiente para poner a prueba todo el software, tanto la parte grafica

R.Sanz 32

Page 39: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

como el codigo interno de la aplicacion.

Una vez definidos todos los pasos anteriores se comenzo con el desarrollo de la aplicacion.

Inicialmente fue bastante costoso, llevandome a invertir mas horas de las previstas en el

plan de trabajo puesto que debıa introducir los datos de todas las estaciones del Metro de

Valencia por lo que no me quedo mas remedio que invertir horas extras (aproximadamen-

te 10 horas entre localizacion de las estaciones, calculos pertinentes e introduccion de la

informacion de las mismas en java). La implementacion del algoritmo me llevo a invertir

practicamente la mayorıa de las horas planificadas ya que tenıa conocimientos previos

sobre como implementar interfaces graficas.

Una vez implementado todo el proyecto correspondiente a la primera fase, comenzo la

aplicacion de las pruebas del plan creado para localizar errores. El fallo mas grande que

se dio y que sera corregido es el ya mencionado anteriormente (error de envio al no se-

leccionar ninguna estacion, caso no tratado). Por otro lado, se detecto cierta inestabilidad

a la hora de representar por pantalla el listado de estaciones, pero a diferencia del error

anterior, al incluir la segunda fase el arreglo de la interfaz, se espera que sea subsanado

cuando se hagan los cambios.

Como conclusion del proceso de desarrollo de la primera fase del proyecto, se puede

afirmar sin duda alguna que esta siendo un exito la implementacion del algoritmo (a pesar

de las dificultades tenidas al principio del mismo) habiendose cumplido los requisitos:

1.1, 1.2, 1.3, 1.4, 1.5, 2.1, 2.2, 2.3, 2.4.1, 2.4.2, 2.4.3.

R.Sanz 33

Page 40: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

Capıtulo 6

FASE 2

6.1. MODIFICACIONES AL PROYECTOEn este capıtulo se describen los objetivos del trabajo modificados para la finalizacion

del proyecto. Durante toda la primera fase, se han ido cumpliendo las metas y requisitos

establecidos para la misma, llegando a un grado de completud bastante alto. Despues de

la entrega intermedia, y a modo de reunion orientativa, se establecieron nuevos objeti-

vos, los cuales estarıan directamente basados y relacionados con los de la primera fase.

Cabe destacar que el metodo de trabajo ha sido exactamente el mismo y el esfuerzo de

horas se ha volcado aproximadamente de la misma manera que en la primera fase, con

la excepcion de que al estar parte de la documentacion hecha, algunas de estas horas se

han utilizado para optimizar el codigo y mejorar su legibilidad en la seccion de interfaz

grafica, buscar algunos nuevos requisitos y preparar un plan de pruebas que fuera acorde

con los mismos de forma que todo quedase mucho mas completo.

A nivel estructural del presente documento (Memoria Final), se puede afirmar que no ha

cambiado nada ya que unicamente han sido anadidas las partes relativas a la segunda fase.

A excepcion de lo mencionado, el proyecto ha seguido su curso en torno a la organizacion

ya establecida en la reunion inicial.

R.Sanz 34

Page 41: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

6.2. DIAGRAMA DE GANTT DEL PROYECTOEn la figura anadida en la pagina siguiente se puede observar la organizacion a lo largo

de sus 324 horas de duracion. Al ser una modificacion del diagrama del Plan de Trabajo,

se podra observar que el numero de horas dedicadas a las tareas mencionadas anterior-

mente han sido modificadas y a su vez, se han eliminado los tres objetivos descritos al

final de la seccion ’Revision de la lista de objetivos’. Igualmente, la suma de todas las

horas del proyecto sigue siendo 324, por lo que se considera que la carga de trabajo asig-

nada es la adecuada.

En la pagina siguiente se muestra el diagrama de Gantt modificado.

R.Sanz 35

Page 42: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

R.Sanz 36

Page 43: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

6.3. RE-ANALISIS DE REQUISITOSEn la siguiente seccion se describen los requisitos establecidos en una reunion inter-

media realizada despues de la entrega de la primera fase. Como se podra comprobar, estan

divididos en dos clases: de Sistema y de Interfaz. En los primeros se detallaran los re-

quisitos relativos a que pautas deben seguirse y cumplirse para crear el proyecto. En los

requisitos de Interfaz se detallara que debe cumplirse a la hora de crear la interfaz grafica

del proyecto.

Para esta segunda fase, se ha realizado el anadido de varios requisitos debido a que en

la primera fase se pudo cumplir relativamente bien con los plazos de entrega. Se ha acen-

tuado sobre todo el esfuerzo en la mejora de la interfaz grafica y el anadido de la funcio-

nalidad de mapa.

La especificacion de requisitos y su organizacion se basa en el estandar IEEE-STD-830-

1998 [1]:

1. Sistema

1.1. El Sistema tendra que contener tantos nodos como estaciones tenga el metro

de Valencia

1.2. El Sistema implementara el algoritmo a estrella para calcular el camino de

menor coste.

1.3. El Sistema funcionara de forma autonoma y sin conexion a Internet.

1.4. El Sistema debera estar implementado en Java, utilizando una librerıa espe-

cializada.

1.5. El Sistema debera ser aplicable a cualquier red de metro en caso de ser nece-

sario.

1.6. El Sistema debera permitir el anadido de modulos complementarios que per-

mitan aumentar el numero de funcionalidades de forma limpia.

NOTA: Se debera encontrar una solucion generica al problema que aplique el algoritmo y permita ser utilizado para

cualquier red de metro cambiando los datos de las estaciones en cuestion.

2. Interfaz

2.1. El Sistema mostrara una lista de todas las estaciones por las que debera pasar

para llegar desde el origen al destino.

2.2. El Sistema permitira al usuario seleccionar la estacion de origen.

2.3. El Sistema permitira al usuario seleccionar la estacion destino.

2.4. El Sistema tendra una interfaz grafica depurada que muestre las estaciones de

forma intuitiva y sencilla.

2.4.1. El Sistema sera lo mas fiel posible a la regla de los 3 clics [5]

R.Sanz 37

Page 44: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

2.4.2. El Sistema permitira salir de la aplicacion mediante el correspondiente

boton.

2.4.3. El Sistema ofrecera la posibilidad de mostrar quien ha sido el desarrolla-

dor del sistema.

2.5. El sistema ofrecera de forma limpia la ruta en una ventana emergente.

2.5.1. Dicha ventana emergente podra ser cerrada de forma individual y sin cau-

sar fallos al resto de la aplicacion.

2.6. El sistema ofrecera la opcion de poder ver el mapa del metro de la ciudad en

cuestion en una ventana emergente.

2.6.1. Dicha ventana emergente podra ser cerrada de forma individual y sin cau-

sar fallos al resto de la aplicacion.

2.7. El sistema ofrecera en cada ventana de la aplicacion la opcion de salir median-

te un boton.

2.8. El sistema ofrecera un boton en la ventana principal de la aplicacion llamado

Ayuda que ofrezca informacion a los usuarios de la misma.

R.Sanz 38

Page 45: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

6.4. MAPA CONCEPTUAL 2º FASEEn esta seccion se muestra un mapa conceptual de las funciones de la aplicacion.

Como podemos observar, el usuario mediante su computadora seleccionara una estacion

origen y una estacion destino de las que estan incluidas en el metro de Valencia. Una

vez realizada dicha seleccion, el usuario pulsara el boton ’Send’ el cual dara la orden de

busqueda de la ruta mas corta al algoritmo implementado en el desarrollo.

A su vez, se generara una ventana emergente la cual mostrara por pantalla la ruta es-

cogida por el algoritmo, dando una lista detallada de las estaciones y la lınea a la que

pertenece dicha estacion (el itinerario a seguir por el usuario). Una vez mostrado, el usua-

rio volvera a obtener el control del programa.

Por otro lado, el usuario podra observar en todo momento el mapa del metro accediendo

a el desde el menu superior de la aplicacion y/o consultar el menu de ayudas situado en el

boton que la aplicacion tendra al sur de su ventana principal.

R.Sanz 39

Page 46: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos
Page 47: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

6.5. DISENO DE ALTO NIVEL 2º FASEComo ya se comento en la primera fase, la arquitectura utilizada para el diseno de alto

nivel de la aplicacion, es la arquitectura basada en capas, la cual esta formada por tres en

este caso:

Capa de Presentacion: La interfaz grafica, la cual estara de cara a los usuarios de la

aplicacion.

Capa de Negocio: En esta capa se situa toda la implementacion interna del algoritmo

a estrella, la cual se encargara de procesar las rutas encontrando el camino mas corto

para cada peticion que haga el usuario.

Capa de Datos: Esta capa contendra todos los datos extraıdos del metro de Valencia

y los cuales seran la fuente en la cual se apoyara la capa de Negocio para realizar

las busquedas.

Al haberla definido ası de inicio, no se ha modificado por lo que queda exactamente

igual.

6.6. DISENO DE BAJO NIVEL 2º FASEEn esta seccion se podran observar los cambios que se han producido a nivel de codigo

en el programa. El diseno de Bajo Nivel ha sido creado con la herramienta ObjectAid

UML Explorer para el entorno de desarrollo Eclipse (se habla a cerca de la misma en la

subseccion ”3.13.1 Programas Utilizados”).

R.Sanz 41

Page 48: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos
Page 49: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

6.7. IMPLEMENTACION 2º FASE

6.7.1. PROGRAMAS UTILIZADOSPara la creacion de la cabecera y modificacion de parte del plano de metro utilizado

se ha aprendido a utilizar Adobe Photoshop CC 2017.

6.7.2. LIBRERIAS UTILIZADASPara el desarrollo del proyecto se han utilizado especıficamente dos librerıas externas

de Java a parte de las que vienen por defecto:

Java Decision Diagram Libraries:

Esta librerıa se puede localizar el siguiente enlace [6]:

http://java-decision-diagram-libraries.soft112.com/

This project contains two different Binary Decision Diagrams (BDD) libraries:

1. JBDD: a Java interface to two popular BDD libraries, CUDD and BuDDy.

2. JDD: a native Java library supporting BDD, Z-BDD and more (graph/automata/Pe-

tri nets/SAT).

Net Datastructures 5:

Esta librerıa se puede localizar en el siguiente enlace [7]:

http://net3.datastructures.net/

net.datastructures is a Java package containing a collection of Java interfaces and clas-

ses that implement fundamental data structures and algorithms, such as: sequences, trees,

priority queues, search trees, hash tables sorting algorithms graphs, their traversals, and

applications, (e.g. shortest paths) The package was designed for educational use. It pro-

vides a set of functional components defined by simple APIs and easy to use. The code

is readable, reliable, asymptotically efficient, and object-oriented. Programming can be

done through interfaces only, with knowledge of specific implementations necessary only

for specialized applications. net.datastructures has been developed at Brown University

and at the University of California, Irvine. The work on this project was supported in part

by the National Science Foundation under grants DUE-0231202 and DUE-0231467.

R.Sanz 43

Page 50: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

6.7.3. OTROS

ObjectAir UML Explorer

Herramienta de visualizacion de codigo creada para el IDE de Eclipse. Permite ver

en tiempo real el codigo implementado dentro de un proyecto como si fuera un diagrama

UML.[8].

Latex

Toda la memoria del proyecto ha sido realizada en Latex, utilizando diversas librerıas

de insercion de codigo para los Anexos finales. [9].

6.7.4. CODIGOTodo el codigo desarrollado en el ciclo 1 se podra ver en el Anexo B situado al final

de la Memoria de Seguimiento.

El lenguaje utilizado es Java, con el entorno Eclipse Jee Neon. Las librerıas ya men-

cionadas en la seccion anterior son las que se han utilizado para desarrollar el proyecto.

6.8. PLAN DE PRUEBASEl siguiente plan se ha disenado para poner a prueba de tres formas distintas el pro-

yecto completo. Al reves que en el primer plan de pruebas, el numero de las mismas en

este caso ha aumentado para confirmar las capacidades ya probadas y a su vez, probar las

nuevas funcionalidades implementadas en la segunda fase.

En las pruebas unitarias lo mas importante es la comprobacion del algoritmo (ver que

calcula bien la ruta que se elija y que devuelve la lista de estaciones por las que pasar a

modo de itinerario del camino mas corto), ver que no hay fallos en general de ejecucion,

etc.

Respecto a las pruebas de ensamblaje, lo mas importante es probar los 4 puntos crıticos

del sistema que son los puntos donde interfaz grafica y codigo se unen: las pulsaciones de

los botones, las selecciones de las estaciones y la devolucion de la ruta en cuestion en una

ventana emergente.

Por ultimo, como pruebas definitivas, se han disenado varios casos de uso en los cua-

les la utilizacion del software sera puesto a prueba, y el algoritmo tendra que buscar rutas

cada vez mas complicadas.

R.Sanz 44

Page 51: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

6.8.1. PRUEBAS UNITARIAS1. Seleccion del camino mas corto (prueba del algoritmo):

• Objetivo: Dada una estacion origen y una estacion destino, la aplicacion de-

bera devolver una ruta que sea la del camino mas corto para llegar de una

estacion a otra

• Resultado: SATISFACTORIO

Como ejemplo, para la estaciones seleccionadas: La Canyada y Les Carolines, el ca-

mino devuelto es el siguiente:

En consola obtenemos:

En ventana emergente (para usuario) obtenemos:

2. Salida del programa (algoritmo) sin seleccionar estaciones.

• Objetivo: Al estar implementadas interfaz y algoritmo en el mismo proyecto,

asegurarse de que todas las ventanas emergentes se crean y destruyen correc-

tamente sin que se den fallos o se lancen excepciones.

• Resultado inicial: FALLO

Tras la realizacion de varias pruebas, se ha encontrado el error de que se lanzaban

excepciones cuando se entraba a la aplicacion y se salıa de la misma sin haber

utilizado el algoritmo. Esto viene dado debido a que al no ejecutar el algoritmo, hay

ventanas emergentes que no se crean, y cuando se pretende salir de la aplicacion, se

intentan cerrar ventanas que no han sido creadas.

R.Sanz 45

Page 52: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

• Resultado final: SATISFACTORIO

R.Sanz 46

Page 53: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

3. Estabilidad de interfaz grafica

• Objetivo: Crear una interfaz grafica confiable a nivel de codigo, que cumpla

con sus funciones y que no de lugar a error. Que ejecute codigo de forma

optimizada y que elimine la inestabilidad inicial encontrada tras las pruebas

de la primera fase.

• Resultado inicial: FALLO : La antigua interfaz poseıa el error explicado mas

adelante. Para la segunda fase se comenzo con la reestructuracion a nivel de

codigo de la interfaz, cambiandola por completo y por lo tanto eliminando el

fallo.

Al ejecutar en numerosas ocasiones el algoritmo, se ha detectado una inestabilidad

grafica bastante grave en las rutas que se tenıan que representar muchas estaciones.

En la ventana emergente se auto-refrescaba el contenido hasta el punto de que en

alguna ocasion se ha borrado el contenido de la misma haciendola impracticable.

(NOTA: Esta prueba fue creada en inicio para la fase 1, se ha mantenido y pos-

teriormente se anadio la 6 con la diferencia de que es por fuerza bruta y de fase

2).

• Resultado final: SATISFACTORIO

R.Sanz 47

Page 54: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

4. Estado inicial de la aplicacion.

• Objetivo: Que la aplicacion este en un estado inicial el cual no tenga errores y

permita al usuario buscar su ruta.

• Resultado inicial: ***** :

Inicialmente el estado de la aplicacion no ha dado problemas o fallos como tal pero

se ha detectado que la inclusion de las opciones iniciales Elegir estacion de llega-da... y Elegir estacion de destino... generaban excepciones si por error el usuario

pulsaba Aceptar debido a que ambos elementos se incluyen dentro de la oferta de

estaciones seleccionables y obviamente no lo son por lo que no estan referencia-

dos. Esto lleva a un error inevitable por lo que se ha reestructurado esta seccion del

codigo.

• Resultado final: SATISFACTORIO

R.Sanz 48

Page 55: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

5. Forzado del algoritmo por fuerza bruta Parte I.

• Objetivo: Ejecutar el algoritmo un numero determinado de veces y comprobar

si en alguna de ellas falla.

• Resultado inicial: FALLO :

La puesta a prueba del algoritmo de esta manera, ha hecho que se pueda deducir

el error de final de thread al cerrar una ventana de forma abrupta que no fuera la

principal. Mas concretamente las ventanas de mapa y ayuda.

Gracias a esto se ha podido solucionar y la aplicacion termina su thread de for-

ma correcta en todo momento ya sea por cierre abrupto de las ventanas o por uso

de los botones dedicados a ello.

• Resultado final: SATISFACTORIO

6. Forzado del algoritmo por fuerza bruta Parte 2.

• Objetivo: Ejecutar el algoritmo un numero determinado de veces, representar-

lo graficamente y comprobar si en alguna de ellas falla.

• Resultado inicial: FALLO :

La puesta a prueba del algoritmo de esta manera, ha hecho que se pueda deducir

la inestabilidad que tenıa la representacion grafica despues de la primera fase. Se

tomo como un fallo aunque hubiera que arreglarlo igualmente.

Gracias a esta prueba se ha decidido desechar todo el modulo de codigo en cuestion

y rehacerlo desde cero para asegurar un buen funcionamiento del mismo.

• Resultado final: SATISFACTORIO

R.Sanz 49

Page 56: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

6.8.2. PRUEBAS DE ENSAMBLAJE1. Seleccion de estacion origen:

• Objetivo: Buscar mediante scroll vertical la estacion de origen que el usuario

quiera seleccionar.

• Resultado: SATISFACTORIO

2. Seleccion de estacion destino:

• Objetivo: Buscar mediante scroll vertical la estacion de destino que el usuario

quiera seleccionar.

• Resultado: SATISFACTORIO

R.Sanz 50

Page 57: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

3. Seleccion de Envıo de informacion:

• Objetivo: Una vez superadas las dos pruebas anteriores, Pulsado de boton

Aceptar. Debe devolver una ventana emergente con una lista de estaciones.

• Resultado: SATISFACTORIO

R.Sanz 51

Page 58: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

4. Ensamblado de Interfaz grafica con modulo de codigo:

• Objetivo: Comprobar que todas las selecciones y botones realizan su funcion.

Seleccionar estacion de origen y estacion destino. Una vez seleccionadas pul-

sar Aceptar.

• Devuelve: Debe generar una ventana emergente en la cual aparecera una lista

de las estaciones en cuestion que sigue el camino calculado.

• Resultado: SATISFACTORIO

Ventana de usuario:

Consola de programador:

R.Sanz 52

Page 59: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

5. Rescatado de mapa zonal de Valencia:

• Objetivo: Comprobar que la funcionalidad de mapa funciona correctamente.

• Devuelve: Ventana emergente con el mapa zonal de Valencia.

• Resultado: SATISFACTORIO

R.Sanz 53

Page 60: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

6. Rescatado del menu de ayuda:

• Objetivo: Comprobar que la funcionalidad de ayuda funciona correctamente.

• Devuelve: Ventana emergente con la ayuda disponible.

• Resultado: SATISFACTORIO

R.Sanz 54

Page 61: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

6.8.3. CASOS DE USOEn esta seccion se detallan algunos casos de uso utilizados para poner a prueba la

aplicacion. Van de menor a mayor dificultad.

1. De una estacion a otra adyacente:

Nombre Trayecto de estaciones adyacentes

Actores Usuario

Funcion Saber cual es el itinerario mas corto entre dos estaciones adyacen-

tes

Descripcion El usuario puede elegir una estacion origen y una estacion des-

tino que sean adyacentes. El usuario puede pulsar aceptar una vez

seleccionadas y recibir el itinerario de las estaciones por las que

pasara el metro.

Origen: Empalme (Linea 4)

Destino: Palau de Congressos (Linea 4)

R.Sanz 55

Page 62: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

R.Sanz 56

Page 63: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

2. De una estacion a otra de la misma linea:

Nombre Trayecto de una lınea sin transbordos

Actores Usuario

Funcion Saber cual es el itinerario mas corto entre dos estaciones de la

misma linea

Descripcion El usuario puede elegir una estacion origen y una estacion destino

dentro de la misma linea de metro. El usuario puede pulsar aceptar

una vez seleccionadas y recibir el itinerario de las estaciones por

las que pasara el metro.

Origen: Empalme (Linea 4)

Destino: Transits (Linea 4)

R.Sanz 57

Page 64: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

R.Sanz 58

Page 65: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

3. De una estacion a otra de una linea distinta con un transbordo:

Nombre Trayecto de varias lineas con un transbordo

Actores Usuario

Funcion Saber cual es el itinerario mas corto entre dos estaciones de dis-

tintas lineas

Descripcion El usuario puede elegir una estacion origen y una estacion destino

situadas en dos lineas distintas siempre y cuando solo haya un

transbordo entre ellas. El usuario puede pulsar aceptar una vez

seleccionadas y recibir el itinerario de las estaciones por las que

pasara el metro.

Origen: Sagunt (Linea 4)

Destino: Orriols (Linea 6)

R.Sanz 59

Page 66: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

R.Sanz 60

Page 67: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

4. De una estacion a otra de una linea distinta con dos transbordos:

Nombre Trayecto de una linea con dos transbordos

Actores Usuario

Funcion Saber cual es el itinerario mas corto entre dos estaciones de dis-

tintas lineas

Descripcion El usuario puede elegir una estacion origen y una estacion des-

tino situadas en dos lineas distintas siempre y cuando haya dos

transbordo entre ellas. El usuario puede pulsar aceptar una vez

seleccionadas y recibir el itinerario de las estaciones por las que

pasara el metro.

Origen: Palau de Congressos (Linea 4)

Destino: Mislata (Linea 3)

R.Sanz 61

Page 68: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

R.Sanz 62

Page 69: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

5. Usuario quiere ver quien desarrollo el proyecto:

Nombre Ver desarrollador

Actores Usuario

Funcion Consultar quien ha desarrollado la aplicacion

Descripcion El usuario puede consultar quien es ha desarrollado de la aplica-

cion

Hacer click en ’Archivo’, ’A cerca de...’

R.Sanz 63

Page 70: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

R.Sanz 64

Page 71: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

6. Usuario quiere consultar el mapa

Nombre Consultar el mapa

Actores Usuario

Funcion Consultar el programa antes de consultar una ruta o despues de

consultarla

Descripcion El usuario puede consultar el mapa Zonal en el momento que

desee sin que afecte a la consulta de la ruta

Hacer click en ’Ver’, ’Mapa’ Hacer click directo en boton ’Salir’ del menu princi-

pal.

R.Sanz 65

Page 72: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

7. Usuario quiere salir del programa

Nombre Salir del programa

Actores Usuario

Funcion Salir del programa sin haber hecho una busqueda

Descripcion El usuario puede salir del programa sin haber hecho una busqueda

previamente sin tener que cerrar la ventana de forma abrupta

Hacer click en ’Archivo’, ’Salir’.

Hacer click directo en boton ’Salir’ del menu principal.

Click directo sobre boton ’Salir’:

R.Sanz 66

Page 73: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

Click en ’Archivo’, ’Salir’:

R.Sanz 67

Page 74: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

8. Usuario quiere consultar el menu de ayuda

Nombre Menu de ayuda

Actores Usuario

Funcion Consultar el menu de ayuda para informarse

Descripcion El usuario puede consultar el menu de ayuda en cualquier mo-

mento para consultar alguna duda

Hacer click directo en boton ’Ayuda’ del menu principal.

R.Sanz 68

Page 75: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

Capıtulo 7

RESUMEN Y CONCLUSIONES

7.1. EVALUACION FINALComo se comento en la evaluacion de la primera fase, en general el desarrollo del pro-

yecto ha sido un poco complicado desde el punto de vista de tener que compaginar toda

la documentacion con el desarrollo del algoritmo. Aunque inicialmente con la creacion

del mapa conceptual de la primera fase se pudo aproximar una idea muy generalizada del

objetivo de la aplicacion, la necesidad de ampliar la misma en la segunda, provoco una

nueva modificacion del mapa para que quedase mas completo y depurado.

Una vez visto el nuevo objetivo que se pretendıa conseguir para esta segunda fase, to-

da la atencion se centro en el re-analisis de los requisitos para volver a acotar, esta vez de

forma definitiva, el problema a resolver por parte del creador del proyecto. En una reunion

intermedia con el tutor, se hablo sobre anadir alguna funcionalidad nueva a la aplicacion y

a la vez depurar el codigo, aislar errores que aparecieron y re-implementar todo lo relativo

a la devolucion de la ruta (mejora de la interfaz) la cual tenıa cierta inestabilidad. De esta

forma se sacaron nuevos requisitos y por consiguiente se agrando el proyecto en vistas a

cumplir el segundo deadline con una aplicacion mucho mas completa que en su version.

anterior.

El Diseno de Alto Nivel, no se vio afectado en esta segunda fase puesto que la propuesta

ha sido la misma, pero como es obvio, el Diseno de Bajo Nivel ha tenido que ser modifi-

cado al haberse implementado nuevos modulos de la aplicacion. La inversion de tiempo

ha sido mucho mas pequena que en la primera fase puesto que ya se tenıan los conoci-

mientos previos y no habıa que detenerse tanto para hacerlo.

R.Sanz 69

Page 76: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

Respecto al plan de pruebas, en la primera fase se diferenciaron tres tipos de pruebas:

unitarias, ensamblaje y casos de uso. Para esta segunda fase, la premisa ha sido la mis-

ma con la diferencia de que se han anadido pruebas que ayudasen a encontrar fallos al

sistema. Lo primero que se hizo fue pasar las pruebas que ya estaban creadas una vez se

implementaron los nuevos requisitos y posteriormente se anadieron y llevaron a cabo las

nuevas. De esta forma la baterıa de pruebas quedo mucho mas completa, llegando a tomar

una mayor importancia dentro del plan de pruebas los casos de uso.

La implementacion para la segunda fase, fue mucho menos costosa que en la prime-

ra ya que toda la seccion del algoritmo estaba implementada, y las horas de desarrollo

se centraron en la solucion de errores, depuracion, re-ordenacion y re-maquetacion de la

aplicacion. Durante la aplicacion del plan de pruebas, se aislaron varios errores que fueron

subsanados nada ma terminar el desarrollo por lo que el restante de horas se vio dedicado

a esta actividad. Es de destacar que las horas invertidas en desarrollo tanto en la primera

fase como en la segunda, fue mayor de lo esperado puesto que los conocimientos que se

tenıan antes del desarrollo del proyecto eran bastante limitados.

Como ya se ha comentado, al haber terminado la implementacion general del proyecto, se

comenzo a aplicar el plan de pruebas de la primera fase para asegurar el funcionamiento

de las funcionalidades anteriores y una vez hecho, se comenzaron a aplicar las nuevas

pruebas.

Varios fallos fueron localizados dentro de la aplicacion (seccion 4.8 de la memoria fi-nal). Algunos de ellos fueron:

1. Fallo en la primera ejecucion de la aplicacion:

La aplicacion funcionaba normalmente pero las dos primeras estaciones que esta-

ban situadas en el array de estaciones de llegada no funcionaban. El motivo era que

la seleccion inicial estaba vacıa y solo se llenaba cuando se hacıa click sobre una

de las opciones del array. Se soluciono haciendo una inicializacion de la seleccion

que fuera coherente.

2. Situacion inicial de la aplicacion en primera fase:

Cuando se ejecutaba la aplicacion, en la seleccion de estaciones de salida habıa una

opcion que era ”Seleccione estacion de salida...”. Era un elemento del array que no

estaba referenciado en el resto del proyecto ya que no era una estacion. Esto llevo

a su eliminacion de la interfaz tanto en Salida como en Llegada ya que presentaban

exactamente el mismo tipo de error. La localizacion de este fallo llevo directamente

a encontrar el anteriormente mencionado.

3. Situacion inicial de la aplicacion en primera fase:

Cuando se ejecutaba la aplicacion, en la seleccion de estaciones de salida habıa

una opcion que era ”Seleccione estacion de salida...”. Era un elemento del array

R.Sanz 70

Page 77: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

que no estaba referenciado en el resto del proyecto ya que no era una estacion. Esto

llevo a su eliminacion de la interfaz. La localizacion de este fallo llevo directamente

a encontrar el anteriormente mencionado.

4. Inestabilidad grafica:

Cuando se ejecutaba la aplicacion,todo funcionaba correctamente, pero cuando se

elegıan estaciones muy distantes entre sı, se daba un error muy grave de inestabi-

lidad a la hora de representar las estaciones y lıneas de la ruta. El contenido de la

ventana emergente comenzaba autorefrescarse y desaparecıa el contenido de la ruta

a pesar de que el programa la tenıa bien guardada en memoria. Se aislo el fallo y

toda la seccion de codigo fue modificada.

Igualmente, uno de los requisitos establecıa que la representacion de la ruta debıa

ser mucho mas amigable e intuitiva por lo que para la version final era algo que

habıa que cambiar obligadamente.

5. Problemas de ejecucion del hilo de la aplicacion:

Al trabajar con tantas ventanas emergentes, el hilo de ejecucion no siempre termi-

naba como era de esperar. En los casos en los que se salıa de las ventanas mediante

su boton correspondiente, el thread terminaba de forma correcta, pero en los casos

en los que se cerraba la ventana de forma abrupta, no se trataba dicho cerrado por

lo que el hilo seguıa ejecutando. Fue un fallo bastante problematico ya que se loca-

lizo justo al final del desarrollo de esta segunda fase por lo que se tardo en localizar.

Una vez localizado se fue experimentando hasta arreglarlo de la forma correcta.

Como conclusion del proceso de desarrollo del proyecto al completo, se puede afir-

mar sin duda alguna que ha sido un exito la implementacion del algoritmo (a pesar de

las dificultades tenidas al principio del mismo) y de la interfaz incluyendo sus nuevas

funcionalidades.

R.Sanz 71

Page 78: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

7.2. CONCLUSIONESLa realizacion de este proyecto sin duda alguna ha puesto a prueba mis capacidades y

los conocimientos aprendidos durante la carrera. A pesar de ser un algoritmo ampliamente

conocido, he podido comprobar de primera mano su funcionamiento y su efectividad en

una aplicacion tan necesaria como un planificador de rutas. Obviamente esta aplicacion

tiene un alcance muy limitado ya que la toma de datos ha sido propia y hecha a mano, pe-

ro la decision de hacerlo ası ha sido necesaria para evitar problemas con datos de terceros.

Si en algun momento se quisiera utilizar con informacion mas extensa, conectandola a

una base de datos ya sea en local u online, el algoritmo funcionarıa exactamente igual

por lo que las posibilidades de la aplicacion como tal son muy grandes en terminos de

funcionalidad.

Respecto a los conocimientos puestos en practica, puedo decir que los mas utiles han

sido los adquiridos en Ingenierıa del Software I y II, Inteligencia Artificial y asignaturas

de programacion. La gestion de un proyecto llevado completamente por mı, ha supuesto

una nueva forma de completar el aprendizaje que se inicio en las dos primeras asignaturas

que he mencionado. La forma en la que gestionar el proyecto fue definida por mi tutor,

pero realmente me ha dado muchas libertades para que yo eligiera de que forma hacerlo

siempre y cuando los motivos por los que escogiera mis elecciones fueran coherentes con

el proyecto.

A parte de todo lo mencionado, tengo que decir que estoy bastante contento con el trabajo

que he desarrollado puesto que considero que entre otras cosas el manejo de interfaces

graficas me vendra bien de cara al futuro a corto o medio plazo (el mercado actual del

desarrollo de aplicaciones sin duda esta al alza) y a su vez, completa en cierto grado mi

formacion como programador puesto que en mi caso no es algo que haya visto de forma

concisa en ninguna asignatura por lo que es mas que bienvenido.

R.Sanz 72

Page 79: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

Capıtulo 8

CITAS Y BIBLIOGRAFIA

[1] IEEE-STD-830-1998 : Software requirements specification.

[2] Blog, Datos en abierto (Wordpress),https://datosenabierto.wordpress.com/2011/08/14/implementacion-algoritmo-a-estrella-definicion/,2011

[3] Centro de Inteligencia Artificial, Universidad de Oviedo,http://www.aic.uniovi.es/ssii/ssii-t3-busquedaii.pdf

[4] Algoritmo a Estrella, Wikipedia,https://es.wikipedia.org, busqueda: Algoritmo a Estrella

[5] Consultorıa de Disenos y Usabilidad,Usolab,http://www.usolab.com/wl/2009/07/la-regla-de-3-clics.php

[6] Java Decision Diagram Libraries,soft112,http://java-decision-diagram-libraries.soft112.com/

[7] net.datastructures,http://net3.datastructures.net/

[8] The ObjectAid UML Explorer for Eclipse,http://www.objectaid.com/

[9] Latex-project,https://www.latex-project.org/

R.Sanz 73

Page 80: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

Capıtulo 9

ANEXO A: CODIGO

DESARROLLADO 1º FASE

9.1. Package Arbol

9.1.1. Arbol.java

1 package Arbol;

2 import java.io.IOException;

3 import java.util.ArrayList;

4 import java.util.Iterator;

5 import java.util.List;

6 import java.util.Map;

7 import jdd.graph.Edge;

8 import Grafo.*;

R.Sanz 74

Page 81: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

9 public class Arbol {

10 Nodo salida;

11 Nodo llegada;

12 Grafo grafo;

13 Map<String, List<Edge>> tabla;

14 LTree<Elemento> arbol = new LTree<Elemento>();

15 List<LTreeNode<Elemento>> posibles = new ArrayList<LTreeNode<

Elemento>>();

16 public Arbol(Nodo salida,Nodo llegada,Grafo grafo){

17 this.salida = salida;

18 this.llegada = llegada;

19 this.grafo = grafo;

20 this.arbol.addRoot(new Elemento(0,salida.distancia(llegada),

salida));

21 this.arbol.root.element().setrecorrido(salida.distancia(llegada)

);

22 this.arbol.root.setChild(grafo.getChild(this.arbol.root, llegada

));

23 addList(posibles,this.arbol.root.getChild());

24 }

25 private void addList(List<LTreeNode<Elemento>> lis,

26 List<LTreeNode<Elemento>> hijos){

27 Iterator<LTreeNode<Elemento>> it = hijos.iterator();

R.Sanz 75

Page 82: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

28 while(it.hasNext()){

29 lis.add(it.next());

30 }

31 }

32 public LTreeNode<Elemento> CalcularRecorrido(){

33 LTreeNode<Elemento> nodo = this.arbol.root;

34 if (salida.getNombre()!=llegada.getNombre()){

35 nodo = selectChild(nodo);

36 while(!isEnd(nodo)){

37 nodo = selectChild(nodo);

38 }

39 }

40 return nodo;

41 }

42 public LTreeNode<Elemento> selectChild(LTreeNode<Elemento>padre)

{

43 LTreeNode<Elemento> nodo = new LTreeNode<Elemento>(null,null,

null);

44 LTreeNode<Elemento> nod = new LTreeNode<Elemento>(null,null,null

);

45 Iterator<LTreeNode<Elemento>> iterador = posibles.iterator();

46 int gh = 0;

47 nod = iterador.next();

R.Sanz 76

Page 83: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

48 gh = gh(nod);

49 nodo=nod;

50 int i = 0;

51 int j = 0;

52 while(iterador.hasNext()){

53 nod = iterador.next();

54 i++;

55 if (gh>gh(nod) &&

56 (nod.element().getnodo().getNombre()!=

57 padre.element().getnodo().getNombre())){

58 gh = gh(nod);

59 nodo=nod;

60 j = i;

61 }

62 }

63 System.out.println(nodo.element().getnodo().getNombre());

64 nodo.element().setrecorrido(gh);

65 i=0;

66 posibles.remove(j);

67 iterador = posibles.iterator();

68 List<Integer> borrar =new ArrayList<Integer>();

69 while(iterador.hasNext()){

70 if(iterador.next().element().getnodo().getNombre()==

R.Sanz 77

Page 84: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

71 nodo.element().getnodo().getNombre())

72 borrar.add(i);

73 i++;

74 }

75 Iterator <Integer >iterad = borrar.iterator();

76 while(iterad.hasNext()){

77 posibles.remove(iterad.next());

78 }

79 if (nodo.getChild() == null){

80 nodo.setChild(grafo.getChild(nodo, llegada));

81 addList(posibles,nodo.getChild());

82 }

83 return nodo;

84 }

85 public int gh (LTreeNode<Elemento> nodo){

86 return nodo.getParent().element().recorridoParcial() +

87 nodo.element().recorridoMax();

88 }

89 public boolean isEnd(LTreeNode<Elemento>fin){

90 return (fin.element().getnodo().getNombre() == llegada.getNombre

());

91 }

92 public List<Nodo> recorridoObtimo(LTreeNode<Elemento> fin){

R.Sanz 78

Page 85: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

93 List<Nodo> recorrido = new ArrayList<Nodo>();

94 LTreeNode<Elemento> posicion = fin;

95 boolean condicion = true;

96 while(condicion){

97 if (posicion.getParent()==null){

98 recorrido.add(((Elemento)posicion.element()).getnodo());

99 condicion = false;

100 }

101 else{

102 recorrido.add(((Elemento)posicion.element()).getnodo());

103 posicion = posicion.getParent();

104 }

105 }

106 return recorrido;

107 }

108 }

R.Sanz 79

Page 86: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

9.1.2. Elemento.java

1 package Arbol;

2 import Grafo.Nodo;

3 public class Elemento {

4 private double g;

5 private int h,recorrido;

6 private Nodo nodo;

7 public Elemento(double g, int h, Nodo nodo){

8 this.g = g;

9 this.h = h;

10 this.nodo = nodo;

11 }

12 public double getG(){

13 return this.g;

14 }

15 public void setG(int g){

16 this.g = g;

17 }

18 public int getH(){

19 return this.h;

20 }

21 public void setH(int h){

22 if(h>=0)

R.Sanz 80

Page 87: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

23 this.h = h;

24 else

25 this.h = -h;

26 }

27 public Nodo getnodo(){

28 return this.nodo;

29 }

30 public void setnodo(Nodo nodo){

31 this.nodo = nodo;

32 }

33 public int getrecorrido(){

34 return this.recorrido;

35 }

36 public void setrecorrido(int recorrido){

37 this.recorrido = recorrido;

38 }

39 public int recorridoParcial(){

40 return this.recorrido-this.h;

41 }

42 public int recorridoMax(){

43 return (int)this.g+this.h;

44 }

45 }

R.Sanz 81

Page 88: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

9.1.3. LTree.java

1 package Arbol;

2 import net.datastructures.*;

3 import java.util.*;

4 public class LTree<E> implements Tree<E> {

5 protected LTreeNode<E> root=null;

6 public int size() {

7 int numPos=0;

8 for (Position<E> p: positions()) ++numPos;

9 return numPos;

10 }

11 public boolean isEmpty() {

12 return (root==null);

13 }

14 public Iterator<E> iterator() {

15 List<E> list = new LinkedList<E>();

16 for (Position<E> p: positions()) list.add(p.element());

17 return list.listIterator();

18 }

19 public Iterable<Position<E>> positions() {

20 return nodeList(root);

21 }

22 public E replace(Position<E> v, E e) {

R.Sanz 82

Page 89: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

23 LTreeNode<E> node = getLTreeNode(v);

24 E tmp = node.element();

25 node.setElement(e);

26 return tmp;

27 }

28 public Position<E> root() throws EmptyTreeException {

29 if (isEmpty()) throw new EmptyTreeException("Tree is empty");

30 return root;

31 }

32 public Position<E> parent(Position<E> v) throws

InvalidPositionException,

33 BoundaryViolationException {

34 if (isRoot(v)) throw new BoundaryViolationException("At root

node");

35 LTreeNode<E> node = getLTreeNode(v);

36 return node.getParent();

37 }

38 public Iterable<Position<E>> children(Position<E> v) throws

39 InvalidPositionException {

40 return childrenList(v);

41 }

42 public boolean isInternal(Position<E> v) throws

InvalidPositionException {

R.Sanz 83

Page 90: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

43 return !isExternal(v);

44 }

45 public boolean isExternal(Position<E> v) throws

InvalidPositionException {

46 LTreeNode<E> node = getLTreeNode(v);

47 return false;

48 }

49 public boolean isRoot(Position<E> v) throws

InvalidPositionException {

50 LTreeNode<E> node = getLTreeNode(v);

51 return node==root();

52 }

53 public Position<E> addRoot(E e) throws NonEmptyTreeException {

54 if (root != null) {

55 throw new NonEmptyTreeException("adding new root to nonempty

tree");

56 }

57 root = new LTreeNode<E>(e,null,null);

58 return root;

59 }

60 public Position<E> addChild(E e,Position<E> v)

61 throws InvalidPositionException {

62 LTreeNode<E> node = getLTreeNode(v);

R.Sanz 84

Page 91: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

63 LTreeNode<E> newNode = new LTreeNode<E>(e,node,null);

64 List<LTreeNode<E>> lista = node.getChild();

65 lista.add(lista.size(), newNode);

66 node.setChild(lista);

67 return newNode;

68 }

69 public Position<E> addChild(Tree<E> t,Position<E> v) throws

70 InvalidPositionException, EmptyTreeException {

71 LTreeNode<E> t_node = getLTreeNode(t.root());

72 LTreeNode<E> v_node = getLTreeNode(v);

73 t_node.setParent(v_node);

74 //t_node.setRight(v_node.getFirstChild());

75 //v_node.setFirstChild(t_node);

76 return t_node;

77 }

78 private LTreeNode<E> getLTreeNode(Position<E> v)

79 throws InvalidPositionException {

80 if (v == null || !(v instanceof LTreeNode<?>)) {

81 throw new InvalidPositionException("Invalid position");

82 }

83 return (LTreeNode<E>) v;

84 }

85 private Iterable<Position<E>> childrenList(Position<E> v) {

R.Sanz 85

Page 92: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

86 return null;

87 }

88 private void addChildren(Position<E> child,List<Position<E>>

list) {

89 if (child!=null) {

90 LTreeNode<E> childNode = getLTreeNode(child);

91 list.add(child);

92 //addChildren(childNode.getRight(),list);

93 }

94 }

95 private List<Position<E>> nodeList(Position<E> v) {

96 List<Position<E>> list = new LinkedList<Position<E>>();

97 addAllNodes(v,list);

98 return list;

99 }

100 private void addAllNodes(Position<E> node,List<Position<E>> list

) {

101 if (node!=null) {

102 list.add(node);

103 for (Position<E> child : childrenList(node))

104 addAllNodes(child,list);

105 }

106 }}

R.Sanz 86

Page 93: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

9.1.4. LTree.java

1 package Arbol;

2 import java.util.List;

3

4 import net.datastructures.*;

5 public class LTreeNode<E> implements Position<E> {

6 private E element;

7 private LTreeNode<E> parent;

8 private List<LTreeNode<E>> Child;

9 public LTreeNode(E e, LTreeNode<E> parent, List<LTreeNode<E>>

Child) {

10 this.element = e;

11 this.parent = parent;

12 this.Child = Child;

13 }

14 public void setElement(E element) {

15 this.element = element;

16 }

17 public E element() {

18 return element;

19 }

20 public void setParent(LTreeNode<E> parent) {

21 this.parent = parent;

R.Sanz 87

Page 94: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

22 }

23 public LTreeNode<E> getParent() {

24 return parent;

25 }

26 public void setChild(List<LTreeNode<E>> Child) {

27 this.Child = Child;

28 }

29 public List<LTreeNode<E>> getChild() {

30 return Child;

31 }

32 }

R.Sanz 88

Page 95: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

9.2. Package Grafica

9.2.1. AA.java

1 package Grafica;

2 import java.util.ArrayList;

3 import java.util.Iterator;

4 import java.util.List;

5 import jdd.graph.Edge;

6 import Arbol.Arbol;

7 import Grafo.*;

8 public class AA {

9 private Grafo grafo;

10 Nodo salida;

11 Nodo llegada;

12 public AA(String salida, String llegada){

13 grafo = new Grafo(true);

14 // Creacion de la linea de metro

15 //Estaciones

16 Nodo Villanueva_de_Castellon, Alberic, Massalaves, Montortal,

17 LAlcudia, Benimodo, Carlet, Ausias_March, Alginet,

Font_Almanguer,

18 Espioca, Omet, Picassent, Sant_Ramon, Realon, Col_legi_El_Vedat,

19 Plaza_Espanya, Turia, Campanar_La_Fe, Beniferri, Cantereria,

R.Sanz 89

Page 96: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

20 Benimamet, Les_Carolines_Fira, Campament,Paterna,Santa_Rita,

21 Fuente_del_Jarro,La_Canyada,La_Vallesa,Entrepins,El_Clot,

Montesol,

22 LEliana,Torre_del_Virrei,La_Pobla_De_Vallbona,Benaguasil_1r,

23 Benaguasil_2n,Lliria,Burjassot,Burjassot_Godella,Godella,

Rocafort,

24 Massarrojos,Montcada_Alfara,Seminari_CEU,Masies,S_Psiquiatric,

25 Betera,Torrent,Torrent_Avinguda,Picanya,Paiporta,Valencia_Sud,

26 Sant_Isidre,Safranar,Patraix,Joaquin_Sorolla,Bailen,Aragon,

27 Amistat,Ayora,Neptu,Angel_Guimera,Maritim_Serreria,Serreria,

28 Francesc_Cubells,Grau_Canyamelar,Colon,Alameda,Xativa,

29 Avinguda_del_Cid,Nou_dOctubre,Mislata,Mislata_Almassil,Faitanar,

30 Quart_de_Poblet,Salt_de_lAigua,Manises,Rosas,Aeroport,Facultats,

31 Machado,Alboraya_Palmaret,Alboraya_Peris_Arago,Almassera,

32 Meliana,Foios,Albalat_dels_Sorells,Museros,Massamagrell,

33 La_Pobla_de_Farnals,Rafelbunyol,Empalme,Benimaclet,

Mas_del_Rosari,

34 La_Coma,Tomas_y_Valiente,Santa_Gemma_Parc_Cientific_UV,

35 Ll_Llarga_Terramelar,TVV,Fira_Valencia,Vicent_Andres_Estelles,

36 Campus_de_Burjassot,Sant_Joan,La_Granja,Palau_de_Congressos,

37 Florista,Garbi ,Benicalap,Transits ,Marxalenes,Reus ,Sagunt,

38 Pont_de_Fusta,Primat_Reig,Vicent_Zaragoza ,

Universitat_Politecnica,

R.Sanz 90

Page 97: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

39 La_Carrasca,Tarongers,La_Marina ,Doctor_Lluch,La_Cadena,

40 Eugenia_Vines,Les_Arenes ,Mediterrani,Alfauir,Orriols,

41 Estadi_del_Llevant,Sant_Miquel_dels_Reis, Tossal_del_Rei;

42 Villanueva_de_Castellon = grafo.addNode("Villanueva_de_Castellon

", 0,0);

43 Alberic = grafo.addNode("Alberic", -1,7);

44 Massalaves = grafo.addNode("Massalaves", 0,12);

45 Montortal = grafo.addNode("Montortal", 0,18);

46 LAlcudia = grafo.addNode("LAlcudia", 1,22);

47 Benimodo = grafo.addNode("Benimodo", 0,27);

48 Carlet = grafo.addNode("Carlet", -1,29);

49 Ausias_March = grafo.addNode("Ausias_March",5,34);

50 Alginet = grafo.addNode("Alginet",9,36);

51 Font_Almanguer = grafo.addNode("Font_Almanguer",11,41);

52 Espioca = grafo.addNode("Espioca", 10,48);

53 Omet = grafo.addNode("Omet", 9,54);

54 Picassent = grafo.addNode("Picassent",11,55);

55 Sant_Ramon = grafo.addNode("Sant_Ramon",10,59);

56 Realon = grafo.addNode("Realon", 11,64);

57 Col_legi_El_Vedat = grafo.addNode("Col_legi_El_Vedat",11,67);

58 Plaza_Espanya = grafo.addNode("Plaza_Espanya", 27,76);

59 Turia = grafo.addNode("Turia", 25,78);

60 Campanar_La_Fe = grafo.addNode("Campanar_La_Fe",24,79);

R.Sanz 91

Page 98: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

61 Beniferri = grafo.addNode("Beniferri", 24,81);

62 Cantereria = grafo.addNode("Cantereria", 21,83);

63 Benimamet = grafo.addNode("Benimamet",20,83);

64 Les_Carolines_Fira = grafo.addNode("Les_Carolines_Fira",18,82);

65 Campament = grafo.addNode("Campament", 16,82);

66 Paterna = grafo.addNode("Paterna",15 ,82);

67 Santa_Rita = grafo.addNode("Santa_Rita", 12,84);

68 Fuente_del_Jarro = grafo.addNode("Fuente_del_Jarro",11,85);

69 La_Canyada = grafo.addNode("La_Canyada", 6,88);

70 La_Vallesa = grafo.addNode("La_Vallesa", 4,90);

71 Entrepins = grafo.addNode("Entrepins", 1,91);

72 El_Clot = grafo.addNode("El_Clot", -2,92);

73 Montesol = grafo.addNode("Montesol", -3,94);

74 LEliana = grafo.addNode("LEliana", -4,95);

75 Torre_del_Virrei = grafo.addNode("Torre_del_Virrei", -6,97);

76 La_Pobla_De_Vallbona = grafo.addNode("La_Pobla_De_Vallbona",

-9,99);

77 Benaguasil_1r = grafo.addNode("Benaguasil_1r",-12,102);

78 Benaguasil_2n = grafo.addNode("Benaguasil_2n", -13,103);

79 Lliria = grafo.addNode("Lliria", -15,108);

80 Burjassot = grafo.addNode("Burjassot", 22,84);

81 Burjassot_Godella = grafo.addNode("Burjassot_Godella",21,85);

82 Godella = grafo.addNode("Godella", 21,86);

R.Sanz 92

Page 99: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

83 Rocafort = grafo.addNode("Rocafort", 22,88);

84 Massarrojos = grafo.addNode("Massarrojos", 23,90);

85 Montcada_Alfara = grafo.addNode("Montcada_Alfara", 26,91);

86 Seminari_CEU = grafo.addNode("Seminari_CEU", 26,92);

87 Masies = grafo.addNode("Masies",22,96);

88 S_Psiquiatric = grafo.addNode("S_Psiquiatric", 15,99);

89 Betera = grafo.addNode("Betera",12,101);

90 Torrent = grafo.addNode("Torrent",11,69);

91 Torrent_Avinguda = grafo.addNode("Torrent_Avinguda",9,69);

92 Picanya = grafo.addNode("Picanya", 16,69);

93 Paiporta = grafo.addNode("Paiporta", 20,69);

94 Valencia_Sud = grafo.addNode("Valencia_Sud", 21,71);

95 Sant_Isidre = grafo.addNode("Sant_Isidre", 23,73);

96 Safranar = grafo.addNode("Safranar", 24,73);

97 Patraix = grafo.addNode("Patraix", 25,74);

98 Joaquin_Sorolla = grafo.addNode("Joaquin_Sorolla", 27,74);

99 Bailen = grafo.addNode("Bailen",28,75);

100 Aragon = grafo.addNode("Aragon", 32,77);

101 Amistat = grafo.addNode("Amistat",33,77);

102 Ayora = grafo.addNode("Ayora",35,76);

103 Neptu = grafo.addNode("Neptu", 38,77);

104 Angel_Guimera = grafo.addNode("Angel_Guimera", 26,77);

105 Maritim_Serreria = grafo.addNode("Maritim_Serreria",36,77);

R.Sanz 93

Page 100: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

106 Serreria = grafo.addNode("Serreria",36,78);

107 Francesc_Cubells = grafo.addNode("Francesc_Cubells",37,77);

108 Grau_Canyamelar = grafo.addNode("Grau_Canyamelar",37,77);

109 Colon = grafo.addNode("Colon",29,77);

110 Alameda = grafo.addNode("Alameda",30,77);

111 Xativa = grafo.addNode("Xativa",28,76);

112 Avinguda_del_Cid = grafo.addNode("Avinguda_del_Cid",24,76);

113 Nou_dOctubre = grafo.addNode("Nou_dOctubre",22,77);

114 Mislata = grafo.addNode("Mislata", 20,77);

115 Mislata_Almassil = grafo.addNode("Mislata_Almassil", 19,78);

116 Faitanar = grafo.addNode("Faitanar", 17,78);

117 Quart_de_Poblet = grafo.addNode("Quart_de_Poblet",15,79);

118 Salt_de_lAigua = grafo.addNode("Salt_de_lAigua",13,79);

119 Manises = grafo.addNode("Manises",12,80);

120 Rosas = grafo.addNode("Rosas",10,81);

121 Aeroport = grafo.addNode("Aeroport",8,81);

122 Facultats = grafo.addNode("Facultats",31,78);

123 Machado = grafo.addNode("Machado", 32,81);

124 Alboraya_Palmaret = grafo.addNode("Alboraya_Palmaret", 32,82);

125 Alboraya_Peris_Arago = grafo.addNode("Alboraya_Peris_Arago",

33,83);

126 Almassera = grafo.addNode("Almassera", 35,85);

127 Meliana = grafo.addNode("Meliana", 33,88);

R.Sanz 94

Page 101: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

128 Foios = grafo.addNode("Foios", 33,90);

129 Albalat_dels_Sorells = grafo.addNode("Albalat_dels_Sorells"

,34,92);

130 Museros = grafo.addNode("Museros",35,95);

131 Massamagrell = grafo.addNode("Massamagrell",37,97);

132 La_Pobla_de_Farnals = grafo.addNode("La_Pobla_de_Farnals",

37,98);

133 Rafelbunyol = grafo.addNode("Rafelbunyol", 37,100);

134 Empalme = grafo.addNode("Empalme", 23,82);

135 Benimaclet = grafo.addNode("Benimaclet",31,79);

136 Mas_del_Rosari = grafo.addNode("Mas_del_Rosari", 15,89);

137 La_Coma = grafo.addNode("La_Coma", 17,88);

138 Tomas_y_Valiente = grafo.addNode("Tomas_y_Valiente", 20,87);

139 Santa_Gemma_Parc_Cientific_UV = grafo.addNode("

Santa_Gemma_Parc_Cientific UV", 20,86);

140 Ll_Llarga_Terramelar = grafo.addNode("Ll_Llarga_Terramelar",

16,89);

141 TVV = grafo.addNode("TVV",20,85);

142 Fira_Valencia = grafo.addNode("Fira_Valencia",18,84);

143 Vicent_Andres_Estelles = grafo.addNode("Vicent_Andres_Estelles",

19,85);

144 Campus_de_Burjassot = grafo.addNode("Campus_de_Burjassot",

19,85);

R.Sanz 95

Page 102: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

145 Sant_Joan = grafo.addNode("Sant_Joan", 20,84);

146 La_Granja = grafo.addNode("La_Granja", 21,84);

147 Palau_de_Congressos = grafo.addNode("Palau_de_Congressos",

24,83);

148 Florista = grafo.addNode("Florista", 24,83);

149 Garbi = grafo.addNode("Garbi", 24,81);

150 Benicalap = grafo.addNode("Benicalap", 26,81);

151 Transits = grafo.addNode("Transits", 26,81);

152 Marxalenes = grafo.addNode("Marxalenes", 26,81);

153 Reus = grafo.addNode("Reus", 27,81);

154 Sagunt = grafo.addNode("Sagunt", 28,81);

155 Pont_de_Fusta = grafo.addNode("Pont_de_Fusta", 29,79);

156 Primat_Reig = grafo.addNode("Primat_Reig", 30,81);

157 Vicent_Zaragoza = grafo.addNode("Vicent_Zaragoza", 32,79);

158 Universitat_Politecnica = grafo.addNode("Universitat_Politecnica

", 33,79);

159 La_Carrasca = grafo.addNode("La_Carrasca", 34,79);

160 Tarongers = grafo.addNode("Tarongers", 35,79);

161 La_Marina = grafo.addNode("La_Marina", 37,78);

162 Doctor_Lluch = grafo.addNode("Doctor_Lluch", 37,77);

163 La_Cadena = grafo.addNode("La_Cadena", 37,78);

164 Eugenia_Vines = grafo.addNode("Eugenia_Vines", 38,78);

165 Les_Arenes = grafo.addNode("Les_Arenes", 38,77);

R.Sanz 96

Page 103: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

166 Mediterrani = grafo.addNode("Mediterrani", 37,77);

167 Alfauir = grafo.addNode("Alfauir", 30,81);

168 Orriols = grafo.addNode("Orriols", 30,82);

169 Estadi_del_Llevant = grafo.addNode("Estadi_del_Llevant", 30,83);

170 Sant_Miquel_dels_Reis = grafo.addNode("Sant_Miquel_dels_Reis",29

,83);

171 Tossal_del_Rei = grafo.addNode("Tossal_del_Rei", 28,83);

172 //Trayectos

173 grafo.addEdge (Villanueva_de_Castellon, Alberic, 4.40, "linea1")

;

174 grafo.addEdge (Alberic,Massalaves,3.10, "linea1");

175 grafo.addEdge (Massalaves,Montortal,3.48, "linea1");

176 grafo.addEdge (Montortal,LAlcudia,2.45, "linea1");

177 grafo.addEdge (LAlcudia,Benimodo,3.00, "linea1");

178 grafo.addEdge (Benimodo,Carlet,1.34, "linea1");

179 grafo.addEdge (Carlet,Ausias_March,3.95, "linea1");

180 grafo.addEdge (Ausias_March, Alginet,2.39, "linea1");

181 grafo.addEdge (Alginet,Font_Almanguer,2.95, "linea1");

182 grafo.addEdge (Font_Almanguer,Espioca,3.61, "linea1");

183 grafo.addEdge (Espioca,Omet,3.74, "linea1");

184 grafo.addEdge (Omet,Picassent,1.40, "linea1");

185 grafo.addEdge (Picassent,Sant_Ramon,2.97, "linea1");

186 grafo.addEdge (Sant_Ramon,Realon,2.61, "linea1");

R.Sanz 97

Page 104: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

187 grafo.addEdge (Realon,Col_legi_El_Vedat,1.69, "linea1");

188 grafo.addEdge (Col_legi_El_Vedat,Torrent_Avinguda,1.95, "linea1"

);

189 grafo.addEdge (Col_legi_El_Vedat,Torrent_Avinguda,1.95, "linea5"

);

190 grafo.addEdge (Col_legi_El_Vedat, Torrent,1.27, "linea 1");

191 grafo.addEdge (Torrent_Avinguda,Torrent,2.11, "linea1");

192 grafo.addEdge (Torrent_Avinguda,Torrent,2.11, "linea5");

193 grafo.addEdge (Torrent,Picanya,2.29, "linea1");

194 grafo.addEdge (Torrent,Picanya,2.29, "linea5");

195 grafo.addEdge (Picanya,Paiporta,1.73, "linea1");

196 grafo.addEdge (Picanya,Paiporta,1.73, "linea5");

197 grafo.addEdge (Paiporta,Valencia_Sud,1.17, "linea1");

198 grafo.addEdge (Paiporta,Valencia_Sud,1.17, "linea5");

199 grafo.addEdge (Valencia_Sud,Sant_Isidre,1.31, "linea1");

200 grafo.addEdge (Valencia_Sud,Sant_Isidre,1.31, "linea5");

201 grafo.addEdge (Sant_Isidre,Safranar,0.33, "linea1");

202 grafo.addEdge (Sant_Isidre,Safranar,0.33, "linea5");

203 grafo.addEdge (Safranar,Patraix,0.74, "linea1");

204 grafo.addEdge (Safranar,Patraix,0.74, "linea5");

205 grafo.addEdge (Patraix,Joaquin_Sorolla,0.63, "linea1");

206 grafo.addEdge (Patraix,Joaquin_Sorolla,0.63, "linea5");

207 grafo.addEdge (Joaquin_Sorolla,Plaza_Espanya,0.80, "linea1");

R.Sanz 98

Page 105: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

208 grafo.addEdge (Plaza_Espanya,Angel_Guimera,0.55, "linea1");

209 grafo.addEdge (Angel_Guimera,Turia,1.09, "linea1");

210 grafo.addEdge (Turia,Campanar_La_Fe,0.73, "linea1");

211 grafo.addEdge (Campanar_La_Fe,Beniferri,0.76, "linea1");

212 grafo.addEdge (Beniferri,Empalme,1.55, "linea1");

213 grafo.addEdge (Empalme,Cantereria,0.99, "linea1");

214 grafo.addEdge (Cantereria,Benimamet,0.65, "linea1");

215 grafo.addEdge (Benimamet,Les_Carolines_Fira,0.65, "linea1");

216 grafo.addEdge (Les_Carolines_Fira,Campament,1.02, "linea1");

217 grafo.addEdge (Campament,Paterna,0.69, "linea1");

218 grafo.addEdge (Paterna,Santa_Rita,1.38, "linea1");

219 grafo.addEdge (Santa_Rita,Fuente_del_Jarro,1.01, "linea1");

220 grafo.addEdge (Fuente_del_Jarro, La_Canyada,2.71, "linea1");

221 grafo.addEdge (La_Canyada,La_Vallesa,1.58, "linea1");

222 grafo.addEdge (La_Vallesa,Entrepins,1.64, "linea1");

223 grafo.addEdge (Entrepins,El_Clot,1.66, "linea1");

224 grafo.addEdge (El_Clot,Montesol,0.77, "linea1");

225 grafo.addEdge (Montesol,LEliana,0.83, "linea1");

226 grafo.addEdge (LEliana,Torre_del_Virrei,1.10, "linea1");

227 grafo.addEdge (Torre_del_Virrei,La_Pobla_De_Vallbona,2.24, "

linea1");

228 grafo.addEdge (La_Pobla_De_Vallbona,Benaguasil_1r,1.76, "linea1"

);

R.Sanz 99

Page 106: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

229 grafo.addEdge (Benaguasil_1r,Benaguasil_2n,0.84, "linea1");

230 grafo.addEdge (Benaguasil_2n,Lliria,3.21, "linea1");

231 grafo.addEdge (Empalme,Burjassot,1.09, "linea1");

232 grafo.addEdge (Burjassot,Burjassot_Godella,0.79, "linea1");

233 grafo.addEdge (Burjassot_Godella,Godella,0.69, "linea1");

234 grafo.addEdge (Godella,Rocafort,1.17, "linea1");

235 grafo.addEdge (Rocafort,Massarrojos,0.96, "linea1");

236 grafo.addEdge (Massarrojos,Montcada_Alfara,1.57, "linea1");

237 grafo.addEdge (Montcada_Alfara, Seminari_CEU,0.73, "linea1");

238 grafo.addEdge (Seminari_CEU,Masies,2.51, "linea1");

239 grafo.addEdge (Masies,S_Psiquiatric,3.87, "linea1");

240 grafo.addEdge (S_Psiquiatric,Betera,1.60, "linea1");

241 grafo.addEdge (Joaquin_Sorolla,Bailen,0.65, "linea5");

242 grafo.addEdge (Bailen,Colon,0.95, "linea5");

243 grafo.addEdge (Colon,Alameda,0.57, "linea5");

244 grafo.addEdge (Colon,Alameda,0.57, "linea3");

245 grafo.addEdge (Alameda,Aragon,0.58, "linea5");

246 grafo.addEdge (Aragon,Amistat,0.65, "linea5");

247 grafo.addEdge (Amistat,Ayora,0.84, "linea5");

248 grafo.addEdge (Ayora,Maritim_Serreria,0.44, "linea5");

249 grafo.addEdge (Maritim_Serreria,Francesc_Cubells,0.38, "linea5")

;

R.Sanz 100

Page 107: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

250 grafo.addEdge (Maritim_Serreria,Francesc_Cubells,0.38, "linea6")

;

251 grafo.addEdge (Francesc_Cubells,Grau_Canyamelar,0.74, "linea5");

252 grafo.addEdge (Francesc_Cubells,Grau_Canyamelar,0.74, "linea6");

253 grafo.addEdge (Grau_Canyamelar,Neptu,0.35, "linea5");

254 grafo.addEdge (Colon,Xativa,0.67, "linea5");

255 grafo.addEdge (Colon,Xativa,0.67, "linea3");

256 grafo.addEdge (Xativa,Angel_Guimera,0.76, "linea5");

257 grafo.addEdge (Xativa,Angel_Guimera,0.76, "linea3");

258 grafo.addEdge (Angel_Guimera,Avinguda_del_Cid,1.10, "linea5");

259 grafo.addEdge (Angel_Guimera,Avinguda_del_Cid,1.10, "linea3");

260 grafo.addEdge (Avinguda_del_Cid,Nou_dOctubre,0.89, "linea5");

261 grafo.addEdge (Avinguda_del_Cid,Nou_dOctubre,0.89, "linea3");

262 grafo.addEdge (Nou_dOctubre,Mislata,1, "linea5");

263 grafo.addEdge (Nou_dOctubre,Mislata,1, "linea3");

264 grafo.addEdge (Mislata,Mislata_Almassil,0.58, "linea5");

265 grafo.addEdge (Mislata,Mislata_Almassil,0.58, "linea3");

266 grafo.addEdge (Mislata_Almassil,Faitanar,0.78, "linea5");

267 grafo.addEdge (Faitanar,Quart_de_Poblet,0.85, "linea5");

268 grafo.addEdge (Quart_de_Poblet,Salt_de_lAigua,0.87,"linea5");

269 grafo.addEdge (Salt_de_lAigua,Manises,0.92, "linea5");

270 grafo.addEdge (Manises,Rosas,0.79, "linea5");

271 grafo.addEdge (Rosas,Aeroport,0.66, "linea5");

R.Sanz 101

Page 108: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

272 grafo.addEdge (Mislata_Almassil,Faitanar,0.78, "linea3");

273 grafo.addEdge (Faitanar,Quart_de_Poblet,0.85, "linea3");

274 grafo.addEdge (Quart_de_Poblet,Salt_de_lAigua,0.87,"linea3");

275 grafo.addEdge (Salt_de_lAigua,Manises,0.92, "linea3");

276 grafo.addEdge (Manises,Rosas,0.79, "linea3");

277 grafo.addEdge (Rosas,Aeroport,0.66, "linea3");

278 grafo.addEdge (Alameda,Facultats,0.61, "linea3");

279 grafo.addEdge (Facultats,Benimaclet,0.89, "linea3");

280 grafo.addEdge (Benimaclet,Machado,0.88, "linea3");

281 grafo.addEdge (Machado,Alboraya_Palmaret,0.49, "linea3");

282 grafo.addEdge (Alboraya_Palmaret,Alboraya_Peris_Arago,0.63, "

linea3");

283 grafo.addEdge (Alboraya_Peris_Arago, Almassera,1.30, "linea3");

284 grafo.addEdge (Almassera,Meliana,1.86, "linea3");

285 grafo.addEdge (Meliana,Foios,1.09, "linea3");

286 grafo.addEdge (Foios,Albalat_dels_Sorells,1.03, "linea3");

287 grafo.addEdge (Albalat_dels_Sorells,Museros,1.96, "linea3");

288 grafo.addEdge (Museros,Massamagrell,1.21, "linea3");

289 grafo.addEdge (Massamagrell,La_Pobla_de_Farnals,1.01, "linea3");

290 grafo.addEdge (La_Pobla_de_Farnals,Rafelbunyol,1.05, "linea3");

291 grafo.addEdge (Grau_Canyamelar,Mediterrani,0.43, "linea6");

292 grafo.addEdge (Mediterrani,Doctor_Lluch,0.36, "linea6");

293 grafo.addEdge (Mediterrani,Doctor_Lluch,0.36, "linea4");

R.Sanz 102

Page 109: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

294 grafo.addEdge (Doctor_Lluch, La_Marina,0.40, "linea6");

295 grafo.addEdge (Doctor_Lluch, La_Marina,0.40, "linea4");

296 grafo.addEdge (La_Marina, La_Cadena,0.35, "linea6");

297 grafo.addEdge (La_Marina, La_Cadena,0.35, "linea4");

298 grafo.addEdge (La_Cadena,Eugenia_Vines,0.36, "linea6");

299 grafo.addEdge (La_Cadena,Eugenia_Vines,0.36, "linea4");

300 grafo.addEdge (Eugenia_Vines,Les_Arenes,0.53, "linea6");

301 grafo.addEdge (Eugenia_Vines,Les_Arenes,0.53, "linea4");

302 grafo.addEdge (Les_Arenes,Mediterrani,0.32, "linea6");

303 grafo.addEdge (Les_Arenes,Mediterrani,0.32, "linea4");

304 grafo.addEdge (La_Cadena,Serreria,0.48, "linea6");

305 grafo.addEdge (La_Cadena,Serreria,0.48, "linea4");

306 grafo.addEdge(Benimaclet, Serreria, 2.87, "linea6");

307 grafo.addEdge (Serreria,Tarongers,0.51, "linea6");

308 grafo.addEdge (Serreria,Tarongers,0.51, "linea4");

309 grafo.addEdge (Tarongers,La_Carrasca,0.46, "linea6");

310 grafo.addEdge (Tarongers,La_Carrasca,0.46, "linea4");

311 grafo.addEdge (La_Carrasca,Universitat_Politecnica,0.51, "linea6

");

312 grafo.addEdge (La_Carrasca,Universitat_Politecnica,0.51, "linea4

");

313 grafo.addEdge (Universitat_Politecnica,Vicent_Zaragoza,0.67, "

linea6");

R.Sanz 103

Page 110: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

314 grafo.addEdge (Universitat_Politecnica,Vicent_Zaragoza,0.67, "

linea4");

315 grafo.addEdge (Vicent_Zaragoza,Benimaclet,0.72, "linea6");

316 grafo.addEdge (Vicent_Zaragoza,Benimaclet,0.72, "linea4");

317 grafo.addEdge (Benimaclet,Primat_Reig,0.46, "linea6");

318 grafo.addEdge (Benimaclet,Primat_Reig,0.46, "linea4");

319 grafo.addEdge (Primat_Reig,Alfauir,0.52, "linea6");

320 grafo.addEdge (Alfauir,Orriols,0.5, "linea6");

321 grafo.addEdge (Orriols,Estadi_del_Llevant,0.52, "linea6");

322 grafo.addEdge (Estadi_del_Llevant,Sant_Miquel_dels_Reis,0.50, "

linea6");

323 grafo.addEdge (Sant_Miquel_dels_Reis,Tossal_del_Rei,0.48, "

linea6");

324 grafo.addEdge (Primat_Reig,Pont_de_Fusta,0.84, "linea4");

325 grafo.addEdge (Pont_de_Fusta,Sagunt,1, "linea4");

326 grafo.addEdge (Sagunt,Reus,0.37, "linea4");

327 grafo.addEdge (Reus,Marxalenes,0.65, "linea4");

328 grafo.addEdge (Marxalenes,Transits,0.29, "linea4");

329 grafo.addEdge (Transits,Benicalap,0.31, "linea4");

330 grafo.addEdge (Benicalap,Garbi,0.42, "linea4");

331 grafo.addEdge (Garbi,Florista,0.32, "linea4");

332 grafo.addEdge (Florista,Palau_de_Congressos,0.42, "linea4");

333 grafo.addEdge (Palau_de_Congressos,Empalme,0.36, "linea4");

R.Sanz 104

Page 111: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

334 grafo.addEdge (Empalme,La_Granja,0.93, "linea4");

335 grafo.addEdge (La_Granja, Sant_Joan,0.22, "linea4");

336 grafo.addEdge (Sant_Joan,Campus_de_Burjassot,0.24, "linea4");

337 grafo.addEdge (Campus_de_Burjassot,Vicent_Andres_Estelles,0.18,

"linea4");

338 grafo.addEdge (Vicent_Andres_Estelles,Fira_Valencia,0.83, "

linea4");

339 grafo.addEdge (Vicent_Andres_Estelles,TVV,0.38, "linea4");

340 grafo.addEdge (TVV,Santa_Gemma_Parc_Cientific_UV,0.34, "linea4")

;

341 grafo.addEdge (TVV,Ll_Llarga_Terramelar,0.85, "linea4");

342 grafo.addEdge (Santa_Gemma_Parc_Cientific_UV,Tomas_y_Valiente

,0.35, "linea4");

343 grafo.addEdge (Tomas_y_Valiente,La_Coma,0.80, "linea4");

344 grafo.addEdge (La_Coma,Mas_del_Rosari,0.28, "linea4");

345 Iterator<Edge> l = grafo.getMap().get(salida).iterator();

346 boolean cond = true;

347 Edge tramo;

348 while(l.hasNext() && cond){

349 tramo = l.next();

350 if(((Nodo)tramo.n1).getNombre() == salida){

351 this.salida = (Nodo)tramo.n1;

352 cond = false;

R.Sanz 105

Page 112: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

353 }

354 }

355 l = grafo.getMap().get(llegada).iterator();

356 cond = true;

357 while(l.hasNext() && cond){

358 tramo = l.next();

359 if(((Nodo)tramo.n1).getNombre() == llegada){

360 this.llegada = (Nodo)tramo.n1;

361 cond = false;

362 }

363 }

364 }

365 public List<Pixel> recorridoObtimo(){

366 String linea = "";

367 String lineaA = "Linea0";

368 Arbol arbol = new Arbol(salida, llegada, grafo);

369 List<Nodo> camino = arbol.recorridoObtimo(arbol.

CalcularRecorrido());

370 List<Pixel> recorrido = new ArrayList<Pixel>();

371 Iterator<Nodo> iterador = camino.iterator();

372 Iterator<Nodo> iterador2 = camino.iterator();

373 iterador2.next();

374 while(iterador.hasNext()){

R.Sanz 106

Page 113: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

375 Nodo nodo = iterador.next();

376 Nodo nodo2;

377 if (iterador2.hasNext()){

378 nodo2 = iterador2.next();

379 Iterator<Edge> l = grafo.getMap().get(nodo.getNombre()).iterator

();

380 boolean cond = true;

381 Edge tramo;

382 while(l.hasNext() && cond){

383 tramo = l.next();

384 if(((Nodo)tramo.n2).getNombre() == nodo2.getNombre()){

385 if (cond && linea == lineaA){

386 linea = tramo.getLabel();

387 cond = false;

388 }

389 else linea = tramo.getLabel();

390 }

391 }

392 lineaA=linea;

393 }

394 else linea = "";

395 Pixel pixel = new Pixel(nodo.getX(),nodo.getY(),nodo.getNombre()

,linea);

R.Sanz 107

Page 114: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

396 recorrido.add(pixel);

397 }

398 return recorrido;

399 }

400 }

R.Sanz 108

Page 115: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

9.2.2. ChoiceLle.java

1 package Grafica;

2 import java.applet.Applet;

3 import java.awt.*;

4 import java.awt.event.*;

5 import javax.swing.JScrollPane;

6 public class ChoiceLle extends Applet implements ItemListener {

7 /* Declaration */

8 private LayoutManager Layout;

9 String [] Estaciones = new String [131];

10 List Selector = new List(30,false);

11 private Font Times;

12 Ventana llegada;

13 public ChoiceLle (Ventana llegada, JScrollPane panel, Container

contentpane) {

14 /* Declaration */

15 this.llegada = llegada;

16 int i;

17 /* Instantiation */

18 Times = new Font("TimeNewRoman", 20, 30);

19 Layout = new FlowLayout ();

20 Selector.setFont (Times);

21 Selector.setBounds(75, 200, 335, 90);

R.Sanz 109

Page 116: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

22 /* Decoration */

23 Estaciones [0] = "Estacion de llegada ...";

24 Estaciones [1]= "Aeroport";

25 Estaciones [2]= "Alameda";

26 Estaciones [3]= "Albalat_dels_Sorells";

27 Estaciones [4]= "Alboraya_Palmaret";

28 Estaciones [5]= "Alboraya_Peris_Arago";

29 Estaciones [6]= "Alberic";

30 Estaciones [7]= "Alfauir";

31 Estaciones [8]= "Alginet";

32 Estaciones [9]= "Almassera";

33 Estaciones [10]= "Amistat";

34 Estaciones [11]= "Angel_Guimera";

35 Estaciones [12]= "Aragon";

36 Estaciones [13]= "Ausias_March";

37 Estaciones [14]= "Avinguda_del_Cid";

38 Estaciones [15]= "Ayora";

39 Estaciones [16]= "Bailen";

40 Estaciones [17]= "Benaguasil_1r";

41 Estaciones [18]= "Benaguasil_2n";

42 Estaciones [19]= "Benicalap";

43 Estaciones [20]= "Beniferri";

44 Estaciones [21]= "Benimaclet";

R.Sanz 110

Page 117: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

45 Estaciones [22]= "Benimamet";

46 Estaciones [23]= "Benimodo";

47 Estaciones [24]= "Betera";

48 Estaciones [25]= "Burjassot";

49 Estaciones [26]= "Burjassot_Godella";

50 Estaciones [27]= "Campament";

51 Estaciones [28]= "Campanar_La_Fe";

52 Estaciones [29]= "Campus_de_Burjassot";

53 Estaciones [30]= "Cantereria";

54 Estaciones [31]= "Carlet";

55 Estaciones [32]= "Col_legi_El_Vedat";

56 Estaciones [33]= "Colon";

57 Estaciones [34]= "Doctor_Lluch";

58 Estaciones [35]= "El_Clot";

59 Estaciones [36]= "Empalme";

60 Estaciones [37]= "Entrepins";

61 Estaciones [38]= "Estadi_del_LLevant";

62 Estaciones [39]= "Espioca";

63 Estaciones [40]= "Eugenia_Vines";

64 Estaciones [41]= "Facultats";

65 Estaciones [42]= "Faitanar";

66 Estaciones [43]= "Fira_Valencia";

67 Estaciones [44]= "Florista";

R.Sanz 111

Page 118: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

68 Estaciones [45]= "Font_Almanguer";

69 Estaciones [46]= "Foios";

70 Estaciones [47]= "Francesc_Cubells";

71 Estaciones [48]= "Fuente_del_Jarro";

72 Estaciones [49]= "Garbi";

73 Estaciones [50]= "Godella";

74 Estaciones [51]= "Grau_Canyamelar";

75 Estaciones [52]= "Joaquin_Sorolla";

76 Estaciones [53]= "LAlcudia";

77 Estaciones [54]= "LEliana";

78 Estaciones [55]= "La_Cadena";

79 Estaciones [56]= "La_Canyada";

80 Estaciones [57]= "La_Carrasca";

81 Estaciones [58]= "La_Coma";

82 Estaciones [59]= "La_Granja";

83 Estaciones [60]= "La_Marina";

84 Estaciones [61]= "La_Pobla_de_Farnals";

85 Estaciones [62]= "La_Pobla_De_Vallbona";

86 Estaciones [63]= "La_Vallesa";

87 Estaciones [64]= "Les_Arenes";

88 Estaciones [65]= "Les_Carolines_Fira";

89 Estaciones [66]= "Ll_Llarga_Terramelar";

90 Estaciones [67]= "Lliria";

R.Sanz 112

Page 119: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

91 Estaciones [68]= "Machado";

92 Estaciones [69]= "Manises";

93 Estaciones [70]= "Maritim_Serreria";

94 Estaciones [71]= "Marxalenes";

95 Estaciones [72]= "Mas_del_Rosari";

96 Estaciones [73]= "Masies";

97 Estaciones [74]= "Massalaves";

98 Estaciones [75]= "Massamagrell";

99 Estaciones [76]= "Massarrojos";

100 Estaciones [77]= "Meliana";

101 Estaciones [78]= "Mediterrani";

102 Estaciones [79]= "Mislata";

103 Estaciones [80]= "Mislata_Almassil";

104 Estaciones [81]= "Montcada_Alfara";

105 Estaciones [82]= "Montesol";

106 Estaciones [83]= "Montortal";

107 Estaciones [84]= "Museros";

108 Estaciones [85]= "Neptu";

109 Estaciones [86]= "Nou_d’Octubre";

110 Estaciones [87]= "Omet";

111 Estaciones [88]= "Orriols";

112 Estaciones [89]= "Paiporta";

113 Estaciones [90]= "Palau_de_Congressos";

R.Sanz 113

Page 120: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

114 Estaciones [91]= "Paterna";

115 Estaciones [92]= "Patraix";

116 Estaciones [93]= "Picanya";

117 Estaciones [94]= "Picassent";

118 Estaciones [95]= "PlazaEspanya";

119 Estaciones [96]= "Pont_de_Fusta";

120 Estaciones [97]= "Primat_Reig";

121 Estaciones [98]= "Quart_de_Poblet";

122 Estaciones [99]= "Rafelbunyol";

123 Estaciones [100]= "Realon";

124 Estaciones [101]= "Reus";

125 Estaciones [102]= "Rocafort";

126 Estaciones [103]= "Rosas";

127 Estaciones [104]= "S_Psiquiatric";

128 Estaciones [105]= "Safranar";

129 Estaciones [106]= "Sagunt";

130 Estaciones [107]= "Salt_de_lAigua";

131 Estaciones [108]= "Sant_Isidre";

132 Estaciones [109]= "Sant_Joan";

133 Estaciones [110]= "Sant_Miquel_dels_Reis";

134 Estaciones [111]= "Sant_Ramon";

135 Estaciones [112]= "Santa_Gemma_Parc_Cientific_UV";

136 Estaciones [113]= "Santa_Rita";

R.Sanz 114

Page 121: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

137 Estaciones [114]= "Seminari_CEU";

138 Estaciones [115]= "Serreria";

139 Estaciones [116]= "Tarongers";

140 Estaciones [117]= "Tomas_y_Valiente";

141 Estaciones [118]= "Torre_del_Virrei";

142 Estaciones [119]= "Torrent";

143 Estaciones [120]= "Torrent_Avinguda";

144 Estaciones [121]= "Tossal_del_Rei";

145 Estaciones [122]= "Transits";

146 Estaciones [123]= "Turia";

147 Estaciones [124]= "TVV";

148 Estaciones [125]= "Universitat_Politecnica";

149 Estaciones [126]= "Valencia_Sud";

150 Estaciones [127]= "Vicent_Andres_Estelles";

151 Estaciones [128]= "Vicent_Zaragoza";

152 Estaciones [129]= "Villanueva_de_Castellon";

153 Estaciones [130]= "Xativa";

154 for (i = 0; i < Estaciones.length; ++i) {

155 Selector.addItem(Estaciones[i],i);

156 }

157 /* Location */

158 setLayout (Layout);

159 Selector.setBounds(525, 200, 335, 400);

R.Sanz 115

Page 122: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

160 panel.add(Selector);

161 contentpane.add(Selector);

162 /* Configuration */

163 Selector.addItemListener (this);

164 /* Initialization */

165 Selector.select (0);

166 }

167 public void itemStateChanged(ItemEvent e) {

168 int Selection;

169 Selection = Selector.getSelectedIndex();

170 llegada.setllegada(Estaciones[Selection]);

171 }

172 }

R.Sanz 116

Page 123: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

9.2.3. ChoiceSal.java

1 package Grafica;

2 import java.applet.Applet;

3 import java.awt.*;

4 import java.awt.event.*;

5 import javax.swing.JScrollPane;

6 public class ChoiceSal extends Applet implements ItemListener {

7 /* Declaration */

8 private LayoutManager Layout;

9 String [] Estaciones = new String [131];

10 List Selector = new List(30,false);

11 private Font Times;

12 Ventana salida;

13 public ChoiceSal (Ventana salida, JScrollPane panel, Container

contentpane) {

14 /* Declaration */

15 this.salida = salida;

16 int i;

17 /* Instantiation */

18 Times = new Font("TimeNewRoman", 20, 30);

19 Layout = new FlowLayout ();

20 Selector.setFont (Times);

21 Selector.setBounds(40, 200, 335, 90);

R.Sanz 117

Page 124: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

22 /* Decoration */

23 Estaciones [0] = "Estacion de Salida ...";

24 Estaciones [1]= "Aeroport";

25 Estaciones [2]= "Alameda";

26 Estaciones [3]= "Albalat_dels_Sorells";

27 Estaciones [4]= "Alboraya_Palmaret";

28 Estaciones [5]= "Alboraya_Peris_Arago";

29 Estaciones [6]= "Alberic";

30 Estaciones [7]= "Alfauir";

31 Estaciones [8]= "Alginet";

32 Estaciones [9]= "Almassera";

33 Estaciones [10]= "Amistat";

34 Estaciones [11]= "Angel_Guimera";

35 Estaciones [12]= "Aragon";

36 Estaciones [13]= "Ausias_March";

37 Estaciones [14]= "Avinguda_del_Cid";

38 Estaciones [15]= "Ayora";

39 Estaciones [16]= "Bailen";

40 Estaciones [17]= "Benaguasil_1r";

41 Estaciones [18]= "Benaguasil_2n";

42 Estaciones [19]= "Benicalap";

43 Estaciones [20]= "Beniferri";

44 Estaciones [21]= "Benimaclet";

R.Sanz 118

Page 125: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

45 Estaciones [22]= "Benimamet";

46 Estaciones [23]= "Benimodo";

47 Estaciones [24]= "Betera";

48 Estaciones [25]= "Burjassot";

49 Estaciones [26]= "Burjassot_Godella";

50 Estaciones [27]= "Campament";

51 Estaciones [28]= "Campanar_La_Fe";

52 Estaciones [29]= "Campus_de_Burjassot";

53 Estaciones [30]= "Cantereria";

54 Estaciones [31]= "Carlet";

55 Estaciones [32]= "Col_legi_El_Vedat";

56 Estaciones [33]= "Colon";

57 Estaciones [34]= "Doctor_Lluch";

58 Estaciones [35]= "El_Clot";

59 Estaciones [36]= "Empalme";

60 Estaciones [37]= "Entrepins";

61 Estaciones [38]= "Estadi_del_LLevant";

62 Estaciones [39]= "Espioca";

63 Estaciones [40]= "Eugenia_Vines";

64 Estaciones [41]= "Facultats";

65 Estaciones [42]= "Faitanar";

66 Estaciones [43]= "Fira_Valencia";

67 Estaciones [44]= "Florista";

R.Sanz 119

Page 126: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

68 Estaciones [45]= "Font_Almanguer";

69 Estaciones [46]= "Foios";

70 Estaciones [47]= "Francesc_Cubells";

71 Estaciones [48]= "Fuente_del_Jarro";

72 Estaciones [49]= "Garbi";

73 Estaciones [50]= "Godella";

74 Estaciones [51]= "Grau_Canyamelar";

75 Estaciones [52]= "Joaquin_Sorolla";

76 Estaciones [53]= "LAlcudia";

77 Estaciones [54]= "LEliana";

78 Estaciones [55]= "La_Cadena";

79 Estaciones [56]= "La_Canyada";

80 Estaciones [57]= "La_Carrasca";

81 Estaciones [58]= "La_Coma";

82 Estaciones [59]= "La_Granja";

83 Estaciones [60]= "La_Marina";

84 Estaciones [61]= "La_Pobla_de_Farnals";

85 Estaciones [62]= "La_Pobla_De_Vallbona";

86 Estaciones [63]= "La_Vallesa";

87 Estaciones [64]= "Les_Arenes";

88 Estaciones [65]= "Les_Carolines_Fira";

89 Estaciones [66]= "Ll_Llarga_Terramelar";

90 Estaciones [67]= "Lliria";

R.Sanz 120

Page 127: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

91 Estaciones [68]= "Machado";

92 Estaciones [69]= "Manises";

93 Estaciones [70]= "Maritim_Serreria";

94 Estaciones [71]= "Marxalenes";

95 Estaciones [72]= "Mas_del_Rosari";

96 Estaciones [73]= "Masies";

97 Estaciones [74]= "Massalaves";

98 Estaciones [75]= "Massamagrell";

99 Estaciones [76]= "Massarrojos";

100 Estaciones [77]= "Meliana";

101 Estaciones [78]= "Mediterrani";

102 Estaciones [79]= "Mislata";

103 Estaciones [80]= "Mislata_Almassil";

104 Estaciones [81]= "Montcada_Alfara";

105 Estaciones [82]= "Montesol";

106 Estaciones [83]= "Montortal";

107 Estaciones [84]= "Museros";

108 Estaciones [85]= "Neptu";

109 Estaciones [86]= "Nou_d’Octubre";

110 Estaciones [87]= "Omet";

111 Estaciones [88]= "Orriols";

112 Estaciones [89]= "Paiporta";

113 Estaciones [90]= "Palau_de_Congressos";

R.Sanz 121

Page 128: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

114 Estaciones [91]= "Paterna";

115 Estaciones [92]= "Patraix";

116 Estaciones [93]= "Picanya";

117 Estaciones [94]= "Picassent";

118 Estaciones [95]= "PlazaEspanya";

119 Estaciones [96]= "Pont_de_Fusta";

120 Estaciones [97]= "Primat_Reig";

121 Estaciones [98]= "Quart_de_Poblet";

122 Estaciones [99]= "Rafelbunyol";

123 Estaciones [100]= "Realon";

124 Estaciones [101]= "Reus";

125 Estaciones [102]= "Rocafort";

126 Estaciones [103]= "Rosas";

127 Estaciones [104]= "S_Psiquiatric";

128 Estaciones [105]= "Safranar";

129 Estaciones [106]= "Sagunt";

130 Estaciones [107]= "Salt_de_lAigua";

131 Estaciones [108]= "Sant_Isidre";

132 Estaciones [109]= "Sant_Joan";

133 Estaciones [110]= "Sant_Miquel_dels_Reis";

134 Estaciones [111]= "Sant_Ramon";

135 Estaciones [112]= "Santa_Gemma_Parc_Cientific_UV";

136 Estaciones [113]= "Santa_Rita";

R.Sanz 122

Page 129: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

137 Estaciones [114]= "Seminari_CEU";

138 Estaciones [115]= "Serreria";

139 Estaciones [116]= "Tarongers";

140 Estaciones [117]= "Tomas_y_Valiente";

141 Estaciones [118]= "Torre_del_Virrei";

142 Estaciones [119]= "Torrent";

143 Estaciones [120]= "Torrent_Avinguda";

144 Estaciones [121]= "Tossal_del_Rei";

145 Estaciones [122]= "Transits";

146 Estaciones [123]= "Turia";

147 Estaciones [124]= "TVV";

148 Estaciones [125]= "Universitat_Politecnica";

149 Estaciones [126]= "Valencia_Sud";

150 Estaciones [127]= "Vicent_Andres_Estelles";

151 Estaciones [128]= "Vicent_Zaragoza";

152 Estaciones [129]= "Villanueva_de_Castellon";

153 Estaciones [130]= "Xativa";

154 for (i = 0; i < Estaciones.length; ++i) {

155 Selector.addItem(Estaciones[i],i);

156 }

157 /* Location */

158 setLayout (Layout);

159 Selector.setBounds(40, 200, 335, 400);

R.Sanz 123

Page 130: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

160 panel.add(Selector);

161 contentpane.add(Selector);

162 /* Configuration */

163 Selector.addItemListener (this);

164 /* Initialization */

165 Selector.select (0);

166 }

167 public void itemStateChanged(ItemEvent e) {

168 int Selection;

169 Selection = Selector.getSelectedIndex();

170 salida.setsalida(Estaciones[Selection]);

171 }

172 }

R.Sanz 124

Page 131: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

9.2.4. Dibujo.java

1 package Grafica;

2 import java.awt.*;

3 import java.awt.event.*;

4 import java.util.List;

5 import javax.swing.*;

6 public class Dibujo extends Frame{

7 private JTextArea areaTexto1;

8 // configurar GUI

9 public Dibujo(List<Pixel> lista){

10 super( "Camino optimo" );

11 // establecer menu Archivo y sus elementos de menu

12 Menu menuArchivo = new Menu( "Archivo" );

13 // establecer elemento de menu Acerca de...

14 MenuItem elementoAcerca = new MenuItem( "Acerca de..." );

15 menuArchivo.add( elementoAcerca );

16 elementoAcerca.addActionListener(

17 new ActionListener() { // clase interna anonima

18 // mostrar cuadro de dialogo de mensaje

19 // cuando el usuario seleccione Acerca de...

20 public void actionPerformed( ActionEvent evento )

21 {

22 JOptionPane.showMessageDialog( Dibujo.this,

R.Sanz 125

Page 132: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

23 "Este software fue disenado por: \nRicardo Sanz Hinojosas" +

24 "\n",

25 "Acerca de", JOptionPane.PLAIN_MESSAGE );

26 }

27 } // fin de la clase interna anonima

28 ); // fin de la llamada a addActionListener

29 // establecer elemento de menu Salir

30 MenuItem elementoSalir = new MenuItem( "Salir" );

31 menuArchivo.add( elementoSalir );

32 elementoSalir.addActionListener(

33 new ActionListener() { // clase interna anonima

34 // terminar la aplicacion cuando el usuario haga clic en

elementoSalir

35 public void actionPerformed( ActionEvent evento )

36 {

37 System.exit( 0 );

38 }

39 } // fin de la clase interna anonima

40 ); // fin de la llamada a addActionListener

41 // crear barra de menus y adjuntarla a la ventana

42 MenuBar barra = new MenuBar();

43 setMenuBar( barra );

44 barra.add( menuArchivo );

R.Sanz 126

Page 133: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

45 // Clase anidada que permite terminar la ejecucion de la

animacion

46 this.addWindowListener(

47 // Definicion de la clase anonima para controlar el cierre de

48 // la ventana

49 new WindowAdapter() {

50 public void windowClosing( WindowEvent evt ) {

51 // Se concluye el programa

52 System.exit( 0 );

53 }

54 } );

55 //////////////////////////////////////

56 setSize( 1000, 750 );

57 setVisible(true);

58 String cadena = "";

59 for (int i = lista.size()-1; i >-1 ;i--){

60 cadena = cadena + lista.get(i).getNombre() + "\n";

61 if (i > 0){

62 cadena = cadena + " | ("+lista.get(i-1).getLinea()+")

\n";

63 }

64 }

65 // establecer areaTexto1

R.Sanz 127

Page 134: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

66 areaTexto1 = new JTextArea( cadena, 700, 300 );

67 add( new JScrollPane( areaTexto1 ) );

68 areaTexto1.setFont(new Font("TimeNewRoman", 10, 18));

69 } // fin del constructor

70 }

R.Sanz 128

Page 135: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

9.2.5. Pixel.java

1 package Grafica;

2 public class Pixel {

3 String Nombre, linea;

4 int x,y;

5 public Pixel(int x, int y, String Nombre, String linea) {

6 this.x = x;

7 this.y = y;

8 this.Nombre = Nombre;

9 this.linea = linea;

10 }

11 public void setNombre(String nombre){

12 this.Nombre = nombre;

13 }

14 public String getNombre(){

15 return this.Nombre;

16 }

17 public void setLinea(String linea){

18 this.linea = linea;

19 }

20 public String getLinea(){

21 return this.linea;

22 }

R.Sanz 129

Page 136: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

23 public void setCoordenas(int x, int y){

24 this.x = x;

25 this.y = y;

26 }

27 public int getX(){

28 return this.x;

29 }

30 public int getY(){

31 return this.y;

32 }

33 }

R.Sanz 130

Page 137: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

9.2.6. Ventana.java

1 package Grafica;

2 import java.awt.*;

3 import java.awt.event.*;

4 import javax.swing.*;

5 public class Ventana extends JFrame{

6 private JLabel pantallaEtiqueta;

7 private String salida;

8 private String llegada;

9 public void setsalida(String salida){

10 this.salida = salida;

11 }

12 public void setllegada(String llegada){

13 this.llegada = llegada;

14 }

15 // configurar GUI

16 public Ventana(){

17 super( "Camino optimo" );

18 // establecer menu Archivo y sus elementos de menu

19 JMenu menuArchivo = new JMenu( "Archivo" );

20 menuArchivo.setMnemonic( ’A’ );

21 // establecer elemento de menu Acerca de...

22 JMenuItem elementoAcerca = new JMenuItem( "Acerca de..." );

R.Sanz 131

Page 138: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

23 elementoAcerca.setMnemonic( ’A’ );

24 menuArchivo.add( elementoAcerca );

25 elementoAcerca.addActionListener(

26 new ActionListener() { // clase interna anonima

27 // mostrar cuadro de dialogo de mensaje

28 //cuando el usuario seleccione Acerca de...

29 public void actionPerformed( ActionEvent evento )

30 {

31 JOptionPane.showMessageDialog( Ventana.this,

32 "Este software fue disenado por: \nRicardo Sanz Hinojosas" +

33 "\n",

34 "Acerca de", JOptionPane.PLAIN_MESSAGE );

35 }

36 } // fin de la clase interna anonima

37 ); // fin de la llamada a addActionListener

38 // establecer elemento de menu Salir

39 JMenuItem elementoSalir = new JMenuItem( "Salir" );

40 elementoSalir.setMnemonic( ’S’ );

41 menuArchivo.add( elementoSalir );

42 elementoSalir.addActionListener(

43 new ActionListener() { // clase interna anonima

44 // terminar la aplicacion cuando el usuario haga clic en

elementoSalir

R.Sanz 132

Page 139: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

45 public void actionPerformed( ActionEvent evento )

46 {

47 System.exit( 0 );

48 }

49 } // fin de la clase interna anonima

50 ); // fin de la llamada a addActionListener

51 // crear barra de menus y adjuntarla a la ventana

52 JMenuBar barra = new JMenuBar();

53 setJMenuBar( barra );

54 barra.add( menuArchivo );

55 //////////////////////////////////////

56 final JScrollPane panel = new JScrollPane();

57 panel.setLayout(null);

58 panel.setAutoscrolls(true);

59 final Container contentpane = getContentPane();

60 ChoiceSal Salida = new ChoiceSal(this,panel,contentpane);

61 ChoiceLle Llegada = new ChoiceLle(this,panel,contentpane);

62 JButton Aceptar = new JButton("Aceptar");

63 Aceptar.setFont(new Font("TimeNewRoman", 20, 24));

64 Aceptar.setBounds(390, 250, 120, 40);

65 contentpane.add(Aceptar);

66 Aceptar.addActionListener(

67 new ActionListener() { // clase interna anonima

R.Sanz 133

Page 140: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

68 // terminar la aplicacion cuando el usuario haga clic en

elementoSalir

69 public void actionPerformed( ActionEvent evento )

70 {

71 System.out.print(salida);

72 System.out.print(" - ");

73 System.out.println(llegada);

74 AA AEstrella = new AA(salida,llegada);

75 JFrame.setDefaultLookAndFeelDecorated(false);

76 // AreaTexto texto = new AreaTexto(AEstrella.recorridoObtimo());

77 // texto.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

78 Dibujo aplicacion = new Dibujo(AEstrella.recorridoObtimo());

79 }

80 } // fin de la clase interna anonima

81 ); // fin de la llamada a addActionListener

82 //////////////////////

83 // establecer etiqueta para mostrar texto

84 pantallaEtiqueta = new JLabel( "Metro de Valencia",

SwingConstants.CENTER);

85 pantallaEtiqueta.setBounds(10, 10, 0, 0);

86 pantallaEtiqueta.setForeground( Color.black );

87 pantallaEtiqueta.setFont( new Font( "Serif", Font.PLAIN, 72 ) );

88 getContentPane().setBackground( Color.white );

R.Sanz 134

Page 141: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

89 getContentPane().add( pantallaEtiqueta, BorderLayout.NORTH );

90 setSize( 900, 700 );

91 setVisible( true );

92 } // fin del constructor

93 public static void main( String args[] )

94 {

95 JFrame.setDefaultLookAndFeelDecorated(false);

96 Ventana aplicacion = new Ventana();

97 aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

98 }

99

100 }

R.Sanz 135

Page 142: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

9.3. Package Grafo

9.3.1. Grafo.java

1 package Grafo;

2

3 import java.util.ArrayList;

4 import java.util.HashMap;

5 import java.util.Iterator;

6 import java.util.List;

7 import java.util.Map;

8 import Arbol.*;

9 import Grafica.Pixel;

10 import jdd.graph.*;

11 public class Grafo extends jdd.graph.Graph{

12 List<Nodo> nodos = new ArrayList<Nodo>();;

13 List<Edge> edges = new ArrayList<Edge>();;

14 Map<String, List<Edge>> tabla = new HashMap<String, List<Edge

>>();;

15 public Grafo(boolean arg0) {

16 super(arg0);

17 }

18 public Nodo addNode (String nombre, int x, int y){

19 //Nodo nodo = (Nodo)super.addNode();

R.Sanz 136

Page 143: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

20 Nodo nodo = new Nodo(10);

21 nodos.add(nodo);

22 nodo.addNombre(nombre);

23 nodo.addCoordenas(x, y);

24 return nodo;

25 }

26

27 public Edge addEdge (Nodo n1, Nodo n2, double d, String linea){

28 Edge arista1 = new Edge(n1,n2,(int) d);

29 edges.add(arista1);

30 arista1.setWeight(d);

31 arista1.setLabel(linea);

32 if (tabla.isEmpty()){

33 tabla.put(n1.getNombre(), new ArrayList<Edge>());

34 tabla.put(n2.getNombre(), new ArrayList<Edge>());

35 }

36 if (tabla.containsKey(n1.getNombre())){

37 List<Edge> lista = tabla.get(n1.getNombre());

38 lista.add(arista1);

39 tabla.remove(n1.getNombre());

40 tabla.put(n1.getNombre(),lista);

41 }

42 else{

R.Sanz 137

Page 144: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

43 List<Edge> lista = new ArrayList<Edge>();

44 lista.add(arista1);

45 tabla.put(n1.getNombre(),lista);

46 }

47 Edge arista2 = super.addEdge(n2, n1);

48 arista2.setWeight(d);

49 arista2.setLabel(linea);

50 if (tabla.containsKey(n2.getNombre())){

51 List<Edge> lista = tabla.get(n2.getNombre());

52 lista.add(arista2);

53 tabla.remove(n2.getNombre());

54 tabla.put(n2.getNombre(),lista);

55 }

56 else{

57 List<Edge> lista = new ArrayList<Edge>();

58 lista.add(arista2);

59 tabla.put(n2.getNombre(),lista);

60 }

61 return arista1;

62 }

63 public List<LTreeNode<Elemento>> getChild(LTreeNode<Elemento>

nodo, Nodo fin){

R.Sanz 138

Page 145: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

64 List <LTreeNode<Elemento>> lista = new ArrayList<LTreeNode<

Elemento>>();

65 List<Edge> aristas = tabla.get(nodo.element().getnodo().

getNombre());

66 Iterator<Edge> iterador = aristas.iterator();

67 String nombre = "";

68 if (nodo.getParent() != null){

69 nombre = nodo.getParent().element().getnodo().getNombre();

70 }

71 while(iterador.hasNext()){

72 Edge arista = iterador.next();

73 Nodo hijo = (Nodo) arista.n2;

74 if (hijo.getNombre()!= nombre){

75 Elemento elemento = new Elemento(arista.weight,hijo.distancia(

fin),hijo);

76 LTreeNode<Elemento> node = new LTreeNode<Elemento>(elemento,nodo

,null);

77 lista.add(node);

78 }

79 }

80 return lista;

81 }

82 public Map<String, List<Edge>> getMap (){

R.Sanz 139

Page 146: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

83 return this.tabla;

84 }

85 }

R.Sanz 140

Page 147: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

9.3.2. Nodo.java

1 package Grafo;

2 import java.math.*;

3 public class Nodo extends jdd.graph.Node{

4 String Nombre;

5 int x,y;

6 public Nodo(int arg0, String arg1) {

7 super(arg0, arg1);

8 // TODO Auto-generated constructor stub

9 }

10 public Nodo(int arg0) {

11 super(arg0);

12 // TODO Auto-generated constructor stub

13 }

14 public int distancia(Nodo n){

15 int j,k;

16 j = (this.x - n.x);

17 k = (this.y - n.y);

18 int re = (int) Math.sqrt((j*j)+(k*k));

19 return Math.abs(re);

20 }

21 public void addNombre(String nombre){

22 this.Nombre = nombre;

R.Sanz 141

Page 148: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

23 }

24 public String getNombre(){

25 return this.Nombre;

26 }

27 public void addCoordenas(int x, int y){

28 this.x = x;

29 this.y = y;

30 }

31 public int getX(){

32 return this.x;

33 }

34 public int getY(){

35 return this.y;

36 }

37 }

R.Sanz 142

Page 149: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

Capıtulo 10

ANEXO B: CODIGO

DESARROLLADO 2º FASE

10.1. Package Arbol

10.1.1. Arbol.java

1 package Arbol;

2

3 import java.io.IOException;

4 import java.util.ArrayList;

5 import java.util.Iterator;

6 import java.util.List;

7 import java.util.Map;

8

R.Sanz 143

Page 150: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

9 import jdd.graph.Edge;

10 import Grafo.*;

11

12 //Estructura de Arbol A*

13 public class Arbol {

14

15 Nodo salida;

16 Nodo llegada;

17 Grafo grafo;

18 Map<String, List<Edge>> tabla;

19 LTree<Elemento> arbol = new LTree<Elemento>();

20 List<LTreeNode<Elemento>> posibles = new ArrayList<LTreeNode<

Elemento>>();

21

22 public Arbol(Nodo salida,Nodo llegada,Grafo grafo){

23 this.salida = salida;

24 this.llegada = llegada;

25 this.grafo = grafo;

26 this.arbol.addRoot(new Elemento(0,salida.distancia(llegada),

salida));

27 this.arbol.root.element().setrecorrido(salida.distancia(llegada)

);

R.Sanz 144

Page 151: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

28 this.arbol.root.setChild(grafo.getChild(this.arbol.root, llegada

));

29 addList(posibles,this.arbol.root.getChild());

30 }

31

32 private void addList(List<LTreeNode<Elemento>> lis,

33 List<LTreeNode<Elemento>> hijos){

34 Iterator<LTreeNode<Elemento>> it = hijos.iterator();

35 while(it.hasNext()){

36 lis.add(it.next());

37 }

38 }

39

40 public LTreeNode<Elemento> CalcularRecorrido(){

41 LTreeNode<Elemento> nodo = this.arbol.root;

42 if (salida.getNombre()!=llegada.getNombre()){

43 nodo = selectChild(nodo);

44 while(!isEnd(nodo)){

45 nodo = selectChild(nodo);

46 }

47 }

48 return nodo;

49 }

R.Sanz 145

Page 152: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

50

51 public LTreeNode<Elemento> selectChild(LTreeNode<Elemento>padre)

{

52 LTreeNode<Elemento> nodo = new LTreeNode<Elemento>(null,null,

null);

53 LTreeNode<Elemento> nod = new LTreeNode<Elemento>(null,null,null

);

54 Iterator<LTreeNode<Elemento>> iterador = posibles.iterator();

55 int gh = 0;

56 nod = iterador.next();

57 gh = gh(nod);

58 nodo=nod;

59 int i = 0;

60 int j = 0;

61 while(iterador.hasNext()){

62 nod = iterador.next();

63 i++;

64 if (gh>gh(nod) &&

65 (nod.element().getnodo().getNombre()!=

66 padre.element().getnodo().getNombre())){

67 gh = gh(nod);

68 nodo=nod;

69 j = i;

R.Sanz 146

Page 153: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

70 }

71 }

72 System.out.println(nodo.element().getnodo().getNombre());

73

74 nodo.element().setrecorrido(gh);

75

76 i=0;

77 posibles.remove(j);

78 iterador = posibles.iterator();

79 List<Integer> borrar =new ArrayList<Integer>();

80 while(iterador.hasNext()){

81 if(iterador.next().element().getnodo().getNombre()==

82 nodo.element().getnodo().getNombre())

83 borrar.add(i);

84 i++;

85 }

86

87 Iterator <Integer >iterad = borrar.iterator();

88 while(iterad.hasNext()){

89 posibles.remove(iterad.next());

90 }

91

92 if (nodo.getChild() == null){

R.Sanz 147

Page 154: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

93 nodo.setChild(grafo.getChild(nodo, llegada));

94 addList(posibles,nodo.getChild());

95 }

96 return nodo;

97 }

98

99 public int gh (LTreeNode<Elemento> nodo){

100 return nodo.getParent().element().recorridoParcial() +

101 nodo.element().recorridoMax();

102 }

103

104 public boolean isEnd(LTreeNode<Elemento>fin){

105 return (fin.element().getnodo().getNombre() == llegada.getNombre

());

106 }

107

108 public List<Nodo> recorridoObtimo(LTreeNode<Elemento> fin){

109 List<Nodo> recorrido = new ArrayList<Nodo>();

110 LTreeNode<Elemento> posicion = fin;

111 boolean condicion = true;

112 while(condicion){

113 if (posicion.getParent()==null){

114 recorrido.add(((Elemento)posicion.element()).getnodo());

R.Sanz 148

Page 155: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

115 condicion = false;

116 }

117 else{

118 recorrido.add(((Elemento)posicion.element()).getnodo());

119 posicion = posicion.getParent();

120 }

121 }

122 return recorrido;

123 }

124 }

R.Sanz 149

Page 156: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

10.1.2. Elemento.java

1 package Arbol;

2

3 import Grafo.Nodo;

4

5 //Elementos del Algoritmo

6 public class Elemento \{

7

8 private double g;

9 private int h,recorrido;

10 private Nodo nodo;

11

12 public Elemento(double g, int h, Nodo nodo)\{

13 this.g = g;

14 this.h = h;

15 this.nodo = nodo;

16 \}

17

18 public double getG()\{

19 return this.g;

20 \}

21

22 public void setG(int g)\{

R.Sanz 150

Page 157: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

23 this.g = g;

24 \}

25

26 public int getH()\{

27 return this.h;

28 \}

29

30 public void setH(int h)\{

31 if(h>=0)

32 this.h = h;

33 else

34 this.h = -h;

35 \}

36

37 public Nodo getnodo()\{

38 return this.nodo;

39 \}

40

41 public void setnodo(Nodo nodo)\{

42 this.nodo = nodo;

43 \}

44

45 public int getrecorrido()\{

R.Sanz 151

Page 158: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

46 return this.recorrido;

47 \}

48

49 public void setrecorrido(int recorrido)\{

50 this.recorrido = recorrido;

51 \}

52

53 public int recorridoParcial()\{

54 return this.recorrido-this.h;

55 \}

56

57 public int recorridoMax()\{

58 return (int)this.g+this.h;

59 \}

60 \}

R.Sanz 152

Page 159: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

10.1.3. LTree.java

1 package Arbol;

2

3 import net.datastructures.*;

4

5 import java.util.*;

6

7 //Estructura Arbol

8 public class LTree<E> implements Tree<E> {

9 protected LTreeNode<E> root=null;

10

11 public int size() {

12 int numPos=0;

13 for (Position<E> p: positions()) ++numPos;

14 return numPos;

15 }

16

17 public boolean isEmpty() {

18 return (root==null);

19 }

20

21 public Iterator<E> iterator() {

22 List<E> list = new LinkedList<E>();

R.Sanz 153

Page 160: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

23 for (Position<E> p: positions()) list.add(p.element());

24 return list.listIterator();

25 }

26

27 public Iterable<Position<E>> positions() {

28 return nodeList(root);

29 }

30

31 public E replace(Position<E> v, E e) {

32 LTreeNode<E> node = getLTreeNode(v);

33 E tmp = node.element();

34 node.setElement(e);

35 return tmp;

36 }

37

38 public Position<E> root() throws EmptyTreeException {

39 if (isEmpty()) throw new EmptyTreeException("Tree is empty");

40 return root;

41 }

42

43 public Position<E> parent(Position<E> v) throws

InvalidPositionException,

44 BoundaryViolationException {

R.Sanz 154

Page 161: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

45 if (isRoot(v)) throw new BoundaryViolationException("At root

node");

46 LTreeNode<E> node = getLTreeNode(v);

47 return node.getParent();

48 }

49

50 public Iterable<Position<E>> children(Position<E> v) throws

51 InvalidPositionException {

52 return childrenList(v);

53 }

54

55 public boolean isInternal(Position<E> v) throws

InvalidPositionException {

56 return !isExternal(v);

57 }

58

59 public boolean isExternal(Position<E> v) throws

InvalidPositionException {

60 LTreeNode<E> node = getLTreeNode(v);

61 return false;

62 }

63

R.Sanz 155

Page 162: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

64 public boolean isRoot(Position<E> v) throws

InvalidPositionException {

65 LTreeNode<E> node = getLTreeNode(v);

66 return node==root();

67 }

68

69 public Position<E> addRoot(E e) throws NonEmptyTreeException {

70 if (root != null) {

71 throw new NonEmptyTreeException("adding new root to nonempty

tree");

72 }

73 root = new LTreeNode<E>(e,null,null);

74 return root;

75 }

76

77 public Position<E> addChild(E e,Position<E> v)

78 throws InvalidPositionException {

79 LTreeNode<E> node = getLTreeNode(v);

80 LTreeNode<E> newNode = new LTreeNode<E>(e,node,null);

81 List<LTreeNode<E>> lista = node.getChild();

82 lista.add(lista.size(), newNode);

83 node.setChild(lista);

84 return newNode;

R.Sanz 156

Page 163: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

85 }

86

87 public Position<E> addChild(Tree<E> t,Position<E> v) throws

88 InvalidPositionException, EmptyTreeException {

89 LTreeNode<E> t_node = getLTreeNode(t.root());

90 LTreeNode<E> v_node = getLTreeNode(v);

91 t_node.setParent(v_node);

92 return t_node;

93 }

94

95 private LTreeNode<E> getLTreeNode(Position<E> v)

96 throws InvalidPositionException {

97 if (v == null || !(v instanceof LTreeNode<?>)) {

98 throw new InvalidPositionException("Invalid position");

99 }

100 return (LTreeNode<E>) v;

101 }

102

103 private Iterable<Position<E>> childrenList(Position<E> v) {

104 return null;

105 }

106

R.Sanz 157

Page 164: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

107 private void addChildren(Position<E> child,List<Position<E>>

list) {

108 if (child!=null) {

109 LTreeNode<E> childNode = getLTreeNode(child);

110 list.add(child);

111 }

112 }

113

114 private List<Position<E>> nodeList(Position<E> v) {

115 List<Position<E>> list = new LinkedList<Position<E>>();

116 addAllNodes(v,list);

117 return list;

118 }

119

120 private void addAllNodes(Position<E> node,

121 List<Position<E>> list) {

122 if (node!=null) {

123 list.add(node);

124 for (Position<E> child : childrenList(node))

125 addAllNodes(child,list);

126 }

127 }

128 }

R.Sanz 158

Page 165: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

10.1.4. LTreeNode.java

1 package Arbol;

2 import java.util.List;

3

4 import net.datastructures.*;

5

6 //Nodo de Arbol

7 public class LTreeNode<E> implements Position<E> {

8 private E element;

9 private LTreeNode<E> parent;

10 private List<LTreeNode<E>> Child;

11

12 public LTreeNode(E e, LTreeNode<E> parent, List<

LTreeNode<E>> Child) {

13 this.element = e;

14 this.parent = parent;

15 this.Child = Child;

16 }

17

18 public void setElement(E element) {

19 this.element = element;

20 }

21

R.Sanz 159

Page 166: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

22 public E element() {

23 return element;

24 }

25

26 public void setParent(LTreeNode<E> parent) {

27 this.parent = parent;

28 }

29

30 public LTreeNode<E> getParent() {

31 return parent;

32 }

33

34 public void setChild(List<LTreeNode<E>> Child) {

35 this.Child = Child;

36 }

37

38 public List<LTreeNode<E>> getChild() {

39 return Child;

40 }

41 }

R.Sanz 160

Page 167: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

10.2. Package Grafica

10.2.1. AA.java

1 package Grafica;

2

3 import java.util.ArrayList;

4 import java.util.Iterator;

5 import java.util.List;

6

7 import jdd.graph.Edge;

8

9 import Arbol.Arbol;

10 import Grafo.*;

11

12 public class AA {

13

14 private Grafo grafo;

15 Nodo salida;

16 Nodo llegada;

17

18 public AA(String salida, String llegada){

19

20 grafo = new Grafo(true);

R.Sanz 161

Page 168: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

21

22 // Creacion de la linea de metro

23

24 //Estaciones

25 Nodo Villanueva_de_Castellon, Alberic, Massalaves, Montortal,

26 LAlcudia, Benimodo, Carlet, Ausias_March, Alginet,

Font_Almanguer,

27 Espioca, Omet, Picassent, Sant_Ramon, Realon, Col_legi_El_Vedat,

28 Plaza_Espanya, Turia, Campanar_La_Fe, Beniferri, Cantereria,

29 Benimamet, Les_Carolines_Fira, Campament,Paterna,Santa_Rita,

30 Fuente_del_Jarro,La_Canyada,La_Vallesa,Entrepins,El_Clot,

Montesol,

31 LEliana,Torre_del_Virrei,La_Pobla_De_Vallbona,Benaguasil_1r,

32 Benaguasil_2n,Lliria,Burjassot,Burjassot_Godella,Godella,

Rocafort,

33 Massarrojos,Montcada_Alfara,Seminari_CEU,Masies,S_Psiquiatric,

34 Betera,Torrent,Torrent_Avinguda,Picanya,Paiporta,Valencia_Sud,

35 Sant_Isidre,Safranar,Patraix,Joaquin_Sorolla,Bailen,Aragon,

36 Amistat,Ayora,Neptu,Angel_Guimera,Maritim_Serreria,Serreria,

37 Francesc_Cubells,Grau_Canyamelar,Colon,Alameda,Xativa,

38 Avinguda_del_Cid,Nou_dOctubre,Mislata,Mislata_Almassil,Faitanar,

39 Quart_de_Poblet,Salt_de_lAigua,Manises,Rosas,Aeroport,Facultats,

40 Machado,Alboraya_Palmaret,Alboraya_Peris_Arago,Almassera,

R.Sanz 162

Page 169: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

41 Meliana,Foios,Albalat_dels_Sorells,Museros,Massamagrell,

42 La_Pobla_de_Farnals,Rafelbunyol,Empalme,Benimaclet,

Mas_del_Rosari,

43 La_Coma,Tomas_y_Valiente,Santa_Gemma_Parc_Cientific_UV,

44 Ll_Llarga_Terramelar,TVV,Fira_Valencia,Vicent_Andres_Estelles,

45 Campus_de_Burjassot,Sant_Joan,La_Granja,Palau_de_Congressos,

46 Florista,Garbi ,Benicalap,Transits ,Marxalenes,Reus ,Sagunt,

47 Pont_de_Fusta,Primat_Reig,Vicent_Zaragoza ,

Universitat_Politecnica,

48 La_Carrasca,Tarongers,La_Marina ,Doctor_Lluch,La_Cadena,

49 Eugenia_Vines,Les_Arenes ,Mediterrani,Alfauir,Orriols,

50 Estadi_del_Llevant,Sant_Miquel_dels_Reis, Tossal_del_Rei;

51

52 Villanueva_de_Castellon = grafo.addNode("Villanueva_de_Castellon

", 0,0);

53 Alberic = grafo.addNode("Alberic", -1,7);

54 Massalaves = grafo.addNode("Massalaves", 0,12);

55 Montortal = grafo.addNode("Montortal", 0,18);

56 LAlcudia = grafo.addNode("LAlcudia", 1,22);

57 Benimodo = grafo.addNode("Benimodo", 0,27);

58 Carlet = grafo.addNode("Carlet", -1,29);

59 Ausias_March = grafo.addNode("Ausias_March",5,34);

60 Alginet = grafo.addNode("Alginet",9,36);

R.Sanz 163

Page 170: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

61 Font_Almanguer = grafo.addNode("Font_Almanguer",11,41);

62 Espioca = grafo.addNode("Espioca", 10,48);

63 Omet = grafo.addNode("Omet", 9,54);

64 Picassent = grafo.addNode("Picassent",11,55);

65 Sant_Ramon = grafo.addNode("Sant_Ramon",10,59);

66 Realon = grafo.addNode("Realon", 11,64);

67 Col_legi_El_Vedat = grafo.addNode("Col_legi_El_Vedat",11,67);

68 Plaza_Espanya = grafo.addNode("Plaza_Espanya", 27,76);

69 Turia = grafo.addNode("Turia", 25,78);

70 Campanar_La_Fe = grafo.addNode("Campanar_La_Fe",24,79);

71 Beniferri = grafo.addNode("Beniferri", 24,81);

72 Cantereria = grafo.addNode("Cantereria", 21,83);

73 Benimamet = grafo.addNode("Benimamet",20,83);

74 Les_Carolines_Fira = grafo.addNode("Les_Carolines_Fira",18,82);

75 Campament = grafo.addNode("Campament", 16,82);

76 Paterna = grafo.addNode("Paterna",15 ,82);

77 Santa_Rita = grafo.addNode("Santa_Rita", 12,84);

78 Fuente_del_Jarro = grafo.addNode("Fuente_del_Jarro",11,85);

79 La_Canyada = grafo.addNode("La_Canyada", 6,88);

80 La_Vallesa = grafo.addNode("La_Vallesa", 4,90);

81 Entrepins = grafo.addNode("Entrepins", 1,91);

82 El_Clot = grafo.addNode("El_Clot", -2,92);

83 Montesol = grafo.addNode("Montesol", -3,94);

R.Sanz 164

Page 171: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

84 LEliana = grafo.addNode("LEliana", -4,95);

85 Torre_del_Virrei = grafo.addNode("Torre_del_Virrei", -6,97);

86 La_Pobla_De_Vallbona = grafo.addNode("La_Pobla_De_Vallbona",

-9,99);

87 Benaguasil_1r = grafo.addNode("Benaguasil_1r",-12,102);

88 Benaguasil_2n = grafo.addNode("Benaguasil_2n", -13,103);

89 Lliria = grafo.addNode("Lliria", -15,108);

90 Burjassot = grafo.addNode("Burjassot", 22,84);

91 Burjassot_Godella = grafo.addNode("Burjassot_Godella",21,85);

92 Godella = grafo.addNode("Godella", 21,86);

93 Rocafort = grafo.addNode("Rocafort", 22,88);

94 Massarrojos = grafo.addNode("Massarrojos", 23,90);

95 Montcada_Alfara = grafo.addNode("Montcada_Alfara", 26,91);

96 Seminari_CEU = grafo.addNode("Seminari_CEU", 26,92);

97 Masies = grafo.addNode("Masies",22,96);

98 S_Psiquiatric = grafo.addNode("S_Psiquiatric", 15,99);

99 Betera = grafo.addNode("Betera",12,101);

100 Torrent = grafo.addNode("Torrent",11,69);

101 Torrent_Avinguda = grafo.addNode("Torrent_Avinguda",9,69);

102 Picanya = grafo.addNode("Picanya", 16,69);

103 Paiporta = grafo.addNode("Paiporta", 20,69);

104 Valencia_Sud = grafo.addNode("Valencia_Sud", 21,71);

105 Sant_Isidre = grafo.addNode("Sant_Isidre", 23,73);

R.Sanz 165

Page 172: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

106 Safranar = grafo.addNode("Safranar", 24,73);

107 Patraix = grafo.addNode("Patraix", 25,74);

108 Joaquin_Sorolla = grafo.addNode("Joaquin_Sorolla", 27,74);

109 Bailen = grafo.addNode("Bailen",28,75);

110 Aragon = grafo.addNode("Aragon", 32,77);

111 Amistat = grafo.addNode("Amistat",33,77);

112 Ayora = grafo.addNode("Ayora",35,76);

113 Neptu = grafo.addNode("Neptu", 38,77);

114 Angel_Guimera = grafo.addNode("Angel_Guimera", 26,77);

115 Maritim_Serreria = grafo.addNode("Maritim_Serreria",36,77);

116 Serreria = grafo.addNode("Serreria",36,78);

117 Francesc_Cubells = grafo.addNode("Francesc_Cubells",37,77);

118 Grau_Canyamelar = grafo.addNode("Grau_Canyamelar",37,77);

119 Colon = grafo.addNode("Colon",29,77);

120 Alameda = grafo.addNode("Alameda",30,77);

121 Xativa = grafo.addNode("Xativa",28,76);

122 Avinguda_del_Cid = grafo.addNode("Avinguda_del_Cid",24,76);

123 Nou_dOctubre = grafo.addNode("Nou_dOctubre",22,77);

124 Mislata = grafo.addNode("Mislata", 20,77);

125 Mislata_Almassil = grafo.addNode("Mislata_Almassil", 19,78);

126 Faitanar = grafo.addNode("Faitanar", 17,78);

127 Quart_de_Poblet = grafo.addNode("Quart_de_Poblet",15,79);

128 Salt_de_lAigua = grafo.addNode("Salt_de_lAigua",13,79);

R.Sanz 166

Page 173: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

129 Manises = grafo.addNode("Manises",12,80);

130 Rosas = grafo.addNode("Rosas",10,81);

131 Aeroport = grafo.addNode("Aeroport",8,81);

132 Facultats = grafo.addNode("Facultats",31,78);

133 Machado = grafo.addNode("Machado", 32,81);

134 Alboraya_Palmaret = grafo.addNode("Alboraya_Palmaret", 32,82);

135 Alboraya_Peris_Arago = grafo.addNode("Alboraya_Peris_Arago",

33,83);

136 Almassera = grafo.addNode("Almassera", 35,85);

137 Meliana = grafo.addNode("Meliana", 33,88);

138 Foios = grafo.addNode("Foios", 33,90);

139 Albalat_dels_Sorells = grafo.addNode("Albalat_dels_Sorells"

,34,92);

140 Museros = grafo.addNode("Museros",35,95);

141 Massamagrell = grafo.addNode("Massamagrell",37,97);

142 La_Pobla_de_Farnals = grafo.addNode("La_Pobla_de_Farnals",

37,98);

143 Rafelbunyol = grafo.addNode("Rafelbunyol", 37,100);

144 Empalme = grafo.addNode("Empalme", 23,82);

145 Benimaclet = grafo.addNode("Benimaclet",31,79);

146 Mas_del_Rosari = grafo.addNode("Mas_del_Rosari", 15,89);

147 La_Coma = grafo.addNode("La_Coma", 17,88);

148 Tomas_y_Valiente = grafo.addNode("Tomas_y_Valiente", 20,87);

R.Sanz 167

Page 174: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

149 Santa_Gemma_Parc_Cientific_UV = grafo.addNode("

Santa_Gemma_Parc_Cientific UV", 20,86);

150 Ll_Llarga_Terramelar = grafo.addNode("Ll_Llarga_Terramelar",

16,89);

151 TVV = grafo.addNode("TVV",20,85);

152 Fira_Valencia = grafo.addNode("Fira_Valencia",18,84);

153 Vicent_Andres_Estelles = grafo.addNode("Vicent_Andres_Estelles",

19,85);

154 Campus_de_Burjassot = grafo.addNode("Campus_de_Burjassot",

19,85);

155 Sant_Joan = grafo.addNode("Sant_Joan", 20,84);

156 La_Granja = grafo.addNode("La_Granja", 21,84);

157 Palau_de_Congressos = grafo.addNode("Palau_de_Congressos",

24,83);

158 Florista = grafo.addNode("Florista", 24,83);

159 Garbi = grafo.addNode("Garbi", 24,81);

160 Benicalap = grafo.addNode("Benicalap", 26,81);

161 Transits = grafo.addNode("Transits", 26,81);

162 Marxalenes = grafo.addNode("Marxalenes", 26,81);

163 Reus = grafo.addNode("Reus", 27,81);

164 Sagunt = grafo.addNode("Sagunt", 28,81);

165 Pont_de_Fusta = grafo.addNode("Pont_de_Fusta", 29,79);

166 Primat_Reig = grafo.addNode("Primat_Reig", 30,81);

R.Sanz 168

Page 175: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

167 Vicent_Zaragoza = grafo.addNode("Vicent_Zaragoza", 32,79);

168 Universitat_Politecnica = grafo.addNode("Universitat_Politecnica

", 33,79);

169 La_Carrasca = grafo.addNode("La_Carrasca", 34,79);

170 Tarongers = grafo.addNode("Tarongers", 35,79);

171 La_Marina = grafo.addNode("La_Marina", 37,78);

172 Doctor_Lluch = grafo.addNode("Doctor_Lluch", 37,77);

173 La_Cadena = grafo.addNode("La_Cadena", 37,78);

174 Eugenia_Vines = grafo.addNode("Eugenia_Vines", 38,78);

175 Les_Arenes = grafo.addNode("Les_Arenes", 38,77);

176 Mediterrani = grafo.addNode("Mediterrani", 37,77);

177 Alfauir = grafo.addNode("Alfauir", 30,81);

178 Orriols = grafo.addNode("Orriols", 30,82);

179 Estadi_del_Llevant = grafo.addNode("Estadi_del_Llevant", 30,83);

180 Sant_Miquel_dels_Reis = grafo.addNode("Sant_Miquel_dels_Reis",29

,83);

181 Tossal_del_Rei = grafo.addNode("Tossal_del_Rei", 28,83);

182

183 //Trayectos

184 grafo.addEdge (Villanueva_de_Castellon, Alberic, 4.40, "linea1")

;

185 grafo.addEdge (Alberic,Massalaves,3.10, "linea1");

186 grafo.addEdge (Massalaves,Montortal,3.48, "linea1");

R.Sanz 169

Page 176: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

187 grafo.addEdge (Montortal,LAlcudia,2.45, "linea1");

188 grafo.addEdge (LAlcudia,Benimodo,3.00, "linea1");

189 grafo.addEdge (Benimodo,Carlet,1.34, "linea1");

190 grafo.addEdge (Carlet,Ausias_March,3.95, "linea1");

191 grafo.addEdge (Ausias_March, Alginet,2.39, "linea1");

192 grafo.addEdge (Alginet,Font_Almanguer,2.95, "linea1");

193 grafo.addEdge (Font_Almanguer,Espioca,3.61, "linea1");

194 grafo.addEdge (Espioca,Omet,3.74, "linea1");

195 grafo.addEdge (Omet,Picassent,1.40, "linea1");

196 grafo.addEdge (Picassent,Sant_Ramon,2.97, "linea1");

197 grafo.addEdge (Sant_Ramon,Realon,2.61, "linea1");

198 grafo.addEdge (Realon,Col_legi_El_Vedat,1.69, "linea1");

199 grafo.addEdge (Col_legi_El_Vedat,Torrent_Avinguda,1.95, "linea1"

);

200 grafo.addEdge (Col_legi_El_Vedat,Torrent_Avinguda,1.95, "linea5"

);

201 grafo.addEdge (Col_legi_El_Vedat, Torrent,1.27, "linea 1");

202 grafo.addEdge (Torrent_Avinguda,Torrent,2.11, "linea1");

203 grafo.addEdge (Torrent_Avinguda,Torrent,2.11, "linea5");

204 grafo.addEdge (Torrent,Picanya,2.29, "linea1");

205 grafo.addEdge (Torrent,Picanya,2.29, "linea5");

206 grafo.addEdge (Picanya,Paiporta,1.73, "linea1");

207 grafo.addEdge (Picanya,Paiporta,1.73, "linea5");

R.Sanz 170

Page 177: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

208 grafo.addEdge (Paiporta,Valencia_Sud,1.17, "linea1");

209 grafo.addEdge (Paiporta,Valencia_Sud,1.17, "linea5");

210 grafo.addEdge (Valencia_Sud,Sant_Isidre,1.31, "linea1");

211 grafo.addEdge (Valencia_Sud,Sant_Isidre,1.31, "linea5");

212 grafo.addEdge (Sant_Isidre,Safranar,0.33, "linea1");

213 grafo.addEdge (Sant_Isidre,Safranar,0.33, "linea5");

214 grafo.addEdge (Safranar,Patraix,0.74, "linea1");

215 grafo.addEdge (Safranar,Patraix,0.74, "linea5");

216 grafo.addEdge (Patraix,Joaquin_Sorolla,0.63, "linea1");

217 grafo.addEdge (Patraix,Joaquin_Sorolla,0.63, "linea5");

218 grafo.addEdge (Joaquin_Sorolla,Plaza_Espanya,0.80, "linea1");

219 grafo.addEdge (Plaza_Espanya,Angel_Guimera,0.55, "linea1");

220 grafo.addEdge (Angel_Guimera,Turia,1.09, "linea1");

221 grafo.addEdge (Turia,Campanar_La_Fe,0.73, "linea1");

222 grafo.addEdge (Campanar_La_Fe,Beniferri,0.76, "linea1");

223 grafo.addEdge (Beniferri,Empalme,1.55, "linea1");

224 grafo.addEdge (Empalme,Cantereria,0.99, "linea1");

225 grafo.addEdge (Cantereria,Benimamet,0.65, "linea1");

226 grafo.addEdge (Benimamet,Les_Carolines_Fira,0.65, "linea1");

227 grafo.addEdge (Les_Carolines_Fira,Campament,1.02, "linea1");

228 grafo.addEdge (Campament,Paterna,0.69, "linea1");

229 grafo.addEdge (Paterna,Santa_Rita,1.38, "linea1");

230 grafo.addEdge (Santa_Rita,Fuente_del_Jarro,1.01, "linea1");

R.Sanz 171

Page 178: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

231 grafo.addEdge (Fuente_del_Jarro, La_Canyada,2.71, "linea1");

232 grafo.addEdge (La_Canyada,La_Vallesa,1.58, "linea1");

233 grafo.addEdge (La_Vallesa,Entrepins,1.64, "linea1");

234 grafo.addEdge (Entrepins,El_Clot,1.66, "linea1");

235 grafo.addEdge (El_Clot,Montesol,0.77, "linea1");

236 grafo.addEdge (Montesol,LEliana,0.83, "linea1");

237 grafo.addEdge (LEliana,Torre_del_Virrei,1.10, "linea1");

238 grafo.addEdge (Torre_del_Virrei,La_Pobla_De_Vallbona,2.24, "

linea1");

239 grafo.addEdge (La_Pobla_De_Vallbona,Benaguasil_1r,1.76, "linea1"

);

240 grafo.addEdge (Benaguasil_1r,Benaguasil_2n,0.84, "linea1");

241 grafo.addEdge (Benaguasil_2n,Lliria,3.21, "linea1");

242 grafo.addEdge (Empalme,Burjassot,1.09, "linea1");

243 grafo.addEdge (Burjassot,Burjassot_Godella,0.79, "linea1");

244 grafo.addEdge (Burjassot_Godella,Godella,0.69, "linea1");

245 grafo.addEdge (Godella,Rocafort,1.17, "linea1");

246 grafo.addEdge (Rocafort,Massarrojos,0.96, "linea1");

247 grafo.addEdge (Massarrojos,Montcada_Alfara,1.57, "linea1");

248 grafo.addEdge (Montcada_Alfara, Seminari_CEU,0.73, "linea1");

249 grafo.addEdge (Seminari_CEU,Masies,2.51, "linea1");

250 grafo.addEdge (Masies,S_Psiquiatric,3.87, "linea1");

251 grafo.addEdge (S_Psiquiatric,Betera,1.60, "linea1");

R.Sanz 172

Page 179: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

252 grafo.addEdge (Joaquin_Sorolla,Bailen,0.65, "linea5");

253 grafo.addEdge (Bailen,Colon,0.95, "linea5");

254 grafo.addEdge (Colon,Alameda,0.57, "linea5");

255 grafo.addEdge (Colon,Alameda,0.57, "linea3");

256 grafo.addEdge (Alameda,Aragon,0.58, "linea5");

257 grafo.addEdge (Aragon,Amistat,0.65, "linea5");

258 grafo.addEdge (Amistat,Ayora,0.84, "linea5");

259 grafo.addEdge (Ayora,Maritim_Serreria,0.44, "linea5");

260 grafo.addEdge (Maritim_Serreria,Francesc_Cubells,0.38, "linea5")

;

261 grafo.addEdge (Maritim_Serreria,Francesc_Cubells,0.38, "linea6")

;

262 grafo.addEdge (Francesc_Cubells,Grau_Canyamelar,0.74, "linea5");

263 grafo.addEdge (Francesc_Cubells,Grau_Canyamelar,0.74, "linea6");

264 grafo.addEdge (Grau_Canyamelar,Neptu,0.35, "linea5");

265 grafo.addEdge (Colon,Xativa,0.67, "linea5");

266 grafo.addEdge (Colon,Xativa,0.67, "linea3");

267 grafo.addEdge (Xativa,Angel_Guimera,0.76, "linea5");

268 grafo.addEdge (Xativa,Angel_Guimera,0.76, "linea3");

269 grafo.addEdge (Angel_Guimera,Avinguda_del_Cid,1.10, "linea5");

270 grafo.addEdge (Angel_Guimera,Avinguda_del_Cid,1.10, "linea3");

271 grafo.addEdge (Avinguda_del_Cid,Nou_dOctubre,0.89, "linea5");

272 grafo.addEdge (Avinguda_del_Cid,Nou_dOctubre,0.89, "linea3");

R.Sanz 173

Page 180: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

273 grafo.addEdge (Nou_dOctubre,Mislata,1, "linea5");

274 grafo.addEdge (Nou_dOctubre,Mislata,1, "linea3");

275 grafo.addEdge (Mislata,Mislata_Almassil,0.58, "linea5");

276 grafo.addEdge (Mislata,Mislata_Almassil,0.58, "linea3");

277 grafo.addEdge (Mislata_Almassil,Faitanar,0.78, "linea5");

278 grafo.addEdge (Faitanar,Quart_de_Poblet,0.85, "linea5");

279 grafo.addEdge (Quart_de_Poblet,Salt_de_lAigua,0.87,"linea5");

280 grafo.addEdge (Salt_de_lAigua,Manises,0.92, "linea5");

281 grafo.addEdge (Manises,Rosas,0.79, "linea5");

282 grafo.addEdge (Rosas,Aeroport,0.66, "linea5");

283 grafo.addEdge (Mislata_Almassil,Faitanar,0.78, "linea3");

284 grafo.addEdge (Faitanar,Quart_de_Poblet,0.85, "linea3");

285 grafo.addEdge (Quart_de_Poblet,Salt_de_lAigua,0.87,"linea3");

286 grafo.addEdge (Salt_de_lAigua,Manises,0.92, "linea3");

287 grafo.addEdge (Manises,Rosas,0.79, "linea3");

288 grafo.addEdge (Rosas,Aeroport,0.66, "linea3");

289 grafo.addEdge (Alameda,Facultats,0.61, "linea3");

290 grafo.addEdge (Facultats,Benimaclet,0.89, "linea3");

291 grafo.addEdge (Benimaclet,Machado,0.88, "linea3");

292 grafo.addEdge (Machado,Alboraya_Palmaret,0.49, "linea3");

293 grafo.addEdge (Alboraya_Palmaret,Alboraya_Peris_Arago,0.63, "

linea3");

294 grafo.addEdge (Alboraya_Peris_Arago, Almassera,1.30, "linea3");

R.Sanz 174

Page 181: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

295 grafo.addEdge (Almassera,Meliana,1.86, "linea3");

296 grafo.addEdge (Meliana,Foios,1.09, "linea3");

297 grafo.addEdge (Foios,Albalat_dels_Sorells,1.03, "linea3");

298 grafo.addEdge (Albalat_dels_Sorells,Museros,1.96, "linea3");

299 grafo.addEdge (Museros,Massamagrell,1.21, "linea3");

300 grafo.addEdge (Massamagrell,La_Pobla_de_Farnals,1.01, "linea3");

301 grafo.addEdge (La_Pobla_de_Farnals,Rafelbunyol,1.05, "linea3");

302 grafo.addEdge (Grau_Canyamelar,Mediterrani,0.43, "linea6");

303 grafo.addEdge (Mediterrani,Doctor_Lluch,0.36, "linea6");

304 grafo.addEdge (Mediterrani,Doctor_Lluch,0.36, "linea4");

305 grafo.addEdge (Doctor_Lluch, La_Marina,0.40, "linea6");

306 grafo.addEdge (Doctor_Lluch, La_Marina,0.40, "linea4");

307 grafo.addEdge (La_Marina, La_Cadena,0.35, "linea6");

308 grafo.addEdge (La_Marina, La_Cadena,0.35, "linea4");

309 grafo.addEdge (La_Cadena,Eugenia_Vines,0.36, "linea6");

310 grafo.addEdge (La_Cadena,Eugenia_Vines,0.36, "linea4");

311 grafo.addEdge (Eugenia_Vines,Les_Arenes,0.53, "linea6");

312 grafo.addEdge (Eugenia_Vines,Les_Arenes,0.53, "linea4");

313 grafo.addEdge (Les_Arenes,Mediterrani,0.32, "linea6");

314 grafo.addEdge (Les_Arenes,Mediterrani,0.32, "linea4");

315 grafo.addEdge (La_Cadena,Serreria,0.48, "linea6");

316 grafo.addEdge (La_Cadena,Serreria,0.48, "linea4");

317 grafo.addEdge(Benimaclet, Serreria, 2.87, "linea6");

R.Sanz 175

Page 182: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

318 grafo.addEdge (Serreria,Tarongers,0.51, "linea6");

319 grafo.addEdge (Serreria,Tarongers,0.51, "linea4");

320 grafo.addEdge (Tarongers,La_Carrasca,0.46, "linea6");

321 grafo.addEdge (Tarongers,La_Carrasca,0.46, "linea4");

322 grafo.addEdge (La_Carrasca,Universitat_Politecnica,0.51, "linea6

");

323 grafo.addEdge (La_Carrasca,Universitat_Politecnica,0.51, "linea4

");

324 grafo.addEdge (Universitat_Politecnica,Vicent_Zaragoza,0.67, "

linea6");

325 grafo.addEdge (Universitat_Politecnica,Vicent_Zaragoza,0.67, "

linea4");

326 grafo.addEdge (Vicent_Zaragoza,Benimaclet,0.72, "linea6");

327 grafo.addEdge (Vicent_Zaragoza,Benimaclet,0.72, "linea4");

328 grafo.addEdge (Benimaclet,Primat_Reig,0.46, "linea6");

329 grafo.addEdge (Benimaclet,Primat_Reig,0.46, "linea4");

330 grafo.addEdge (Primat_Reig,Alfauir,0.52, "linea6");

331 grafo.addEdge (Alfauir,Orriols,0.5, "linea6");

332 grafo.addEdge (Orriols,Estadi_del_Llevant,0.52, "linea6");

333 grafo.addEdge (Estadi_del_Llevant,Sant_Miquel_dels_Reis,0.50, "

linea6");

334 grafo.addEdge (Sant_Miquel_dels_Reis,Tossal_del_Rei,0.48, "

linea6");

R.Sanz 176

Page 183: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

335 grafo.addEdge (Primat_Reig,Pont_de_Fusta,0.84, "linea4");

336 grafo.addEdge (Pont_de_Fusta,Sagunt,1, "linea4");

337 grafo.addEdge (Sagunt,Reus,0.37, "linea4");

338 grafo.addEdge (Reus,Marxalenes,0.65, "linea4");

339 grafo.addEdge (Marxalenes,Transits,0.29, "linea4");

340 grafo.addEdge (Transits,Benicalap,0.31, "linea4");

341 grafo.addEdge (Benicalap,Garbi,0.42, "linea4");

342 grafo.addEdge (Garbi,Florista,0.32, "linea4");

343 grafo.addEdge (Florista,Palau_de_Congressos,0.42, "linea4");

344 grafo.addEdge (Palau_de_Congressos,Empalme,0.36, "linea4");

345 grafo.addEdge (Empalme,La_Granja,0.93, "linea4");

346 grafo.addEdge (La_Granja, Sant_Joan,0.22, "linea4");

347 grafo.addEdge (Sant_Joan,Campus_de_Burjassot,0.24, "linea4");

348 grafo.addEdge (Campus_de_Burjassot,Vicent_Andres_Estelles,0.18,

"linea4");

349 grafo.addEdge (Vicent_Andres_Estelles,Fira_Valencia,0.83, "

linea4");

350 grafo.addEdge (Vicent_Andres_Estelles,TVV,0.38, "linea4");

351 grafo.addEdge (TVV,Santa_Gemma_Parc_Cientific_UV,0.34, "linea4")

;

352 grafo.addEdge (TVV,Ll_Llarga_Terramelar,0.85, "linea4");

353 grafo.addEdge (Santa_Gemma_Parc_Cientific_UV,Tomas_y_Valiente

,0.35, "linea4");

R.Sanz 177

Page 184: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

354 grafo.addEdge (Tomas_y_Valiente,La_Coma,0.80, "linea4");

355 grafo.addEdge (La_Coma,Mas_del_Rosari,0.28, "linea4");

356

357 Iterator<Edge> l = grafo.getMap().get(salida).iterator();

358 boolean cond = true;

359 Edge tramo;

360 while(l.hasNext() && cond){

361 tramo = l.next();

362 if(((Nodo)tramo.n1).getNombre() == salida){

363 this.salida = (Nodo)tramo.n1;

364 cond = false;

365 }

366 }

367

368 l = grafo.getMap().get(llegada).iterator();

369 cond = true;

370 while(l.hasNext() && cond){

371 tramo = l.next();

372 if(((Nodo)tramo.n1).getNombre() == llegada){

373 this.llegada = (Nodo)tramo.n1;

374 cond = false;

375 }

376 }

R.Sanz 178

Page 185: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

377 }

378

379 public List<Pixel> recorridoObtimo(){

380 String linea = "";

381 String lineaA = "Linea0";

382 Arbol arbol = new Arbol(salida, llegada, grafo);

383 List<Nodo> camino = arbol.recorridoObtimo(arbol.

CalcularRecorrido());

384 List<Pixel> recorrido = new ArrayList<Pixel>();

385 Iterator<Nodo> iterador = camino.iterator();

386 Iterator<Nodo> iterador2 = camino.iterator();

387 iterador2.next();

388 while(iterador.hasNext()){

389 Nodo nodo = iterador.next();

390 Nodo nodo2;

391 if (iterador2.hasNext()){

392 nodo2 = iterador2.next();

393 Iterator<Edge> l = grafo.getMap().get(nodo.getNombre()).iterator

();

394 boolean cond = true;

395 Edge tramo;

396 while(l.hasNext() && cond){

397 tramo = l.next();

R.Sanz 179

Page 186: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

398 if(((Nodo)tramo.n2).getNombre() == nodo2.getNombre()){

399 if (cond && linea == lineaA){

400 linea = tramo.getLabel();

401 cond = false;

402 }

403 else linea = tramo.getLabel();

404 }

405 }

406 lineaA=linea;

407 }

408 else linea = "";

409 Pixel pixel = new Pixel(nodo.getX(),nodo.getY(),nodo.getNombre()

,linea);

410 recorrido.add(pixel);

411 }

412 return recorrido;

413 }

414

415 }

R.Sanz 180

Page 187: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

10.2.2. ChoiceLle.java

1 package Grafica;

2

3 import java.applet.Applet;

4 import java.awt.*;

5 import java.awt.event.*;

6

7 import javax.swing.BorderFactory;

8 import javax.swing.JScrollPane;

9 import javax.swing.border.TitledBorder;

10

11

12 public class ChoiceLle extends Applet implements ItemListener {

13 /* Declaration */

14 private LayoutManager Layout;

15 String [] Estaciones = new String [131];

16 List Selector = new List(30,false);

17 private Font Times;

18 Ventana llegada;

19

20 public ChoiceLle (Ventana llegada, JScrollPane panel, Container

contentpane) {

21 /* Declaration */

R.Sanz 181

Page 188: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

22 this.llegada = llegada;

23 int i;

24

25 /* Instantiation */

26 Times = new Font("TimeNewRoman", 20, 25);

27 Layout = new FlowLayout ();

28 Selector.setFont (Times);

29 Selector.setBounds(75, 200, 335, 90);

30

31 /* Decoration */

32 //Estaciones [0] = "Estacion de llegada ...";

33 Estaciones [1]= "Aeroport";

34 Estaciones [2]= "Alameda";

35 Estaciones [3]= "Albalat_dels_Sorells";

36 Estaciones [4]= "Alboraya_Palmaret";

37 Estaciones [5]= "Alboraya_Peris_Arago";

38 Estaciones [6]= "Alberic";

39 Estaciones [7]= "Alfauir";

40 Estaciones [8]= "Alginet";

41 Estaciones [9]= "Almassera";

42 Estaciones [10]= "Amistat";

43 Estaciones [11]= "Angel_Guimera";

44 Estaciones [12]= "Aragon";

R.Sanz 182

Page 189: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

45 Estaciones [13]= "Ausias_March";

46 Estaciones [14]= "Avinguda_del_Cid";

47 Estaciones [15]= "Ayora";

48 Estaciones [16]= "Bailen";

49 Estaciones [17]= "Benaguasil_1r";

50 Estaciones [18]= "Benaguasil_2n";

51 Estaciones [19]= "Benicalap";

52 Estaciones [20]= "Beniferri";

53 Estaciones [21]= "Benimaclet";

54 Estaciones [22]= "Benimamet";

55 Estaciones [23]= "Benimodo";

56 Estaciones [24]= "Betera";

57 Estaciones [25]= "Burjassot";

58 Estaciones [26]= "Burjassot_Godella";

59 Estaciones [27]= "Campament";

60 Estaciones [28]= "Campanar_La_Fe";

61 Estaciones [29]= "Campus_de_Burjassot";

62 Estaciones [30]= "Cantereria";

63 Estaciones [31]= "Carlet";

64 Estaciones [32]= "Col_legi_El_Vedat";

65 Estaciones [33]= "Colon";

66 Estaciones [34]= "Doctor_Lluch";

67 Estaciones [35]= "El_Clot";

R.Sanz 183

Page 190: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

68 Estaciones [36]= "Empalme";

69 Estaciones [37]= "Entrepins";

70 Estaciones [38]= "Estadi_del_Llevant";

71 Estaciones [39]= "Espioca";

72 Estaciones [40]= "Eugenia_Vinies";

73 Estaciones [41]= "Facultats";

74 Estaciones [42]= "Faitanar";

75 Estaciones [43]= "Fira_Valencia";

76 Estaciones [44]= "Florista";

77 Estaciones [45]= "Font_Almanguer";

78 Estaciones [46]= "Foios";

79 Estaciones [47]= "Francesc_Cubells";

80 Estaciones [48]= "Fuente_del_Jarro";

81 Estaciones [49]= "Garbi";

82 Estaciones [50]= "Godella";

83 Estaciones [51]= "Grau_Canyamelar";

84 Estaciones [52]= "Joaquin_Sorolla";

85 Estaciones [53]= "LAlcudia";

86 Estaciones [54]= "LEliana";

87 Estaciones [55]= "La_Cadena";

88 Estaciones [56]= "La_Canyada";

89 Estaciones [57]= "La_Carrasca";

90 Estaciones [58]= "La_Coma";

R.Sanz 184

Page 191: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

91 Estaciones [59]= "La_Granja";

92 Estaciones [60]= "La_Marina";

93 Estaciones [61]= "La_Pobla_de_Farnals";

94 Estaciones [62]= "La_Pobla_De_Vallbona";

95 Estaciones [63]= "La_Vallesa";

96 Estaciones [64]= "Les_Arenes";

97 Estaciones [65]= "Les_Carolines_Fira";

98 Estaciones [66]= "Ll_Llarga_Terramelar";

99 Estaciones [67]= "Lliria";

100 Estaciones [68]= "Machado";

101 Estaciones [69]= "Manises";

102 Estaciones [70]= "Maritim_Serreria";

103 Estaciones [71]= "Marxalenes";

104 Estaciones [72]= "Mas_del_Rosari";

105 Estaciones [73]= "Masies";

106 Estaciones [74]= "Massalaves";

107 Estaciones [75]= "Massamagrell";

108 Estaciones [76]= "Massarrojos";

109 Estaciones [77]= "Meliana";

110 Estaciones [78]= "Mediterrani";

111 Estaciones [79]= "Mislata";

112 Estaciones [80]= "Mislata_Almassil";

113 Estaciones [81]= "Montcada_Alfara";

R.Sanz 185

Page 192: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

114 Estaciones [82]= "Montesol";

115 Estaciones [83]= "Montortal";

116 Estaciones [84]= "Museros";

117 Estaciones [85]= "Neptu";

118 Estaciones [86]= "Nou_d’Octubre";

119 Estaciones [87]= "Omet";

120 Estaciones [88]= "Orriols";

121 Estaciones [89]= "Paiporta";

122 Estaciones [90]= "Palau_de_Congressos";

123 Estaciones [91]= "Paterna";

124 Estaciones [92]= "Patraix";

125 Estaciones [93]= "Picanya";

126 Estaciones [94]= "Picassent";

127 Estaciones [95]= "PlazaEspanya";

128 Estaciones [96]= "Pont_de_Fusta";

129 Estaciones [97]= "Primat_Reig";

130 Estaciones [98]= "Quart_de_Poblet";

131 Estaciones [99]= "Rafelbunyol";

132 Estaciones [100]= "Realon";

133 Estaciones [101]= "Reus";

134 Estaciones [102]= "Rocafort";

135 Estaciones [103]= "Rosas";

136 Estaciones [104]= "S_Psiquiatric";

R.Sanz 186

Page 193: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

137 Estaciones [105]= "Safranar";

138 Estaciones [106]= "Sagunt";

139 Estaciones [107]= "Salt_de_lAigua";

140 Estaciones [108]= "Sant_Isidre";

141 Estaciones [109]= "Sant_Joan";

142 Estaciones [110]= "Sant_Miquel_dels_Reis";

143 Estaciones [111]= "Sant_Ramon";

144 Estaciones [112]= "Santa_Gemma_Parc_Cientific_UV";

145 Estaciones [113]= "Santa_Rita";

146 Estaciones [114]= "Seminari_CEU";

147 Estaciones [115]= "Serreria";

148 Estaciones [116]= "Tarongers";

149 Estaciones [117]= "Tomas_y_Valiente";

150 Estaciones [118]= "Torre_del_Virrei";

151 Estaciones [119]= "Torrent";

152 Estaciones [120]= "Torrent_Avinguda";

153 Estaciones [121]= "Tossal_del_Rei";

154 Estaciones [122]= "Transits";

155 Estaciones [123]= "Turia";

156 Estaciones [124]= "TVV";

157 Estaciones [125]= "Universitat_Politecnica";

158 Estaciones [126]= "Valencia_Sud";

159 Estaciones [127]= "Vicent_Andres_Estelles";

R.Sanz 187

Page 194: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

160 Estaciones [128]= "Vicent_Zaragoza";

161 Estaciones [129]= "Villanueva_de_Castellon";

162 Estaciones [130]= "Xativa";

163

164 //for (i = 0; i < Estaciones.length; ++i) {

165 for (i = 1; i < Estaciones.length; ++i) {

166 Selector.addItem(Estaciones[i],i);

167 }

168

169 /* Location */

170 setLayout (Layout);

171 Selector.setBounds(480, 225, 375, 400);

172 panel.add(Selector);

173 contentpane.add(Selector);

174

175 /* Configuration */

176 Selector.addItemListener (this);

177

178 /* Initialization */

179 Selector.select (0);

180 this.llegada.setllegada(Estaciones[1]);

181

182 }

R.Sanz 188

Page 195: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

183

184 public void itemStateChanged(ItemEvent e) {

185 int Selection;

186 Selection = Selector.getSelectedIndex() + 1;

187 llegada.setllegada(Estaciones[Selection]);

188 System.out.println("Llegada:::::::: " + Selection);

189 }

190

191 }

R.Sanz 189

Page 196: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

10.2.3. ChoiceSal.java

1 package Grafica;

2 import java.applet.Applet;

3 import java.awt.*;

4 import java.awt.event.*;

5

6 import javax.swing.BorderFactory;

7 import javax.swing.JScrollPane;

8 import javax.swing.border.TitledBorder;

9

10

11 public class ChoiceSal extends Applet implements ItemListener {

12 /* Declaration */

13 private LayoutManager Layout;

14 String [] Estaciones = new String [131];

15 List Selector = new List(30,false);

16 private Font Times;

17 Ventana salida;

18

19 public ChoiceSal (Ventana salida, JScrollPane panel, Container

contentpane) {

20 /* Declaration */

21 this.salida = salida;

R.Sanz 190

Page 197: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

22 int i;

23

24 /* Instantiation */

25 Times = new Font("TimeNewRoman", 20, 25);

26 Layout = new FlowLayout ();

27 Selector.setFont(Times);

28 Selector.setBounds(40, 200, 335, 90);

29

30 /* Decoration */

31 //Estaciones [0] = "Estacion de Salida ...";

32 Estaciones [1]= "Aeroport";

33 Estaciones [2]= "Alameda";

34 Estaciones [3]= "Albalat_dels_Sorells";

35 Estaciones [4]= "Alboraya_Palmaret";

36 Estaciones [5]= "Alboraya_Peris_Arago";

37 Estaciones [6]= "Alberic";

38 Estaciones [7]= "Alfauir";

39 Estaciones [8]= "Alginet";

40 Estaciones [9]= "Almassera";

41 Estaciones [10]= "Amistat";

42 Estaciones [11]= "Angel_Guimera";

43 Estaciones [12]= "Aragon";

44 Estaciones [13]= "Ausias_March";

R.Sanz 191

Page 198: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

45 Estaciones [14]= "Avinguda_del_Cid";

46 Estaciones [15]= "Ayora";

47 Estaciones [16]= "Bailen";

48 Estaciones [17]= "Benaguasil_1r";

49 Estaciones [18]= "Benaguasil_2n";

50 Estaciones [19]= "Benicalap";

51 Estaciones [20]= "Beniferri";

52 Estaciones [21]= "Benimaclet";

53 Estaciones [22]= "Benimamet";

54 Estaciones [23]= "Benimodo";

55 Estaciones [24]= "Betera";

56 Estaciones [25]= "Burjassot";

57 Estaciones [26]= "Burjassot_Godella";

58 Estaciones [27]= "Campament";

59 Estaciones [28]= "Campanar_La_Fe";

60 Estaciones [29]= "Campus_de_Burjassot";

61 Estaciones [30]= "Cantereria";

62 Estaciones [31]= "Carlet";

63 Estaciones [32]= "Col_legi_El_Vedat";

64 Estaciones [33]= "Colon";

65 Estaciones [34]= "Doctor_Lluch";

66 Estaciones [35]= "El_Clot";

67 Estaciones [36]= "Empalme";

R.Sanz 192

Page 199: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

68 Estaciones [37]= "Entrepins";

69 Estaciones [38]= "Estadi_del_Llevant";

70 Estaciones [39]= "Espioca";

71 Estaciones [40]= "Eugenia_Vinies";

72 Estaciones [41]= "Facultats";

73 Estaciones [42]= "Faitanar";

74 Estaciones [43]= "Fira_Valencia";

75 Estaciones [44]= "Florista";

76 Estaciones [45]= "Font_Almanguer";

77 Estaciones [46]= "Foios";

78 Estaciones [47]= "Francesc_Cubells";

79 Estaciones [48]= "Fuente_del_Jarro";

80 Estaciones [49]= "Garbi";

81 Estaciones [50]= "Godella";

82 Estaciones [51]= "Grau_Canyamelar";

83 Estaciones [52]= "Joaquin_Sorolla";

84 Estaciones [53]= "LAlcudia";

85 Estaciones [54]= "LEliana";

86 Estaciones [55]= "La_Cadena";

87 Estaciones [56]= "La_Canyada";

88 Estaciones [57]= "La_Carrasca";

89 Estaciones [58]= "La_Coma";

90 Estaciones [59]= "La_Granja";

R.Sanz 193

Page 200: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

91 Estaciones [60]= "La_Marina";

92 Estaciones [61]= "La_Pobla_de_Farnals";

93 Estaciones [62]= "La_Pobla_De_Vallbona";

94 Estaciones [63]= "La_Vallesa";

95 Estaciones [64]= "Les_Arenes";

96 Estaciones [65]= "Les_Carolines_Fira";

97 Estaciones [66]= "Ll_Llarga_Terramelar";

98 Estaciones [67]= "Lliria";

99 Estaciones [68]= "Machado";

100 Estaciones [69]= "Manises";

101 Estaciones [70]= "Maritim_Serreria";

102 Estaciones [71]= "Marxalenes";

103 Estaciones [72]= "Mas_del_Rosari";

104 Estaciones [73]= "Masies";

105 Estaciones [74]= "Massalaves";

106 Estaciones [75]= "Massamagrell";

107 Estaciones [76]= "Massarrojos";

108 Estaciones [77]= "Meliana";

109 Estaciones [78]= "Mediterrani";

110 Estaciones [79]= "Mislata";

111 Estaciones [80]= "Mislata_Almassil";

112 Estaciones [81]= "Montcada_Alfara";

113 Estaciones [82]= "Montesol";

R.Sanz 194

Page 201: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

114 Estaciones [83]= "Montortal";

115 Estaciones [84]= "Museros";

116 Estaciones [85]= "Neptu";

117 Estaciones [86]= "Nou_d’Octubre";

118 Estaciones [87]= "Omet";

119 Estaciones [88]= "Orriols";

120 Estaciones [89]= "Paiporta";

121 Estaciones [90]= "Palau_de_Congressos";

122 Estaciones [91]= "Paterna";

123 Estaciones [92]= "Patraix";

124 Estaciones [93]= "Picanya";

125 Estaciones [94]= "Picassent";

126 Estaciones [95]= "PlazaEspanya";

127 Estaciones [96]= "Pont_de_Fusta";

128 Estaciones [97]= "Primat_Reig";

129 Estaciones [98]= "Quart_de_Poblet";

130 Estaciones [99]= "Rafelbunyol";

131 Estaciones [100]= "Realon";

132 Estaciones [101]= "Reus";

133 Estaciones [102]= "Rocafort";

134 Estaciones [103]= "Rosas";

135 Estaciones [104]= "S_Psiquiatric";

136 Estaciones [105]= "Safranar";

R.Sanz 195

Page 202: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

137 Estaciones [106]= "Sagunt";

138 Estaciones [107]= "Salt_de_lAigua";

139 Estaciones [108]= "Sant_Isidre";

140 Estaciones [109]= "Sant_Joan";

141 Estaciones [110]= "Sant_Miquel_dels_Reis";

142 Estaciones [111]= "Sant_Ramon";

143 Estaciones [112]= "Santa_Gemma_Parc_Cientific_UV";

144 Estaciones [113]= "Santa_Rita";

145 Estaciones [114]= "Seminari_CEU";

146 Estaciones [115]= "Serreria";

147 Estaciones [116]= "Tarongers";

148 Estaciones [117]= "Tomas_y_Valiente";

149 Estaciones [118]= "Torre_del_Virrei";

150 Estaciones [119]= "Torrent";

151 Estaciones [120]= "Torrent_Avinguda";

152 Estaciones [121]= "Tossal_del_Rei";

153 Estaciones [122]= "Transits";

154 Estaciones [123]= "Turia";

155 Estaciones [124]= "TVV";

156 Estaciones [125]= "Universitat_Politecnica";

157 Estaciones [126]= "Valencia_Sud";

158 Estaciones [127]= "Vicent_Andres_Estelles";

159 Estaciones [128]= "Vicent_Zaragoza";

R.Sanz 196

Page 203: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

160 Estaciones [129]= "Villanueva_de_Castellon";

161 Estaciones [130]= "Xativa";

162

163 //for (i = 0; i < Estaciones.length; ++i) {

164 for (i = 1; i < Estaciones.length; ++i) {

165 Selector.addItem(Estaciones[i],i);

166 }

167

168 /* Location */

169 setLayout (Layout);

170 Selector.setBounds(40, 225, 375, 400);

171 panel.add(Selector);

172 contentpane.add(Selector);

173

174 /* Configuration */

175 Selector.addItemListener (this);

176

177 /* Initialization */

178 Selector.select(0);

179 this.salida.setsalida(Estaciones[1]);

180

181 }

182

R.Sanz 197

Page 204: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

183 public void itemStateChanged(ItemEvent e) {

184 int Selection;

185 Selection = Selector.getSelectedIndex() + 1;

186 salida.setsalida(Estaciones[Selection]);

187 System.out.println("Salida::::::: " + Selection);

188

189 }

190

191 }

R.Sanz 198

Page 205: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

10.2.4. Dibujo.java

1 package Grafica;

2 import java.awt.*;

3 import java.awt.event.*;

4 import java.util.List;

5

6 import javax.swing.*;

7 import javax.swing.border.TitledBorder;

8

9 public class Dibujo extends Frame{

10

11 //private static JTextArea areaTexto1;

12 //private static boolean evitar2veces = false;

13 private static JPanel panel_estaciones = new JPanel();

14 private static JScrollPane panel_estaciones2;

15 private static JPanel menu_sur;

16 private static JButton btn_Salir;

17

18 private static JLabel cartel;

19 private static Font Times;

20

21 private static JLabel caja_vacia;

22 private static JLabel estacion;

R.Sanz 199

Page 206: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

23

24 public Dibujo(List<Pixel> lista){

25 super( "MetVal Project" );

26

27 //////////////////////////////////////

28 // BARRA DE MENUS SUPERIOR

29 //////////////////////////////////////

30 Menu menuArchivo = new Menu( "Archivo" );

31

32 // establecer elemento de menu Acerca de...

33 MenuItem elementoAcerca = new MenuItem( "Acerca de..." );

34 menuArchivo.add( elementoAcerca );

35 elementoAcerca.addActionListener( new ActionListener() {

36 // mostrar cuadro de dialogo de mensaje cuando el usuario

seleccione Acerca de...

37 public void actionPerformed( ActionEvent evento )

38 {

39 JOptionPane.showMessageDialog( Dibujo.this,

40 "Este software fue diseniado por: \nRicardo Sanz Hinojosas" +

41 "\n",

42 "Acerca de", JOptionPane.PLAIN_MESSAGE );

43 }

44

R.Sanz 200

Page 207: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

45 });

46

47 MenuItem elementoSalir = new MenuItem( "Salir" );

48 menuArchivo.add( elementoSalir );

49 elementoSalir.addActionListener( new ActionListener() {

50 // terminar la aplicacion cuando el usuario haga clic en

elementoSalir

51 public void actionPerformed( ActionEvent evento ) {

52 dispose();

53 panel_estaciones.removeAll();

54 estacion.removeAll();

55 caja_vacia.removeAll();

56 validate();

57

58 }

59 });

60

61 // crear barra de menus y adjuntarla a la ventana

62 MenuBar barra = new MenuBar();

63 setMenuBar( barra );

64 barra.add( menuArchivo );

65

R.Sanz 201

Page 208: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

66 // Clase anidada que permite terminar la ejecucion de la

animacion

67 this.addWindowListener( new WindowAdapter() {

68 public void windowClosing( WindowEvent evt ) {

69 dispose();

70 panel_estaciones.removeAll();

71 estacion.removeAll();

72 caja_vacia.removeAll();

73 validate();

74

75 }

76 });

77

78

79 //////////////////////////////////////

80 // MOSTRADO DEL DIBUJO

81 //////////////////////////////////////

82

83 setLayout(new BorderLayout());

84

85 cartel = new JLabel();

86 cartel.setText(" LA RUTA MAS RAPIDA ES");

87 cartel.setAlignmentX(CENTER_ALIGNMENT);

R.Sanz 202

Page 209: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

88 for (int i = lista.size() - 1 ; i >= 0; i--){

89 estacion = new JLabel(" "+ lista.get(i).getNombre()+" ",

SwingConstants.CENTER);

90 caja_vacia = new JLabel("");

91

92 estacion.setBorder(BorderFactory.createLineBorder(Color.black));

93 estacion.setPreferredSize(new Dimension(150,30));

94

95 caja_vacia.setPreferredSize(new Dimension(80,5));

96 caja_vacia.setOpaque(true);

97

98 panel_estaciones.add(estacion);

99

100 if (i > 0) {

101 switch (lista.get(i-1).getLinea()) {

102 case "linea1":

103 caja_vacia.setBackground(Color.YELLOW);

104 caja_vacia.setBorder(BorderFactory.createLineBorder(Color.yellow

));

105 break;

106

107 case "linea2":

108 caja_vacia.setBackground(Color.MAGENTA);

R.Sanz 203

Page 210: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

109 caja_vacia.setBorder(BorderFactory.createLineBorder(Color.

magenta));

110 break;

111

112 case "linea3":

113 caja_vacia.setBackground(Color.RED);

114 caja_vacia.setBorder(BorderFactory.createLineBorder(Color.red));

115 break;

116

117 case "linea4":

118 caja_vacia.setBackground(Color.BLUE);

119 caja_vacia.setBorder(BorderFactory.createLineBorder(Color.blue))

;

120 break;

121

122 case "linea5":

123 caja_vacia.setBackground(Color.GREEN);

124 caja_vacia.setBorder(BorderFactory.createLineBorder(Color.GREEN)

);

125 break;

126

127 case "linea6":

128 caja_vacia.setBackground(Color.MAGENTA);

R.Sanz 204

Page 211: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

129 caja_vacia.setBorder(BorderFactory.createLineBorder(Color.

magenta));

130 break;

131

132 }

133 panel_estaciones.add(caja_vacia, BorderLayout.NORTH);

134

135 }

136

137 }

138

139 //////////////////////////////////////

140 // MOSTRADO DEL DIBUJO

141 //////////////////////////////////////

142 panel_estaciones2 = new JScrollPane(panel_estaciones);

143 panel_estaciones2.setSize(700,100);

144

145 panel_estaciones.setBackground(Color.WHITE);

146 panel_estaciones2.setBackground(Color.WHITE);

147

148 Times = new Font("TimeNewRoman", 20, 25);

149 cartel.setFont (Times);

150 cartel.setBounds(75, 200, 335, 90);

R.Sanz 205

Page 212: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

151 cartel.setBackground(Color.WHITE);

152

153 //////////////////////////////////////

154 // MENU SUR

155 //////////////////////////////////////

156 menu_sur = new JPanel();

157 btn_Salir = new JButton("Salir");

158 btn_Salir.addActionListener(new ActionListener() {

159 public void actionPerformed(ActionEvent e){

160 dispose();

161 panel_estaciones.removeAll();

162 estacion.removeAll();

163 caja_vacia.removeAll();

164 validate();

165 }

166 });

167

168 menu_sur.add(btn_Salir);

169 menu_sur.setBackground(Color.darkGray);

170

171 add(cartel, BorderLayout.NORTH);

172 add(panel_estaciones2, BorderLayout.CENTER);

173 add(menu_sur, BorderLayout.SOUTH);

R.Sanz 206

Page 213: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

174

175 setSize( 1000, 200 );

176

177 setVisible(true);

178

179 }

180

181 }

R.Sanz 207

Page 214: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

10.2.5. menuayuda.java

1 package Grafica;

2

3 import java.awt.*;

4 import java.awt.event.*;

5 import java.net.URL;

6

7 import javax.swing.*;

8 import javax.swing.border.TitledBorder;

9

10 public class menu_ayuda extends JFrame {

11 //Menu de ayuda

12 private static JPanel p_menu_ayuda;

13 //Imagen del mapa

14 private static ImageIcon image1;

15 private static JLabel label_img1;

16 //Menu sur

17 private static JPanel p_menu_sur;

18 private static JButton btn_Salir;

19

20 public menu_ayuda() {

21 p_menu_ayuda = new JPanel();

22

R.Sanz 208

Page 215: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

23 p_menu_sur = new JPanel();

24 btn_Salir = new JButton("Salir");

25

26 URL url = menu_mapa.class.getResource("/resource/Menu_Ayuda.png"

);

27 image1 = new ImageIcon(url);

28 label_img1 = new JLabel("", image1, JLabel.CENTER);

29

30 p_menu_ayuda.add(label_img1);

31 p_menu_ayuda.setBackground(Color.darkGray);

32

33 //ADD COMPONENTS TO JPANELS

34 p_menu_sur.add(btn_Salir);

35 p_menu_sur.setBackground(Color.darkGray);

36

37 //Set Layout

38 setLayout(new BorderLayout());

39

40 //FRAME CONFIGURATION

41 add(p_menu_ayuda, BorderLayout.CENTER);

42 add(p_menu_sur, BorderLayout.SOUTH);

43

44 //LayOut Properties

R.Sanz 209

Page 216: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

45 setSize(776,684);

46 setLocationRelativeTo(null);

47 setTitle("...:: Ayuda ::...");

48 pack();

49

50 // ACTIONS CONFIGURATION

51 btn_Salir.addActionListener(new ActionListener() {

52 public void actionPerformed(ActionEvent e){

53 dispose();

54 validate();

55 }

56 });

57

58 //Ventana se cierra de la ’X’

59 addWindowListener(new WindowAdapter() {

60 @Override

61 public void windowClosing(WindowEvent e) {

62 dispose();

63 validate();

64 }

65 });

66

67 }

R.Sanz 210

Page 217: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

68 }

R.Sanz 211

Page 218: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

10.2.6. menumapa.java

1 package Grafica;

2

3 import java.awt.*;

4 import java.awt.event.*;

5 import java.net.URL;

6

7 import javax.swing.*;

8 import javax.swing.border.TitledBorder;

9

10 public class menu_mapa extends JFrame {

11 //JPanel de mostrado de mapa

12 private static JPanel p_mapa;

13 private static JScrollPane p_mapa2;

14 private static JPanel p_menu_sur;

15 private static JButton btn_Salir;

16 //Imagen del mapa

17 private static ImageIcon image1;

18 private static JLabel label_img1;

19

20 public menu_mapa() {

21 p_mapa = new JPanel();

22 p_mapa2 = new JScrollPane(p_mapa);

R.Sanz 212

Page 219: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

23 p_menu_sur = new JPanel();

24 btn_Salir = new JButton("Salir");

25

26 URL url = menu_mapa.class.getResource("/resource/metro-valencia.

jpg");

27 image1 = new ImageIcon(url);

28 label_img1 = new JLabel("", image1, JLabel.CENTER);

29

30 //ADD COMPONENTS TO JPANELS

31 p_mapa.add(label_img1);

32 p_menu_sur.add(btn_Salir);

33 p_mapa.setBackground(Color.darkGray);

34 p_menu_sur.setBackground(Color.darkGray);

35

36 p_mapa2.setSize(new Dimension(200,200));

37

38 //Set Layout

39 setLayout(new BorderLayout());

40

41 //FRAME CONFIGURATION

42 add(p_mapa2,BorderLayout.CENTER);

43 add(p_menu_sur,BorderLayout.SOUTH);

44

R.Sanz 213

Page 220: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

45 //LayOut Properties

46 setSize(700,700);

47 setLocationRelativeTo(null);

48 setTitle("...:: Mapa Zonal ::...");

49 pack();

50

51 // ACTIONS CONFIGURATION

52 btn_Salir.addActionListener(new ActionListener() {

53 public void actionPerformed(ActionEvent e){

54 dispose();

55 validate();

56 }

57 });

58

59 //Ventana se cierra de la ’X’

60 addWindowListener(new WindowAdapter() {

61 @Override

62 public void windowClosing(WindowEvent e) {

63 dispose();

64 validate();

65 }

66 });

67

R.Sanz 214

Page 221: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

68 }

69

70 }

R.Sanz 215

Page 222: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

10.2.7. Pixel.java

1 package Grafica;

2

3 public class Pixel {

4 String Nombre, linea;

5 int x,y;

6

7 public Pixel(int x, int y, String Nombre, String linea) {

8 this.x = x;

9 this.y = y;

10 this.Nombre = Nombre;

11 this.linea = linea;

12 }

13

14 public void setNombre(String nombre){

15 this.Nombre = nombre;

16 }

17

18 public String getNombre(){

19 return this.Nombre;

20 }

21

22 public void setLinea(String linea){

R.Sanz 216

Page 223: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

23 this.linea = linea;

24 }

25

26 public String getLinea(){

27 return this.linea;

28 }

29

30 public void setCoordenas(int x, int y){

31 this.x = x;

32 this.y = y;

33 }

34

35 public int getX(){

36 return this.x;

37 }

38

39 public int getY(){

40 return this.y;

41 }

42 }

R.Sanz 217

Page 224: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

10.2.8. Principal.java

1 package Grafica;

2

3 import javax.swing.*;

4

5 public class Principal {

6

7 public static void main (String Args[]) {

8 //Main object

9 Ventana frame_menu = new Ventana();

10

11 //Frame on the center of the screen

12 frame_menu.setLocationRelativeTo(null);

13

14 //Show Frame

15 frame_menu.setVisible(true);

16

17 //Close thread when click on close

18 frame_menu.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

19

20 }

21 }

R.Sanz 218

Page 225: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

10.2.9. Ventana.java

1 package Grafica;

2

3 import java.awt.*;

4 import java.awt.event.*;

5 import java.net.URL;

6

7 import javax.swing.*;

8 import javax.swing.border.TitledBorder;

9

10 public class Ventana extends JFrame {

11

12 private static JPanel pantallaEtiqueta;

13 private static JPanel menu_sur;

14 private static ImageIcon image1;

15 private static JLabel label_img1;

16

17 private static menu_mapa menu_mapa;

18 private static menu_ayuda menu_ayuda;

19

20 private static Dibujo aplicacion;

21

22 private static JMenuItem elementoAcerca;

R.Sanz 219

Page 226: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

23 private static JMenuItem elementoSalir;

24 private static JMenuItem elementoMapa;

25

26 private static JMenu menuArchivo;

27 private static JMenuBar barra;

28 private static JMenu menuVer;

29

30 private static JButton Aceptar;

31 private static JButton Salir;

32 private static JButton Mapa;

33 private static JButton Ayuda;

34

35 private static boolean hay_mapa = false;

36 private static boolean hay_ruta = false;

37 private static boolean hay_ayuda = false;

38 final JScrollPane panel;

39 final Container contentpane;

40

41 private String salida;

42 private String llegada;

43

44 public void setsalida(String salida) {

45 this.salida = salida;

R.Sanz 220

Page 227: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

46 }

47

48 public void setllegada(String llegada) {

49 this.llegada = llegada;

50 }

51

52 // configurar GUI

53 public Ventana() {

54 super("MetVal Project");

55

56 //////////////////////////////////////

57 // BARRA DE MENUS SUPERIOR

58 //////////////////////////////////////

59 // SECCION: VER

60

61 menuVer = new JMenu("Ver");

62 elementoMapa = new JMenuItem("Mapa");

63 menuVer.add(elementoMapa);

64 elementoMapa.addActionListener(new ActionListener() {

65 public void actionPerformed(ActionEvent evento) {

66 menu_mapa = new menu_mapa();

67 hay_mapa = true;

68 menu_mapa.setVisible(true);

R.Sanz 221

Page 228: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

69 validate();

70 }

71 });

72

73 // SECCION: ARCHIVO

74 menuArchivo = new JMenu("Archivo");

75

76 elementoAcerca = new JMenuItem("Acerca de...");

77 menuArchivo.add(elementoAcerca);

78 elementoAcerca.addActionListener(new ActionListener() {

79 // Mostrado de dialog cuando se pulsa

80 public void actionPerformed(ActionEvent evento) {

81 JOptionPane.showMessageDialog(Ventana.this,

82 "Este software fue diseniado por: \nRicardo Sanz Hinojosas" + "\

n", "Acerca de",

83 JOptionPane.PLAIN_MESSAGE);

84 }

85

86 });

87

88 elementoSalir = new JMenuItem("Salir");

89 menuArchivo.add(elementoSalir);

90 elementoSalir.addActionListener(new ActionListener() {

R.Sanz 222

Page 229: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

91 public void actionPerformed(ActionEvent evento) {

92 dispose();

93 if (hay_mapa == true) {

94 menu_mapa.dispose();

95 }

96 if (hay_ruta == true) {

97 aplicacion.dispose();

98 }

99 if (hay_ayuda == true) {

100 menu_ayuda.dispose();

101 }

102 dispose();

103 validate();

104 }

105 });

106

107 // crear barra de menus y adjuntarla a la ventana

108 barra = new JMenuBar();

109 setJMenuBar(barra);

110 barra.add(menuArchivo);

111 barra.add(menuVer);

112

113 panel = new JScrollPane();

R.Sanz 223

Page 230: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

114 panel.setLayout(null);

115 panel.setAutoscrolls(true);

116 contentpane = getContentPane();

117

118 ChoiceSal Salida = new ChoiceSal(this, panel, contentpane);

119 ChoiceLle Llegada = new ChoiceLle(this, panel, contentpane);

120

121 //////////////////////////////////////

122 // CABECERA DE LA APLICACION

123 //////////////////////////////////////

124 URL url = Ventana.class.getResource("/resource/met_val.png");

125 image1 = new ImageIcon(url);

126 label_img1 = new JLabel("", image1, JLabel.CENTER);

127

128 pantallaEtiqueta = new JPanel();

129 pantallaEtiqueta.add(label_img1);

130 pantallaEtiqueta.setBackground(Color.BLACK);

131

132 //////////////////////////////////////

133 // MENU INFERIOR

134 //////////////////////////////////////

135 Aceptar = new JButton("Aceptar");

136 // Aceptar.setFont(new Font("TimeNewRoman", 20, 24));

R.Sanz 224

Page 231: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

137 // Aceptar.setBounds(390, 250, 120, 40);

138 contentpane.add(Aceptar);

139 Aceptar.addActionListener(new ActionListener() {

140 public void actionPerformed(ActionEvent evento) {

141 hay_ruta = true;

142 System.out.print(salida);

143 System.out.print(" - ");

144 System.out.println(llegada);

145 AA AEstrella = new AA(salida, llegada);

146 JFrame.setDefaultLookAndFeelDecorated(false);

147 aplicacion = new Dibujo(AEstrella.recorridoObtimo());

148 // Aestrella.recor... es la lista de pixels

149 }

150 });

151

152 Ayuda = new JButton("Ayuda");

153 // Salir.setFont(new Font("TimeNewRoman", 20, 24));

154 // Salir.setBounds(390, 250, 120, 40);

155 Ayuda.addActionListener(new ActionListener() {

156 public void actionPerformed(ActionEvent evento) {

157 menu_ayuda = new menu_ayuda();

158 hay_ayuda = true;

159 menu_ayuda.setVisible(true);

R.Sanz 225

Page 232: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

160 validate();

161 }

162 });

163

164 Salir = new JButton("Salir");

165 // Salir.setFont(new Font("TimeNewRoman", 20, 24));

166 // Salir.setBounds(390, 250, 120, 40);

167 Salir.addActionListener(new ActionListener() {

168 public void actionPerformed(ActionEvent evento) {

169 dispose();

170 if (hay_mapa == true) {

171 menu_mapa.dispose();

172 }

173 if (hay_ruta == true) {

174 aplicacion.dispose();

175 }

176 if (hay_ayuda == true) {

177 menu_ayuda.dispose();

178 }

179 dispose();

180 validate();

181 }

182 });

R.Sanz 226

Page 233: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

183

184 menu_sur = new JPanel();

185

186 menu_sur.add(Aceptar);

187 menu_sur.add(Salir);

188 menu_sur.add(Ayuda);

189 menu_sur.setBackground(Color.DARK_GRAY);

190

191 //////////////////////////////////////

192 // CONFIGURACION DE CONTENTPANE

193 //////////////////////////////////////

194 //contentpane.setBackground(Color.lightGray);

195 contentpane.setBackground(new Color(205, 19, 42));

196

197 //////////////////////////////////////

198 // CONFIGURACION DEL FRAME

199 //////////////////////////////////////

200

201 //Set Layout

202 setLayout(new BorderLayout());

203

204 add(pantallaEtiqueta, BorderLayout.NORTH);

205 add(menu_sur, BorderLayout.SOUTH);

R.Sanz 227

Page 234: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

206 setSize(900, 750);

207 setLocationRelativeTo(null);

208

209 }

210

211 }

R.Sanz 228

Page 235: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

10.3. Package Grafo

10.3.1. Grafo.java

1 package Grafo;

2

3 import java.util.ArrayList;

4 import java.util.HashMap;

5 import java.util.Iterator;

6 import java.util.List;

7 import java.util.Map;

8

9 import Arbol.*;

10 import Grafica.Pixel;

11 import jdd.graph.*;

12

13 //Grafo para los calculos de recorrido.

14 public class Grafo extends jdd.graph.Graph{

15 List<Nodo> nodos = new ArrayList<Nodo>();;

16 List<Edge> edges = new ArrayList<Edge>();;

17 Map<String, List<Edge>> tabla = new HashMap<String, List<Edge

>>();;

18

19 public Grafo(boolean arg0) {

R.Sanz 229

Page 236: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

20 super(arg0);

21 }

22

23 public Nodo addNode (String nombre, int x, int y){

24 Nodo nodo = new Nodo(10);

25 nodos.add(nodo);

26 nodo.addNombre(nombre);

27 nodo.addCoordenas(x, y);

28 return nodo;

29 }

30

31 public Edge addEdge (Nodo n1, Nodo n2, double d, String linea){

32 Edge arista1 = new Edge(n1,n2,(int) d);

33 edges.add(arista1);

34 arista1.setWeight(d);

35 arista1.setLabel(linea);

36 if (tabla.isEmpty()){

37 tabla.put(n1.getNombre(), new ArrayList<Edge>());

38 tabla.put(n2.getNombre(), new ArrayList<Edge>());

39 }

40 if (tabla.containsKey(n1.getNombre())){

41 List<Edge> lista = tabla.get(n1.getNombre());

42 lista.add(arista1);

R.Sanz 230

Page 237: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

43 tabla.remove(n1.getNombre());

44 tabla.put(n1.getNombre(),lista);

45 }

46 else{

47 List<Edge> lista = new ArrayList<Edge>();

48 lista.add(arista1);

49 tabla.put(n1.getNombre(),lista);

50 }

51 Edge arista2 = super.addEdge(n2, n1);

52 arista2.setWeight(d);

53 arista2.setLabel(linea);

54 if (tabla.containsKey(n2.getNombre())){

55 List<Edge> lista = tabla.get(n2.getNombre());

56 lista.add(arista2);

57 tabla.remove(n2.getNombre());

58 tabla.put(n2.getNombre(),lista);

59 }

60 else{

61 List<Edge> lista = new ArrayList<Edge>();

62 lista.add(arista2);

63 tabla.put(n2.getNombre(),lista);

64 }

65 return arista1;

R.Sanz 231

Page 238: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

66 }

67

68 public List<LTreeNode<Elemento>> getChild(LTreeNode<Elemento>

nodo, Nodo fin){

69 List <LTreeNode<Elemento>> lista = new ArrayList<LTreeNode<

Elemento>>();

70 List<Edge> aristas = tabla.get(nodo.element().getnodo().

getNombre());

71 Iterator<Edge> iterador = aristas.iterator();

72 String nombre = "";

73 if (nodo.getParent() != null){

74 nombre = nodo.getParent().element().getnodo().getNombre();

75 }

76 while(iterador.hasNext()){

77 Edge arista = iterador.next();

78 Nodo hijo = (Nodo) arista.n2;

79 if (hijo.getNombre()!= nombre){

80 Elemento elemento = new Elemento(arista.weight,hijo.distancia(

fin),hijo);

81 LTreeNode<Elemento> node = new LTreeNode<Elemento>(elemento,nodo

,null);

82 lista.add(node);

83 }

R.Sanz 232

Page 239: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

84 }

85 return lista;

86 }

87

88 public Map<String, List<Edge>> getMap (){

89 return this.tabla;

90 }

91 }

R.Sanz 233

Page 240: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

10.3.2. Nodo.java

1 package Grafo;

2

3 import java.util.ArrayList;

4 import java.util.HashMap;

5 import java.util.Iterator;

6 import java.util.List;

7 import java.util.Map;

8

9 import Arbol.*;

10 import Grafica.Pixel;

11 import jdd.graph.*;

12

13 //Grafo para los calculos de recorrido.

14 public class Grafo extends jdd.graph.Graph{

15 List<Nodo> nodos = new ArrayList<Nodo>();;

16 List<Edge> edges = new ArrayList<Edge>();;

17 Map<String, List<Edge>> tabla = new HashMap<String, List<Edge

>>();;

18

19 public Grafo(boolean arg0) {

20 super(arg0);

21 }

R.Sanz 234

Page 241: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

22

23 public Nodo addNode (String nombre, int x, int y){

24 Nodo nodo = new Nodo(10);

25 nodos.add(nodo);

26 nodo.addNombre(nombre);

27 nodo.addCoordenas(x, y);

28 return nodo;

29 }

30

31 public Edge addEdge (Nodo n1, Nodo n2, double d, String linea){

32 Edge arista1 = new Edge(n1,n2,(int) d);

33 edges.add(arista1);

34 arista1.setWeight(d);

35 arista1.setLabel(linea);

36 if (tabla.isEmpty()){

37 tabla.put(n1.getNombre(), new ArrayList<Edge>());

38 tabla.put(n2.getNombre(), new ArrayList<Edge>());

39 }

40 if (tabla.containsKey(n1.getNombre())){

41 List<Edge> lista = tabla.get(n1.getNombre());

42 lista.add(arista1);

43 tabla.remove(n1.getNombre());

44 tabla.put(n1.getNombre(),lista);

R.Sanz 235

Page 242: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

45 }

46 else{

47 List<Edge> lista = new ArrayList<Edge>();

48 lista.add(arista1);

49 tabla.put(n1.getNombre(),lista);

50 }

51 Edge arista2 = super.addEdge(n2, n1);

52 arista2.setWeight(d);

53 arista2.setLabel(linea);

54 if (tabla.containsKey(n2.getNombre())){

55 List<Edge> lista = tabla.get(n2.getNombre());

56 lista.add(arista2);

57 tabla.remove(n2.getNombre());

58 tabla.put(n2.getNombre(),lista);

59 }

60 else{

61 List<Edge> lista = new ArrayList<Edge>();

62 lista.add(arista2);

63 tabla.put(n2.getNombre(),lista);

64 }

65 return arista1;

66 }

67

R.Sanz 236

Page 243: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

68 public List<LTreeNode<Elemento>> getChild(LTreeNode<Elemento>

nodo, Nodo fin){

69 List <LTreeNode<Elemento>> lista = new ArrayList<LTreeNode<

Elemento>>();

70 List<Edge> aristas = tabla.get(nodo.element().getnodo().

getNombre());

71 Iterator<Edge> iterador = aristas.iterator();

72 String nombre = "";

73 if (nodo.getParent() != null){

74 nombre = nodo.getParent().element().getnodo().getNombre();

75 }

76 while(iterador.hasNext()){

77 Edge arista = iterador.next();

78 Nodo hijo = (Nodo) arista.n2;

79 if (hijo.getNombre()!= nombre){

80 Elemento elemento = new Elemento(arista.weight,hijo.distancia(

fin),hijo);

81 LTreeNode<Elemento> node = new LTreeNode<Elemento>(elemento,nodo

,null);

82 lista.add(node);

83 }

84 }

85 return lista;

R.Sanz 237

Page 244: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Escuela Tecnica Superior de Ingenieros Informaticos Enero 2016

86 }

87

88 public Map<String, List<Edge>> getMap (){

89 return this.tabla;

90 }

91 }

R.Sanz 238

Page 245: TFG RICARDO SANZ - Archivo Digital UPMoa.upm.es › 45606 › 1 › TFG_RICARDO_SANZ_HINOJOSAS.pdf · 2.1.2. SEGUNDA FASE 1. Reanalisis del problema partiendo de los datos obtenidos

Este documento esta firmado porFirmante CN=tfgm.fi.upm.es, OU=CCFI, O=Facultad de Informatica - UPM,

C=ES

Fecha/Hora Mon Jan 09 01:14:03 CET 2017

Emisor delCertificado

[email protected], CN=CA Facultad deInformatica, O=Facultad de Informatica - UPM, C=ES

Numero de Serie 630

Metodo urn:adobe.com:Adobe.PPKLite:adbe.pkcs7.sha1 (AdobeSignature)