UNIVERSIDAD NACIONAL DE LOJA Área de la Energía, las Industrias y los Recursos Naturales no Renovables Carrera de Ingeniería en Sistemas

TEMA:

“CONSTRUCCIÓN DE UN SISTEMA DE DIÁLOGO COMPLETO, EN LENGUA ESPAÑOLA, PARA LA BIBLIOTECA BRAILLE DEL HONORABLE CONSEJO PROVINCIAL DE LOJA, EL CUAL SE ENCARGARA DE PROPORCIONAR INFORMACIÓN BIBLIOGRÁFICA A LAS ESTUDIANTES NO VIDENTES” Tesis previa a la obtención del Título de Ingeniero en Sistemas

Autor:

José Ubertino Jaramillo Zhingre.

Director: Ing. Wilson Vélez

LOJA - ECUADOR

2011

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

CERTIFICACIÓN

Ing. Wilson Vélez

DOCENTE DE LA CARRERA DE INGENIERÍA EN SISTEMAS DE LA UNIVERSIDAD NACIONAL DE LOJA, DIRECTOR DE TESIS

C E R T I F I C A:

Que el Señor José Ubertino Jaramillo Zhingre, realizo el trabajo de investigación titulado “CONSTRUCCIÓN DE UN SISTEMA DE DIÁLOGO COMPLETO, EN LENGUA ESPAÑOLA, PARA LA BIBLIOTECA BRAILLE DEL HONORABLE CONSEJO PROVINCIAL DE LOJA, EL CUAL SE ENCARGARA DE PROPORCIONAR INFORMACIÓN BIBLIOGRÁFICA A LAS ESTUDIANTES NO VIDENTES” bajo mi dirección y asesoramiento, mismo que fue revisado, enmendado y corregido minuciosamente. En virtud que la Tesis reúne, a satisfacción, las cualidades de fondo y forma exigidas para un trabajo de este nivel, autorizo su presentación, sustentación y defensa ante el tribunal respectivo.

Loja, Septiembre del 2011

…………………………………………. Ing. Wilson Vélez DIRECTOR DE TESIS

II

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

AUTORÍA

Las ideas conceptos y opiniones que se exponen en el trabajo de investigación que se presenta, son de absoluta responsabilidad del autor, excepto las que se encuentran debidamente citadas.

………………………………….

José Ubertino Jaramillo Zhingre

III

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

AGRADECIMIENTO

Agradezco primeramente a Dios por haberme permitido llegar hasta donde estoy ya que Él es la fortaleza y la luz que me guía en los senderos de la vida, ya que sin Él no soy nada.

A la Universidad Nacional de Loja, Centro Educativo donde se me permitió consolidar mi formación académica, gratitud profunda a la Carrera de Ingeniería en Sistemas, por los conocimientos en ella recibidos.

Agradecimientos especiales a la Lic. Sandra Carrera, por sus consejos y colaboración incondicional en la realización de las pruebas del Sistema en la Biblioteca Braille Parlante del Honorable Consejo Provincial de Loja

A mis familiares que estuvieron ahí cuando más los necesite, amigos, compañeros y todas las personas que de una u otra manera ha contribuido en el desarrollo de este gran sueño.

Gracias a todos Uds.

IV

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

DEDICATORIA.

A mis padres, que en todo momento de la vida me brindaron su apoyo incondicional y me enseñaron que en este mundo todo se puede alcanzar mientras seas constante y no te des por vencido jamás, a mis hermanas, amigos y todos los que estuvieron presentes cuando más los necesite.

José

V

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

CESIÓN DE DERECHOS

José Ubertino Jaramillo Zhingre, autor de la tesis denominada “CONSTRUCCIÓN DE UN SISTEMA DE DIÁLOGO COMPLETO, EN LENGUA ESPAÑOLA, PARA LA BIBLIOTECA BRAILLE DEL HONORABLE CONSEJO PROVINCIAL DE LOJA, EL CUAL SE ENCARGARA DE PROPORCIONAR INFORMACIÓN BIBLIOGRÁFICA A LAS ESTUDIANTES NO VIDENTES”, cedo los derechos correspondientes a la mencionada tesis a favor de la Universidad Nacional de Loja, para que ésta institución haga uso en lo que creyere conveniente.

Jose Ubertino Jaramillo Zhingre

VI

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

RESUMEN

Los sistemas de diálogo son programas informáticos que se diseñan con la finalidad de emular a un ser humano en un diálogo oral con otra persona. Actualmente, diversas empresas e instituciones usan estos sistemas para proporcionar información y otros servicios de forma automática. En la presente tesis, titulada “CONSTRUCCIÓN DE UN SISTEMA DE DIÁLOGO COMPLETO, EN LENGUA ESPAÑOLA, PARA LA BIBLIOTECA BRAILLE DEL HONORABLE CONSEJO PROVINCIAL DE LOJA, EL CUAL SE ENCARGARA DE PROPORCIONAR INFORMACIÓN BIBLIOGRÁFICA A LAS ESTUDIANTES NO VIDENTES”, se expone el estado del arte en el área de los sistemas de diálogo y se presenta el trabajo realizado en el diseño e implementación de los módulos de un sistema de diálogo determinado. La tesis aporta el desarrollo de un sistema de dialogo con entrada y salida en lengua española y para una tarea de Dominio semántico restringido. Dicho sistema está constituido por los módulos de comprensión del Lenguaje, gestor del dialogo y de generación de respuestas en lenguaje natural. Dado el objetivo central de la tesis, el desarrollo del módulo gestor de diálogo ha sido el principal trabajo ya que es la base fundamental de todo sistema de dialogo.

La aplicación está orientada al sector de bibliotecas Braille para personas no videntes, la misma que permitirá principalmente poder consultar a un estudiante no vidente sobre algún tema en particular, dicho tema dependerá de si se encuentra o no el libro ingresado en la Base de datos, además permitirá la administración de libros permitiendo agregar, modificar o actualizar su contenido facilitando así la usabilidad del sistema ya que no se quedara limitado a un dominio inicial sino que este ira incrementando su dominio de acuerdo a lo existente en su base de datos, además cuenta con un módulo generador de estadísticas sobre qué temas son mas consultados, que materias son más frecuentes y el número de consultas que se generan permitiendo así la administración y adquisición correcta y adecuada de libros de acuerdo a lo que requieren los estudiantes.

Como parte fundamental para el desarrollo de este proceso de investigación, se empezó con la determinación del tema, planeamiento de los objetivos y la selección de una metodología la cual permitió la planificación de procedimientos que se llevaron a cabo mediante métodos, técnicas, análisis, diseño, programación y validación del software. La metodología de desarrollo de software seleccionada para el presente proyecto fue ICONIX, la misma que hace un fuerte uso del UML lo que permitirá realizar un mejor diseño de la aplicación.

VII

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

ABSTRACT

Dialogue systems are computer programs that are designed in order to emulate a human being in a spoken dialogue with another person. Currently, several companies and institutions use these systems to provide information and other services automatically. In this thesis, entitled "CONSTRUCTION OF A COMPLETE SYSTEM OF DIALOGUE IN SPANISH LANGUAGE, BRAILLE LIBRARY FOR THE PROVINCIAL COUNCIL OF THE HONORABLE of Loja, which is responsible BIBLIOGRAPHIC INFORMATION PROVIDED TO STUDENTS Blind," outlines the state of art in the area of dialogue systems and presents the work done in the design and implementation of the modules of a given dialog. The thesis provides the development of a system with input and output dialogue in Spanish and for a task restricted semantic domain. This system consists of modules Language understanding, dialogue manager and response generation in natural language. Given the central aim of the thesis, the development of dialogue management module has been the main work and that is the foundation of any system of dialogue.

The sector-oriented application is Braille library for the blind, the same that will mainly be able to consult a blind student on a particular issue, this issue will depend on whether or not the book is entered into the database, management will also allow books to add, modify or update the content thus facilitating the usability of the system and not be limited to an initial domain but this will increment its domain according to your existing database, also has with a statistics generator module which issues are top lists, which are more common materials and the number of queries that are generated allowing acquisition management and proper and adequate books according to what students need.

As a key part in developing this research process began with the determination of the issue, planning objectives and the selection of a methodology which allowed for the planning of procedures performed using methods, techniques, analysis, design programming and software validation. The software development methodology selected for this project was ICONIX, it makes heavy use of UML, which allow for a better design of the application.

VIII

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

INDICE GENERAL

CERTIFICACIÓN ...... II AUTORÍA ...... III AGRADECIMIENTO ...... IV DEDICATORIA...... V CESIÓN DE DERECHOS ...... VI RESUMEN ...... VII ABSTRACT ...... VIII INDICE GENERAL ...... IX INDICE DE FIGURAS ...... XV INDICE DE TABLAS ...... XVII 1. INTRODUCCION ...... 19 2. METODOLOGIA ...... 23 2.1. Métodos...... 23 2.2. Técnicas...... 23 2.3. Metodología para el proceso de desarrollo de software...... 24 3. FUNDAMENTACIÓN TEÓRICA ...... 26 CAPITULO 1: SISTEMAS DE DIALOGO ...... 27 3.1. Introducción ...... 28 3.1.1. Aplicación de métodos basados en reglas ...... 32 3.1.2. Aplicación de métodos estocásticos...... 34 3.1.3. Comprensión del lenguaje...... 39 3.1.4. Gestor del Dialogo ...... 51 CAPITULO 2: Módulo de Comprensión ...... 69 3.2 Introducción...... 70 3.2.1 Descripción del módulo de comprensión...... 71 CAPITULO 3: Gestor de Dialogo ...... 72 3.3 Introducción...... 73 3.3.1 Tipos de Gestores de Dialogo...... 75 3.3.2 Estrategias de diseño de; Gestor de Dialogo...... 76 3.3.2.1 Diseño por intuición ...... 76

IX

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

3.3.2.2 Diseño por observación ...... 76 3.3.2.3 Diseño por simulación (Mago de Oz) ...... 76 3.3.2.4 Diseño por prototipado y mejora iteractiva ...... 76 3.3.2.5 Diseño por aprendizaje sobre un modelo estocástico ...... 76 3.3.3 Elementos del Modelado...... 76 3.3.3.1Turnos de Dialogo...... 76 3.3.3.2 Historia y estado del Dialogo ...... 76 3.3.3.3 Algoritmo de ejecución de los turnos ...... 77 3.3.4 Generador de Respuestas...... 77 CAPITULO 4: Síntesis de Voz ...... 78 3.4 Visión general de la tecnología de síntesis de voz ...... 79 3.4.1 Tecnologías de síntesis ...... 79 3.4.1.1 Síntesis concatenativa ...... 79 3.4.1.2 Síntesis de formantes ...... 79 3.4.2 Sintetizadores de voz disponibles libremente ...... 80 3.4.3 Sintetizadores de voz disponibles comercialmente ...... 80 CAPITULO 5: Speech API ...... 82 3.5 Que es Java Speech...... 83 3.5.1 Objetivos de Diseño...... 83 3.5.2 Implementaciones ...... 83 3.5.3 Requerimientos ...... 85 6.2.1 Estados del motor ...... 85 3.5.4.1 Sistemas de estado ...... 85 3.5.4.2 Allocation State System ...... 87 3.5.4.3 Estados de asignación y bloqueos de llamada ...... 89 3.5.4.4 Estados Pause-Resume ...... 90 3.5.4.5 Compartición de estados ...... 90 3.5.4.6 Eventos de habla ...... 91 3.5.4.6.1 Sincronización de eventos ...... 92 3.5.4.7 Otras funciones de los motores ...... 93 3.5.4.7.1 Propiedades Runtime ...... 93 3.5.4.7.2 Audio Management ...... 95 X

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

3.5.4.7.3 Manejo de Vocabulario ...... 95 3.5.4.8 Reconocimiento de voz ...... 96 3.5.4.9 JSGF (JavaSpeech Grammar Format)...... 97 3.5.4.9.1 Secuencias ...... 99 3.5.4.9.2 Alternativas ...... 100 3.5.4.9.3 Agrupaciones ...... 100 3.5.4.9.4 Corchetes [] ...... 101 3.5.4.9.5 Asterisco * ...... 101 3.5.4.9.6 Operador Suma + ...... 102 3.5.4.9.7 Tags ...... 102 3.5.4.10 Tipos de Reconocedores ...... 103 CAPITULO 6: HERRAMIENTAS DE DESARROLLO ...... 104 3.6.1 Microsoft Recognition ...... 105 3.6.1.1 Características ...... 105 3.6.1.2 Detalles tecnicos ...... 105 3.6.2 SAPI ...... 106 3.6.2.1 SAPI 5 ...... 106 3.6.3 MYSQL ...... 107 3.6.4 XML: Persistencia de Datos en java ...... 108 3.6.5 Autómata ...... 109 3.6.5.1 Autómata Finito Determinista ...... 109 4. RESULTADOS ...... 111 4.1. Desarrollo de la propuesta alternativa ...... 112 4.2. Valoración Técnica-Económica-Ambiental ...... 115 5. DISCUSIÓN ...... 118 5.1. DETERMINACION DE REQUERIMIENTOS ...... 118 5.1.1. Determinación de requerimientos funcionales ...... 118 5.1.2. Determinación de requerimientos no funcionales ...... 119 5.2. MODELO DEL DOMINIO ...... 120 5.2.1. Glosario de términos ...... 120 5.2.2. Modelo conceptual del dominio ...... 122 5.3. MODELADO DE CASOS DE USO ...... 123 XI

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.3.1. Determinación de casos de uso ...... 123 5.3.2. Diagramas de casos de uso ...... 125 5.3.3. PROTOTIPADO DE PANTALLAS ...... 129 5.4. DESCRIPCION DE CASOS DE USO ...... 145 5.4.1. Caso de Uso Dialogo con el sistema...... 145 5.4.2. Caso de uso Comprensión del habla...... 152 5.4.3. Caso de uso Gestor del Dialogo...... 154 5.4.4. Caso de uso Tareas Pendientes...... 156 5.4.5. Caso de uso Recepción de Libros Braille...... 158 5.4.6. Caso de uso Ingresar Libro...... 160 5.4.7. Caso de uso Modificar Libro...... 162 5.4.8. Caso de uso Eliminar Libro...... 164 5.4.9. Caso de uso Estadística...... 166 5.4.10. Caso de uso Imprimir Estadística...... 168 5.4.11. Caso de uso Inventario de Libros Braille...... 169 5.4.12. Caso de uso Imprimir Inventario de Libros Braille...... 170 5.5. MODELADO DE ROBUSTEZ ...... 171 5.5.1. Modelo de robustez del Caso de uso Dialogo con el sistema...... 171 5.5.2. Modelo de robustez del Caso de uso Comprensión del Habla...... 172 5.5.3. Modelo de robustez del Caso de uso Tareas Pendientes...... 173 5.5.4. Modelo de robustez del Caso de uso Recepción de Libros Braille. .... 174 5.5.5. Modelo de robustez del Caso de uso Ingresar Libro Braille...... 175 5.5.6. Modelo de robustez del Caso de uso Modificar Libro Braille...... 176 5.5.7. Modelo de robustez del Caso de uso Eliminar Libro Braille...... 177 5.5.8. Modelo de robustez del Caso de uso Estadística...... 178 5.5.9. Modelo de robustez del Caso de uso Imprimir estadística...... 179 5.5.10. Modelo de robustez del Caso de uso Inventario de libros Braille. .... 180 5.5.11. Modelo de robustez del Caso de uso Imprimir inventario de Libros Braille...... 181 5.6. MODELADO DE SECUENCIA O MODELO DETALLADO ...... 182 5.6.1. Modelado de secuencia del Caso de uso Dialogo con el sistema...... 182 5.6.2. Modelado de secuencia del Caso de uso Comprensión del Habla. .... 184 XII

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.6.3. Modelado de secuencia del Caso de uso Tareas Pendientes...... 185 5.6.4. Modelado de secuencia del Caso de uso Recepción de Libros Braille...... 186 5.6.5. Modelado de secuencia del Caso de uso Ingresar Libro...... 187 5.6.6. Modelado de secuencia del Caso de uso Modificar Libro Braille...... 189 5.6.7. Modelado de secuencia del Caso de uso Eliminar Libro Braille...... 190 5.6.8. Modelado de secuencia del Caso de uso Estadística...... 191 5.6.9. Modelado de secuencia del Caso de uso Imprimir Estadística ...... 193 5.6.10. Modelado de secuencia del Caso de uso Inventario de Libros Braille...... 194 5.6.11. Modelado de secuencia del Caso de uso Imprimir Inventario de Libros Braille...... 195 5.7. MODELADO DE ARQUITECTURA ...... 196 5.7.1. Modelo de Arquitectura ...... 196 5.7.2. Diagrama de paquetes ...... 197 5.7.3. Diagrama de clases por paquete ...... 198 5.7.4. Diagrama de clases por cada caso de uso ...... 207 5.7.4.1. Diagrama de clases para el caso de uso Dialogo con el sistema. .... 207 5.7.4.2. Diagrama de clases para el caso de uso Comprensión del habla. ... 208 5.7.4.3. Diagrama de clases para el caso de uso Tareas Pendientes...... 209 5.7.4.4. Diagrama de clases para el caso de uso Recepción de Libros Braille...... 210 5.7.4.5. Diagrama de clases para el caso de uso Ingresar Libro Braille...... 211 5.7.4.6. Diagrama de clases para el caso de uso Modoficar Libro Braille..... 212 5.7.4.7. Diagrama de clases para el caso de uso Modificar Libro Braille...... 213 5.7.4.8. Diagrama de clases para el caso de uso Eliminar Libro Braille...... 214 5.7.4.9. Diagrama de clases para el caso de uso Estadística...... 215 5.7.4.10. Diagrama de clases para el caso de uso Imprimir Estadística...... 216 5.7.4.11. Diagrama de clases para el caso de uso Inventario de Libros Braille...... 217 5.7.4.12. Diagrama de clases para el caso de uso Imprimir Inventario de Libros Braille...... 218 5.7.5. Diagrama de componentes ...... 219

XIII

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.7.6. Diagrama de Despliegue ...... 220 5.8. Algoritmo Gestor del Dialogo...... 221 5.9. Plan de pruebas ...... 223 5.9.1. Verificación ...... 223 5.9.2. Validación ...... 223 5.9.3. Validación orientada al uso: Usabilidad ...... 225 5.9.4. Plan de validación ...... 229 5.9.5. Ejecución del plan de pruebas ...... 231 5.9.6. Pruebas de usuario ...... 242 5.10. Instalación final y explotación del sistema ...... 245 6. CONCLUSIONES ...... 246 7. RECOMENDACIONES ...... 247 8. BIBLIOGRAFIA ...... 248 9. ANEXOS ...... 250 ANEXO 1: FICHA DE VALIDACIÓN ...... 250 ANEXO 2: ANTEPROYECTO ...... 254

XIV

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

INDICE DE FIGURAS

1. Ilustración: Estructura de un frame ...... 74 2. Ilustración: Implementación de JSAPI ...... 84 3. Ilustración: Diagrama del sistema de estados de asignación ...... 88 4. Ilustración: Estados Paused y Resumed ...... 90 5. Ilustración: Autómata Finito Determinista ...... 110 6. Ilustración: Modelo inicial del dominio ...... 122 7. Ilustración: Diagrama del Caso de Uso Dialogo con el sistema ...... 125 8. Ilustración: Diagrama del Caso de Uso Tareas Pendientes ...... 126 9. Ilustración: Diagrama del Caso de Uso Recepción de Libros Braille .. 126 10. Ilustración: Diagrama del Caso de Uso Administrar Libros braille ... 127 11. Ilustración: Diagrama del Caso de Uso Estadística ...... 128 12. Ilustración: Diagrama del Caso de Uso Inventario de Libros Braille . 128 13. Ilustración: DR Crear presentación vacía ...... 171 14. Ilustración: DR Comprensión del habla ...... 172 15. Ilustración: DR Tareas Pendientes ...... 173 16. Ilustración: DR Recepción de Libros Braille ...... 174 17. Ilustración: DR Ingresar Libros Braille...... 175 18. Ilustración: DR Modificar Libro Braille ...... 176 19. Ilustración: DR Eliminar Libro Braille...... 177 20. Ilustración: DR Estadística ...... 178 21. Ilustración: DR Imprimir estadística ...... 179 22. Ilustración: DR Inventario e Libros Braille ...... 180 23. Ilustración: DR Inventario de libros Braille...... 181 24. Ilustración: DR Modificar componente grafico ...... 181 25. Ilustración: DS Flujo Normal Dialogo con el sistema ...... 182 26. Ilustración: DS Flujo Alterno Crear presentación vacía ...... 183 27. Ilustración: DS Flujo Normal Comprensión del Habla ...... 184 28. Ilustración: DS Flujo Alterno Crear presentación con plantilla ...... 184 29. Ilustración: DS Flujo Normal Tareas Pendientes ...... 185 30. Ilustración: DS Flujo Alterno Modificar presentación...... 185 31. Ilustración: DS Flujo Normal Recepción de Libros Braille ...... 186 32. Ilustración: DS Flujo Normal Ingresar Libro braille ...... 187 33. Ilustración: DS Flujo Alterno Exportar presentación en formato png 188 34. Ilustración: DS Flujo Normal Modificar Libro Braille ...... 189 35. Ilustración: DS Flujo Normal Eliminar Libro Braille ...... 190 36. Ilustración: DS Flujo Normal Estadística ...... 191 37. Ilustración: DS Flujo Alterno Generar Vista previa ...... 192 38. Ilustración: DS Flujo Normal Imprimir Estadística ...... 193 39. Ilustración: DS Flujo Normal Inventario de Libros Braille ...... 194 40. Ilustración: DS Flujo Normal Imprimir Inventario de Libros Braille ... 195 XV

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

41. Ilustración: Arquitectura del Sistema ...... 196 42. Ilustración: Diagrama de Paquetes ...... 197 43. Ilustración: Diagrama de Clases del Paquete unl.sis_dialog.Control 198 44. Ilustración: Diagrama de Clases del Paquete RAH ...... 199 45. Ilustración: Diagrama de Clases del Paquete Comprension_habla ... 200 46. Ilustración: Diagrama de Clases del Paquete Control_Dialog ...... 201 47. Ilustración: Diagrama de Clases del Paquete Generar_Respuesta .... 202 48. Ilustración: Diagrama de Clases del Paquete Sintetizador ...... 202 49. Ilustración: Diagrama de Clases del Paquete Sintetizador ...... 203 50. Ilustración: Diagrama de Clases del Paquete Sintetizador ...... 204 51. Ilustración: Diagrama de Clases del Paquete Sintetizador ...... 205 52. Ilustración: Diagrama de Clases del Paquete Sintetizador ...... 206 53. Ilustración: DC Dialogo con el sistema ...... 207 54. Ilustración: DC Comprensión del Habla...... 208 55. Ilustración: DC Tareas pendientes ...... 209 56. Ilustración: DC Recepción de libros Braille ...... 210 57. Ilustración: DC Ingresar Libro Braille ...... 211 58. Ilustración: DC Modificar Libro Braille ...... 212 59. Ilustración: DC Modificar Libro Braille ...... 213 60. Ilustración: DC Eliminar Libro Braille...... 214 61. Ilustración: DC Estadística ...... 215 62. Ilustración: DC Imprimir Estadística ...... 216 63. Ilustración: DC Inventario de Libros Braille ...... 217 64. Ilustración: DC Imprimir Inventario de Libros Braille ...... 218 65. Ilustración: Diagrama de Componentes ...... 219 66. Ilustración: Diagrama de Paquetes ...... 220 67. Ilustración: Resultados del Ingreso al Sistema ...... 233 68. Ilustración: Resultados del tiempo de respuesta ...... 234 69. Ilustración: Resultados de la funcionalidad del sistema ...... 235 70. Ilustración: Resultados relacionados con el almacenamiento de la información ...... 236 71. Ilustración: Resultados del control de información ingresada ...... 237 72. Ilustración: Resultados relacionados con la interfaz gráfica y ejecución de procesos ...... 237 73. Ilustración: Resultados relacionados con la usabilidad del sistema . 238 74. Ilustración: Resultados relacionados con la comprensión del sistema ...... 239

XVI

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

INDICE DE TABLAS

1. Tabla: Eventos del Habla: paquete javax.speech ...... 92 2. Tabla: Eventos de Habla: paquete javax.speech.synthesis ...... 92 3. Tabla: Eventos de Habla: paquete javax.speech.recognition ...... 92 4. Tabla: Requerimientos Funcionales ...... 119 5. Tabla: Requerimientos no Funcionales ...... 119 6. Tabla: Glosario de términos ...... 121 7. Tabla: Determinación de Requerimientos ...... 124 8. Tabla: Prototipo de la Pantalla – Administrar Libros Braille ...... 129 9. Tabla: Prototipo de la Pantalla – Administrar Libros Braille ...... 130 10. Tabla: Prototipo de la Pantalla – Administrar Componentes Gráficos ...... 131 11. Tabla: Prototipo de la Pantalla – Exportar Presentación ...... 132 12. Tabla: Prototipo de la Pantalla – Crear Presentación con diseño ...... 133 13. Tabla: Prototipo de la Pantalla –Administrar Libros Braille ...... 134 14. Tabla: Prototipo de la Pantalla – Modificar Libro ...... 135 15. Tabla: Prototipo de la Pantalla – Eliminar Libro ...... 136 16. Tabla: Prototipo de la Pantalla – Eliminar Libro ...... 137 17. Tabla: Prototipo de la Pantalla – Eliminar Libro ...... 138 18. Tabla: Prototipo de la Pantalla – Eliminar Libro ...... 139 19. Tabla: Prototipo de la Pantalla – Detalles de Libro Braille ...... 140 20. Tabla: Prototipo de la Pantalla – Detalles de Libro Braille ...... 141 21. Tabla: Prototipo de la Pantalla – Inventario Libros Braille ...... 142 22. Tabla: Prototipo de la Pantalla – Reportes estadísticos...... 143 23. Tabla: Prototipo de la Pantalla – Selección de Voz del sistema ...... 144 24. Tabla: Descripción del caso de uso Dialogo con el sistema ...... 151 25. Tabla: Descripción del caso de uso Crear Presentación con plantilla ...... 153 26. Tabla: Descripción del caso de uso Gestor del dialogo...... 155 27. Tabla: Descripción del caso de uso Tareas Pendientes...... 157 28. Tabla: Descripción del caso de uso Recepción de libros braille...... 159 29. Tabla: Descripción del caso de uso Ingresar Libro...... 161 30. Tabla: Descripción del caso de uso Modificar Libro ...... 163 31. Tabla: Descripción del caso de uso Eliminar Libro ...... 165 32. Tabla: Descripción del caso de uso Estadística...... 167 33. Tabla: Descripción del caso de uso imprimir estadística ...... 168 34. Tabla: Descripción del caso de uso Inventario de Libros Braille ...... 169

XVII

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

35. Tabla: Descripción del caso de uso Imprimir inventario de Libros Braille ...... 170 36. Tabla: Constante k relacionada de acuerdo al nivel de confianza ..... 226 37. Tabla: Plan de Validación ...... 230 38. Tabla: Informe de Resultados ...... 240 39. Tabla: Pruebas de Usuario ...... 244 40. Tabla: Recursos Humanos ...... 115 41. Tabla: Recursos Materiales ...... 116 42. Tabla: Recursos Técnicos...... 116 43. Tabla: Recursos Tecnológicos ...... 116 44. Tabla: Costo Total del Proyecto ...... 117

XVIII

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

1. INTRODUCCION

La Universidad Nacional de Loja ha integrado la investigación como parte fundamental en la formación de sus profesionales. A través de ella, se propone brindar soluciones efectivas a las complejas problemáticas del mundo actual.

Apoyado en los conocimientos adquiridos durante la etapa de estudios se ha establecido dar solución a un problema que se ha presentado en base a lo que tiene que ver sobre consultar en biblioteca para usuarios no videntes, lo cual se encuentra limitado y poco abordado debido a la Falta de investigación para plantear soluciones a problemas comunes como la prestación del servicio bibliográfico para personas discapacitadas, por ello se ha creído conveniente realizar un sistema de dialogo, el cual se encargue de brindar la información necesaria sobre los libros existentes en la biblioteca Braille del Honorable Consejo Provincial de Loja.

Así pues, en esta breve introducción, se precisará qué se entiende por sistemas de diálogo y qué componentes o módulos suelen constituir tales sistemas. En general, un sistema de diálogo sería toda aplicación informática que permita a los usuarios de una computadora comunicarse con dicha computadora de una manera interactiva. Se suele concretar el concepto de sistema de diálogo a las aplicaciones cuyo objetivo es el acceso a información de características bien definidas (información contenida en bases de datos) y cuyo medio de acceso sea vocal, es decir, mediante el habla.

En este campo de las Tecnologías del Habla, un tema de especial interés, y de especial dificultad, es el desarrollo de sistemas de diálogo entre las computadoras y sus usuarios humanos. Conforme la interacción con las computadoras se extiende a todas las áreas de la actividad humana y conforme el acceso a todo tipo de información se automatiza mediante tales máquinas, se incrementa el interés por disponer de sistemas que faciliten esta comunicación persona–máquina del modo más natural posible.

El modo de comunicación entre seres humanos más natural, de uso más extendido, y en vigor desde que existen las lenguas, es la conversación. Idealmente, desearíamos poder interactuar con las computadoras con facilidad, flexibilidad y fluidez pareja a la que caracteriza nuestro diálogo con otras personas. Aunque es probable que nunca se alcancen semejantes prestaciones, los constantes avances de la investigación en Tecnologías del Habla han permitido que sean factibles sistemas de comunicación 19

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

persona–máquina mediante voz, con cierto grado de flexibilidad (iniciativa mixta en el desarrollo del diálogo) y orientados a la consulta de información muy específica (tareas de dominio semántico restringido).

En cualquier caso, tales sistemas de diálogo deben abordar, en mayor o menor grado, la modelización del conocimiento lingüístico y la simulación del comportamiento lingüístico, y, en consecuencia, se encuentran serias dificultades en su desarrollo. Es habitual un desarrollo modular de los sistemas de diálogo hablado persona–máquina, lo que permite desglosar las dificultades entre los diferentes componentes del sistema. Desde esta perspectiva, los módulos esenciales en todo sistema de diálogo son los siguientes:

 Módulo de reconocimiento del habla: componente que procesa la voz del interlocutor humano e identifica la secuencia de texto que corresponde a la señal acústica recibida.  Módulo de comprensión del lenguaje: componente que recibe la secuencia de texto identificada por el anterior módulo e identifica la información relevante que suministra el texto en el ámbito de la tarea considerada (determina el significado de la intervención del usuario humano).  Módulo de gestión del diálogo: componente que recibe el significado de la intervención del usuario (en términos de un lenguaje conceptual o de representación semántica), procedente del anterior módulo, y determina la siguiente intervención del sistema conforme a algún modelo que establezca la estrategia o conducta del sistema ante las diferentes situaciones que se planteen en la tarea considerada.  Módulo de generación de respuestas: componente que, a partir de la representación semántica de la intervención del sistema, procedente del anterior módulo, genera una secuencia de texto, en el idioma del usuario, equivalente en su significado.  Módulo de síntesis del habla: componente que recibe la respuesta del sistema como texto en lenguaje natural y genera la correspondiente señal de audio, que será la respuesta que llegará al usuario humano, interlocutor del sistema.

En todo sistema de diálogo, una vez determinada cuál será la siguiente intervención del sistema en términos de un lenguaje conceptual, realizar su conversión a texto en lenguaje natural (generación de respuesta) y de éste a voz (síntesis del habla) es un

20

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

problema, comparativamente, menor. Los principales retos se encuentran en el desarrollo de los otros módulos.

A lo largo de las últimas décadas, en el campo del reconocimiento automático del habla, se ha progresado desde el reconocimiento de palabras aisladas dentro de conjuntos reducidos de vocabulario hasta el reconocimiento de habla continua y con conjuntos de vocabulario cada vez mayores. Los avances también son significativos en cuanto a la correcta identificación de los fonemas en entornos ruidosos. Actualmente, los métodos estocásticos (como los modelos ocultos de Markov) proporcionan las mejores tasas de reconocimiento en estos entornos de acústica deficiente, como es el caso de la locución directa, en los que suelen encontrarse los usuarios.

Para llevar a cabo este proyecto se planteó el objetivo principal:

“Construir un sistema De Dialogo completo en lengua española orientado a una tarea de dominio semántico restringido, para brindar información bibliográfica en la Biblioteca Braille Del Honorable Consejo Provincial de Loja utilizando Software Libre”.

Para cumplir con el objetivo propuesto nos apoyamos en base a los siguientes puntos:

 Realizar la investigación detallada para aplicar los conocimientos adquiridos de la misma, en el desarrollo del sistema informático.  Realizar la búsqueda de mecanismos eficientes para que el sistema explote la información disponible en un perfil de usuario, con el objetivo de adaptar el comportamiento del sistema a las preferencias, capacidades y características de los usuarios.  Adaptar un Módulo de reconocimiento del Habla basado en diseños y esquemas abiertos, el cual supla las necesidades del sistema.  Diseñar y construir el Módulo de comprensión del lenguaje el cual se adapte al ambiente en el cual va a funcionar.  Diseñar y construir el Módulo gestor del dialogo, orientado a la generación del dialogo entre el usuario y el computador.  Diseñar y construir el Módulo generador de respuestas y de síntesis del habla, de tal manera que la generación de respuestas sea lo más adaptable el usuario. 21

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

 Realizar Pruebas pertinentes al Software realizado.  Implementar el Sistema de Dialogo para brindar información bibliográfica en la Biblioteca Braille del Honorable Consejo Provincial de Loja.

22

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

2. METODOLOGIA

Para el desarrollo de presente proyecto se tomó en cuenta los diferentes métodos investigativos, técnicas y una metodología de software que permita cumplir los objetivos propuestos.

2.1. Métodos.

Los Métodos que utilizamos en el presente trabajo de investigación son los siguientes:

Método Científico: Lo utilizamos como guía principal de toda la investigación, ya que a través de este se planteó el problema, los objetivos: general y específico, además nos permitió la organización, procesamiento, análisis, e interpretación de la información obtenida.

Método Inductivo-Deductivo: Los cuales siguen el proceso analítico sintético que satisfacen los requerimientos propios de las ciencias informáticas (recolección de datos, análisis de la información e interpretación de los hechos y descubrimiento de nuevos procedimientos).

2.2. Técnicas

Considerando la importancia y pertinencia del tema de esta investigación y para que los métodos empleados tengan mayor eficacia, fue indispensable utilizar las siguientes técnicas:

Observación: En base a la técnica de observación pudimos recolectar las características básicos que debe poseer un software de este tipo lo cual permitió determinar los requerimientos básicos del sistema tomando como modelos los programas de desarrollo de presentaciones Power Point e Impress, ya que son los más utilizados por los usuarios.

Encuestas: Las cuales estuvieron dirigidas a la planta docente del Área de la Energía las Industrias y los Recursos No Renovables, con la finalidad de validar nuestra aplicación lo cual fue de gran importancia ya que así pudimos recolectar diferentes opiniones y sugerencias de parte de los encuestados para de esta manera corregir errores o hacer nuevas mejoras a la aplicación.

23

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Consulta Bibliográfica: Se determinó el sustento teórico-científico de las consecuencias de esta investigación. Por medio de esta técnica se procedió a la utilización de resúmenes y gráficos para acotar la información necesaria.

2.3. Metodología para el proceso de desarrollo de software.

En el campo de la informática y especialmente en el desarrollo de software, es de vital importancia tomar en cuenta ciertas metodologías de trabajo, las mismas que permitan conseguir los objetivos propuestos desde el inicio del proyecto hasta su culminación.

Por tal razón la metodología que se consideró importante con respecto al desarrollo del proyecto es la Iconix ya que es una metodología ágil que permite un mejor desarrollo de proyectos.

En la etapa de análisis se inició con la fase de especificación de requerimientos para lo que se tomó en cuenta las necesidades de los usuarios que utilizan por lo menos algún tipo de software para el desarrollo de presentaciones, los cuales brindaron ideas de las opciones básicas que debe poseer este tipo de software, posteriormente tomando como base las diferentes ideas propuestas se generó una tabla de requerimientos tanto funcionales y no funcionales que permitieron el desarrollo del proyecto.

A continuación se procedió a realizar un modelo de casos de uso, el que permitió comprender de mejor manera los requerimientos que de be cumplir la aplicación, inmediatamente se procedió con la etapa de diseño para lo cual se construyó un diagrama de clases estático o modelo inicial de dominio, seguido se procedió a describir los diferentes casos de uso cuyo propósito es la delineación de los procesos, curso normal y alterno de eventos que se dan entre el sistema y los actores involucrados.

Seguidamente se elaboró los diagramas de robustez los cuales sirven para comprobar que los casos de uso estén formulados correctamente y de forma completa. Luego se elaboró los diagramas de secuencia los mismos que muestran como interactúa los diferentes objetos de la aplicación con usuario a través del tiempo. Seguidamente completamos el modelo inicial del dominio con los diferentes atributos y métodos apoyándonos en los diagramas de secuencia.

24

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Para la implementación del proyecto se tomó en cuenta la etapa de análisis y diseño realizado en la fase anterior. La codificación se desarrolló en el IDE Netbeans 6.8, utilizando como lenguaje de programación java. Posteriormente se realizó un plan de pruebas para la aplicación que nos permitió determinar el correcto o incorrecto funcionamiento de la aplicación.

Terminada la etapa de implementación se detalló los diferentes diagramas como son de componentes y despliegue, los mismos que permiten tener una mejor perspectiva del sistema.

25

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

3. FUNDAMENTACIÓN TEÓRICA

CONTENIDO

Sistemas de Dialogo

Módulo de Comprensión

Gestor del Dialogo

Síntesis de Voz

Java Speech API

Herramientas de desarrollo

26

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

CAPITULO 1: SISTEMAS DE DIALOGO

27

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

3.1. Introducción1

Los sistemas automáticos de diálogo constituyen una tecnología aparecida a finales de la década de los ochenta, impulsada principalmente por los proyectos DARPA SLS (Spoken Language Systems) en Estados Unidos, y SUNDIAL (Speech UNDerstanding and DIALog) en Europa. El objetivo principal de ambos proyectos es desarrollar sistemas informáticos capaces de proporcionar información acerca de viajes a los usuarios, usando la voz como medio de interacción. Actualmente, es posible encontrar en el mercado un amplio número de sistemas automáticos de diálogo, para una diversidad de tareas. Dichos sistemas funcionan en tiempo real, en estaciones de trabajo u ordenadores personales convencionales.

Así pues, en esta breve introducción, se precisará qué se entiende por sistemas de diálogo y qué componentes o módulos suelen constituir tales sistemas. En general, un sistema de diálogo sería toda aplicación informática que permita a los usuarios de una computadora comunicarse con dicha computadora de una manera interactiva. Se suele concretar el concepto de sistema de diálogo a las aplicaciones cuyo objetivo es el acceso a información de características bien definidas (información contenida en bases de datos) y cuyo medio de acceso sea vocal, es decir, mediante el habla.

El modo de comunicación entre seres humanos más natural, de uso más extendido, y en vigor desde que existen las lenguas, es la conversación. Idealmente, desearíamos poder interactuar con las computadoras con facilidad, flexibilidad y fluidez pareja a la que caracteriza nuestro diálogo con otras personas. Aunque es probable que nunca se alcancen semejantes prestaciones, los constantes avances de la investigación en Tecnologías del Habla han permitido que sean factibles sistemas de comunicación persona–máquina mediante voz, con cierto grado de flexibilidad (iniciativa mixta en el desarrollo del diálogo) y orientados a la consulta de información muy específica (tareas de dominio semántico restringido).

Es habitual un desarrollo modular de los sistemas de diálogo hablado persona– máquina, lo que permite desglosar las dificultades entre los diferentes componentes

1 http://www.dsic.upv.es/ 28

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

del sistema. Desde esta perspectiva, los módulos esenciales en todo sistema de diálogo son los siguientes:

1. Módulo de reconocimiento del habla: componente que procesa la voz del interlocutor humano e identifica la secuencia de texto que corresponde a la señal acústica recibida.

2. Módulo de comprensión del lenguaje: componente que recibe la secuencia de texto identificada por el anterior módulo e identifica la información relevante que suministra el texto en el ámbito de la tarea considerada.

3. Módulo de gestión del diálogo: componente que recibe el significado de la intervención del usuario (en términos de un lenguaje conceptual o de representación semántica), procedente del anterior módulo, y determina la siguiente intervención del sistema (también mediante una representación semántica) conforme a algún modelo que establezca la estrategia o conducta del sistema ante las diferentes situaciones que se planteen en la tarea considerada.

4. Módulo de generación de respuestas: componente que, a partir de la representación semántica de la intervención del sistema, procedente del anterior módulo, genera una secuencia de texto, en el idioma del usuario, equivalente en su significado.

5. Módulo de síntesis del habla: componente que recibe la respuesta del sistema como texto en lenguaje natural y genera la correspondiente señal de audio.

A lo largo de las últimas décadas, en el campo del reconocimiento automático del habla, se ha progresado desde el reconocimiento de palabras aisladas dentro de conjuntos reducidos de vocabulario hasta el reconocimiento de habla continua y con conjuntos de vocabulario cada vez mayores. Los avances también son significativos en cuanto a la correcta identificación de los fonemas en entornos ruidosos. Actualmente, los métodos estocásticos (como los modelos ocultos de Márkov) proporcionan las mejores tasas de reconocimiento en estos entornos de acústica deficiente, como es el caso de la locución telefónica, en los que suelen encontrarse los usuarios. 29

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Los problemas de la comprensión del lenguaje natural y del control del diálogo por parte del sistema presentan mayores dificultades. Por ello, la aplicación de los métodos estocásticos ha comenzado a dar resultados en tiempos mucho más recientes y constituye actualmente una vía de investigación innovadora. Anteriormente estos problemas se abordaban con una modelización del conocimiento lingüístico, formalizado mediante reglas deducidas por usuarios expertos en la tarea considerada. Esta vía de investigación, más tradicional, sigue activa.

Los sistemas que se desarrollan según el paradigma deductivo, usando métodos basados en reglas, tienen los inconvenientes del elevado coste del diseño del modelo (dada la necesidad de que participe personal especializado) y de la limitación en su aplicación, ya que el cambio en la tarea del sistema implica el diseño de un nuevo modelo. Los sistemas que se desarrollan según el paradigma inductivo, usando métodos estocásticos, presentan la dificultad previa de la adquisición de un corpus. Éste debe de proporcionar un número de muestras suficientemente grande como para que sea posible, aplicando técnicas de aprendizaje automático, inferir un modelo que describa adecuadamente la tarea considerada.

Actualmente, tanto los métodos estocásticos como los basados en reglas permiten desarrollar sistemas capaces de comprender automáticamente las intervenciones de las personas, expresadas en su lenguaje natural (siempre y cuando usen palabras del vocabulario considerado en los modelos, palabras pertenecientes al dominio semántico de la tarea modelizada). En cambio, el problema del control o gestión del diálogo por parte del sistema aún no ha sido satisfactoriamente resuelto aplicando métodos estocásticos, debido a la ausencia de corpus de talla suficiente y a la mayor dimensión del espacio de sucesos objeto de modelización. Los sistemas que, hoy en día, gestionan automáticamente los diálogos persona–máquina se basan en la aplicación de reglas o bien son sistemas híbridos que integran ambos tipos de métodos.

En la literatura más reciente pueden encontrarse numerosas referencias sobre sistemas de diálogo hablado (SDS: Spoken Dialog Systems) desarrollados por diferentes grupos de investigación (Aust et al., 1995), (Baggia et al., 2000), (Bonafonte et al., 2000), (Córdoba et al., 2001), (CMU, 1999), (Lamel et al., 2000a), (Pieraccini et 30

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

al., 1997), (Rudnicky et al., 1999b), (Ward y Pellom, 1999), (Zue et al., 2000). Todos estos sistemas coinciden en posibilitar el diálogo con las computadoras en tareas muy definidas, como son las consultas a sistemas automáticos de información. Las tareas más habituales son las relativas a la planificación de viajes: consultas sobre horarios, precios, disponibilidades, etc., en aviones, hoteles, trenes...

La tarea ATIS (Air Travel Information Services), de consulta sobre vuelos, sirvió de marco para el desarrollo de los primeros proyectos, como los llevados a cabo en AT&T, concretamente el proyecto AMICA (Pieraccini et al., 1997), donde se aplicaron los métodos estocásticos en un sistema de diálogo con iniciativa mixta. ATIS también fue el punto de partida de las investigaciones del MIT y de la CMU.

El grupo de investigadores del MIT ha desarrollado GALAXY, una arquitectura de sistemas de diálogo adaptable a diferentes tareas. Su finalidad es el desarrollo de sistemas de diálogo, orientados a cumplir objetivos, con posibilidad de iniciativa mixta, y aplicados a tareas reales, de uso cotidiano. Ejemplos de su arquitectura de sistemas son VOYAGER (Glass et al., 1995), sistema de información para viajeros, PEGASUS (Zue et al., 1994), sistema de acceso al sistema de reservas online de SABRE, o JUPITER (Zue et al., 2000), sistema de información meteorológica.

Los investigadores de la CMU han desarrollado el sistema Carnegie Mellon Communicator (CMU, 1999), (Rudnicky et al., 1999b), que permite obtener información de itinerarios complejos que incluyen múltiples reservas en vuelos, hoteles y alquiler de coches. El sistema gestiona el diálogo usando planificaciones (schema) y agendas. Entre sus objetivos se encuentra también facilitar la migración del sistema a otras tareas, separando en módulos agentes de dominio la gestión de la información más específica. Estos sistemas de AT&T, MIT y CMU se encuentran operativos lo que ha permitido adquirir grandes corpus de diálogos que posibiliten ulteriores mejoras.

En el ámbito europeo, tuvo carácter pionero el proyecto SUNDIAL (Speech Understanding and Dialogue), relativo a la consulta de horarios de trenes y aviones, y que fue desarrollado para cuatro idiomas: inglés y francés, para la información sobre vuelos, alemán e italiano, para la información sobre horarios de trenes (Peckham, 1993). 31

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

De los diversos proyectos que siguieron, sobresalen los sistemas desarrollados por el grupo del LIMSI: el sistema PARISSITI (Système d’Informations Touristiques Interactif), dedicado a facilitar información turística sobre la capital francesa, el sistema MASK (Multimodal Multimedia Service Kiosk), y el ARISE (Lamel et al., 2000a), sistema de consulta telefónica sobre los trenes de la SNCF, socio en el proyecto.

Tarea muy similar a la del sistema ARISE es la del proyecto BASURDE (Bonafonte et al., 2000), desarrollado por varias universidades españolas, entre ellas la UPV, y que, actualmente, tiene continuación con el proyecto DIHANA (Benedí et al., 2004), también con participación de la UPV.

Por último, en esta breve introducción al estado del arte, cabe citar el desarrollo de un lenguaje estándar para el desarrollo de los sistemas de diálogo, llamado VoiceXML (McGlashan et al., 2004). La investigación en sistemas de diálogo ha coincidido en el tiempo con el desarrollo de la red Internet y las aplicaciones Web y, en consecuencia, se ha planteado el acceso a los sistemas de diálogo mediante aplicaciones Web. El lenguaje estándar VoiceXML es el resultado del trabajo conjunto de varias importantes compañías (AT&T, IBM, Lucent, Motorola, etc.). VoiceXML ha sido diseñado para crear diálogos con audio, posibilitando la síntesis, el reconocimiento y la grabación del habla, así como el desarrollo de conversaciones con iniciativa mixta. A todas estas funcionalidades, VoiceXML aporta las ventajas del desarrollo basado en las aplicaciones Web.

3.2. Aplicación de métodos basados en reglas

Los investigadores de varios centros y universidades europeas desarrollaron el sistema ARISE (Automatic Railway Information Systems for Europe) con los objetivos de alcanzar tasas elevadas de éxito en los diálogos y de permitir que la interacción con los usuarios fuera lo más abierta y natural posible. La arquitectura del sistema (Lamel et al., 2000a) es modular, y consta de los habituales seis módulos. De los trabajos desarrollados en este proyecto, han surgido 4 prototipos: uno holandés (ARISE-NL), dos franceses (ARISE-FR1, con tecnología Philips, y ARISE-FR2, con tecnología del

32

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

LIMSI) y uno italiano (ARISE-IT, con tecnología del CSELT), según los acrónimos usados en (Baggia et al., 1999). De la investigación y prototipo del LIMSI se informa ampliamente en (Lamel et al., 2000a).

En el módulo de comprensión (Lamel et al., 2000a) se realiza, primero, un pre procesado de la cadena reconocida, aplicando reglas genéricas, reglas dependientes de la tarea y reglas dependientes del idioma, de manera que se normalizan las formas léxicas y se identifican y etiquetan conceptos. A continuación, se realiza una comprensión literal, que ya genera un frame o representación semántica, en la que se evita toda decisión que pueda llevar a malentendidos. Sin embargo, el proceso se completa con una fase de comprensión contextual, en la que se tiene en cuenta el sentido común y el conocimiento de la tarea, que permite precisar el valor de algunos atributos. Las ambigüedades que no pueda resolver el módulo de comprensión deberán ser tratadas por el módulo gestor de diálogo.

El gestor de diálogo (Lamel et al., 2000a), entonces, preguntará al usuario por datos, necesarios y aún no facilitados, o bien usará el frame dado por comprensión, junto con una serie de reglas que gestionan la historia del diálogo, para generar una consulta SQL a la base de datos. En ambos casos, el gestor de diálogo produce un acto de diálogo en forma de frame. Y el módulo generador de respuestas lo convertirá en una frase en lenguaje natural.

El módulo más importante del sistema es el gestor de diálogo, puesto que gestiona la comprensión contextual, la historia del diálogo, la recuperación de la información (de la BD) y la generación de la respuesta. En dicho módulo se fija la estrategia de diálogo.

Por estrategia de diálogo se entiende el conjunto de decisiones tomadas por el gestor de diálogo en cualquier momento del diálogo. Los objetivos principales de la estrategia implementada en el sistema ARISE son:

 Evitar que el usuario se sienta perdido. Para ello, debe estar informado de lo que el sistema haya entendido, y así podrá corregir al sistema cuando corresponda. La confirmación implícita es el mecanismo habitual para este objetivo. 33

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

 Responder directamente a las preguntas del usuario. Del análisis de los diálogos, se desprende la conveniencia de respuestas cortas y ajustadas a la petición del usuario.

 Explicar las respuestas del sistema, si son inesperadas. Por ejemplo, aclarar la necesidad de relajar las restricciones impuestas por el usuario a fin de proporcionar la respuesta más cercana, aunque no exacta, a su petición.

 Permitir al usuario que corrija al sistema (posibilidad de negociación). Característica que posibilita enmendar errores del reconocedor y también errores, o cambios de idea, del propio usuario.  Evitar los malentendidos. Para esto, es esencial reducir los errores de reconocimiento. Resulta conveniente rechazar las palabras identificadas con baja fiabilidad.

Se procura que estos objetivos fueran compatibles con una estrategia de diálogo mixta. El usuario puede preguntar por los diferentes tipos de información disponibles sin necesidad de comandos específicos o una navegación prefijada. El sistema permite la negociación, esto es, el usuario puede rechazar la información suministrada y, en tal caso, modificar, relajar o restringir los criterios o datos para la búsqueda.

3.3. Aplicación de métodos estocásticos.

Respecto a la aplicación de métodos estocásticos en el desarrollo de sistemas de diálogo cabe citar, entre otras, (Levin et al., 2000a), (Oh y Rudnicky, 2002), (Stolcke et al., 2000) y (Williams y Young, 2003).

 AT&T (Levin et al., 2000) En (Levin et al., 1998), (Levin et al., 1999) y (Levin et al., 2000a), los investigadores de AT&T exponen cómo el problema de la gestión del diálogo puede analizarse como un problema de optimización de una función objetivo, representativa de las dimensiones relevantes en la tarea de diálogo considerada. Este planteamiento lleva a considerar el sistema de diálogo mediante un modelo estocástico, el MDP (proceso de decisión de Markov), y la posibilidad de 34

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

aprendizaje automático de las estrategias de diálogo más adecuadas mediante la interacción con un usuario simulado. Dada la naturaleza dinámica del diálogo, los investigadores de AT&T consideran que no es adecuado un aprendizaje supervisado de las estrategias a partir de un corpus, en particular por las dificultades de evaluar el sistema cuando los diálogos ejecutados se desvíen de los registrados en el corpus. La propuesta de (Levin et al., 1998) y (Levin et al., 2000a) es el aprendizaje de los modelos mediante una combinación de:

 Aprendizaje reforzado (reinforcement learning). El sistema aprenderá la estrategia óptima en su interacción con los usuarios. Esta técnica permite explorar el espacio de estados y, periódicamente, actualizar los valores de todos los estados visitados.

 Aprendizaje supervisado. Para aplicar razonablemente la anterior técnica, es muy recomendable disponer de un usuario simulado. El aprendizaje supervisado a partir del corpus permite estimar los parámetros de tal usuario.

El diálogo puede formalizarse, (Levin et al., 1998), (Levin et al., 1999) y (Levin et al., 2000a), como un proceso de decisión secuencial en términos de:  Un conjunto de acciones (action set). Incluye todas las posibles acciones del sistema: interacciones con el usuario, interacciones con recursos externos, procesamiento interno.

 Un espacio de estados (state space). Un estado representa todo el conocimiento que el sistema tiene acerca de los recursos internos y externos con los que interactúa. Una sesión de diálogo es un camino desde el estado inicial al estado final de este espacio.

 Una estrategia. En cada estado alcanzado, la estrategia especifica la siguiente acción a realizar. Establece, por tanto, una correspondencia (mapping) entre el espacio de estados y el conjunto de acciones. La estrategia óptima minimizará una función objetivo, cuyos términos serán los costes esperados para las diferentes dimensiones del diálogo 35

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Si Na = número de acciones y Ns = número de estados, entonces el número de posibles estrategias es exponencial: NaNs, y no se pueden explorar exhaustivamente. Para llevar a cabo el aprendizaje automático, hay que considerar el proceso de decisión como un MDP, considerando las siguientes aproximaciones para las probabilidades de las transiciones y para los costes:

P(st+1 | st, ..., s0, at, ..., a0) = PT(st+1 | st, at) P(ct | st, ..., s0, at, ..., a0) = PC(ct | st, at)

El coste óptimo de un estado s será la suma esperada de los costes desde ese estado hasta el estado final sF siguiendo la estrategia óptima π*:

V*(s) = < Σ t = 0..TF c(st, at) >

El valor óptimo de la función en un estado st se puede calcular como suma del coste esperado instantáneo en st y el coste esperado del siguiente estado st+1 usando la mejor acción disponible:

V*(st) = min a [ < c(st, a) > + Σ s PT(st+1 = s | st, a) V*(s) ]

Y la estrategia óptima se obtiene de:

π*(st) = arg min a [ < c(st, a) > + Σ s PT(st+1 = s | st, a) V*(s) ]

En (Levin et al., 1998) y (Levin et al., 2000a) se aplica esta técnica para obtener automáticamente una estrategia óptima para la tarea ATIS. Los resultados experimentales muestran que el algoritmo converge, alcanzando la estrategia que se juzga óptima al cabo de 710.000 diálogos.

En (Pieraccini et al., 1997), el grupo investigador de AT&T propone, con AMICA, una arquitectura genérica que permita un rápido desarrollo de sistemas de diálogo hablado, con capacidad de iniciativa mixta, para diferentes tareas. Como ideas principales, se destaca que la estrategia es bastante independiente de las aplicaciones concretas y que el sistema se puede descomponer en módulos que 36

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

realicen distintas acciones o funciones. A éstas se las denomina acciones de diálogo (dialogue actions).

En (Levin et al., 1999), se concreta algo más la descripción de la arquitectura AMICA. Los estados del diálogo (state space) se representan mediante plantillas (templates), estructuras recursivas de pares clave / valor. Las acciones (action set) son funciones que leen una plan-tilla, pueden interactuar con el entorno, y devuelven una plantilla modificada. Sería conveniente disponer de un conjunto pequeño de acciones de diálogo de alto nivel, genéricas. La experiencia, sin embargo, indica que no es posible una adecuada parametrización de tales acciones de alto nivel con independencia de la aplicación o tarea. La solución consiste en implementar un conjunto de acciones elementales, que serán los bloques para construir acciones más complejas, mediante un lenguaje de scripts.

DMD (dialogue manager developer) es el lenguaje de scripts propuesto, tanto para construir las acciones de diálogo como la estrategia del diálogo. Acciones y estrategia se codifican en una base de datos de scripts DMD. El módulo gestor de diálogo, entonces, se convierte en un intérprete de DMD. Según la arquitectura del SDS, el gestor de diálogo puede mantener el estado de diálogo (stateful mode) o carecer de estado (stateless mode) y recibirlo de otro módulo, como el hub en la arquitectura MIT Galaxy. Una de las ventajas de DMD es soportar estos dos modos de operación.

En (Levin et al., 2000b), se describe el diseño e implementación del AT&T DARPA Communicator. La arquitectura del SDS está centralizada en un hub, que funciona como enrutador programable que invoca los diferentes servidores del sistema y retransmite los mensajes (Galaxy frames) que intercambian.

 University of Cambridge (Young et al., 2002).

En (Williams y Young, 2003), investigadores de la Universidad de Cambridge consideran también la aproximación markoviana, el MDP aplicado al sistema de diálogo, y el uso del aprendizaje reforzado (reinforcement learning) para que el gestor de diálogo aprenda la estrategia más adecuada. En particular, la cuestión objeto de su estudio es cómo crear el sistema inicial (bootstrapping). 37

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Para abordar este problema, el método que plantean, sucintamente, consiste en:

 Realizar, grabar y transcribir sesiones de diálogo usando la técnica del mago de Oz.

 Delimitar las tareas propias del dominio y excluir del corpus adquirido los turnos de fuera del dominio (outofdomain turns).  Enumerar el conjunto de acciones y el espacio de estados (action set y state space, componentes del MDP), anotando los turnos con actos de diálogo. Dado el inmenso tamaño del espacio de estados, se propone usar una función de valor parametrizada que agruparía estados y también usar un algoritmo de aprendizaje supervisado para estimar esta función.

 Establecer una estrategia (policy) inicial, es decir, la correspondencia entre estados y acciones, en términos del MDP. Para ello, tomando las acciones como variable, se usa aprendizaje supervisado para construir un clasificador que fije esa primera estrategia.

El método se ha probado usando el corpus Autoroute, que consta de 166 diálogos, en los que el mago de Oz atiende consultas sobre direcciones y rutas en el Reino Unido. En la discusión de los resultados, se indica que basta una cantidad pequeña de diálogos (en torno a 30 ó 40 diálogos, con varios centenares de turnos) para disponer de la mayor parte de la información relevante para los algoritmos de aprendizaje supervisado. Los modelos así obtenidos permiten predecir correctamente la acción del mago en un 72.9% de los turnos, frente a sólo un 58.4% si se usa una estrategia diseñada a mano.

Sin embargo, también se aprecia que la mitad de los turnos corresponden a estados que sólo se visitan una vez. Esto confirma la necesidad de cantidades masivas de datos para poder observar adecuadamente todos los estados de diálogo válidos.

Más recientemente, en (Williams et al., 2005a – 2005b), los mismos investigadores mejoran sus resultados mediante el uso de un MDP parcialmente observable 38

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

(POMDP). Para resolver un problema como el de la gestión de diálogo, caracterizado por la planificación de acciones en condiciones de incertidumbre, parece más adecuado un POMDP que un MDP completamente observable.

Un POMDP se define mediante una tupla {S, Am, T, R, O, Z}, donde S es un conjunto de estados, Am es un conjunto de acciones (del sistema), T define una probabilidad de transición, p(s´|s, am), R define la recompensa esperada, r(s, am), O es un conjunto de observaciones y Z define una probabilidad de observación, p(o´|s´, am). Las transiciones en un POMDP llevan a estados no observados, supuestos (“creencia del sistema”, belief state) en función de cierta evidencia que dan las observaciones. Según esta propuesta, se puede calcular b, “belief state”, mediante:

b´(s´) = k · p(o´|s´, am) · Σs∈S p(s´|am, s) · b(s)

La propuesta de (Williams et al., 2005a – 2005b) es descomponer la observación en dos componentes: un componente discreto, h, que representa la hipótesis del reconocedor del habla, y un componente continuo, c, que representa la medida de confianza. De este modo, las medidas de confianza se integran en el modelo de diálogo representado mediante un POMDP.

En los resultados experimentales, el modelo POMDP supera a los MDP tradicionales. Además, el método descrito permite mejorar automáticamente el funcionamiento de gestores de diálogo sencillos (diseñados a mano) mediante la monitorización del belief state usando la información de las medidas de confianza.

3.4. Comprensión del lenguaje.2

En esta sección se revisan algunas aportaciones relevantes en el área de la comprensión del lenguaje natural, especialmente desde una aproximación estocástica. Los trabajos que se comentan son los siguientes:

AT&T (Levin y Pieraccini, 1995)

2 García Granada D. Fernando, Una aproximación estocástica para la comprensión del lenguaje: p. 97. 39

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

LIMSI (Minker et al., 1996) Radboud University Nijmegen (Sturm et al., 1999) CMU (Rudnicky et al., 1999) Philips (Sougvinier et al., 2000) MIT (Zue et al., 2000) Universidad Politécnica de Valencia (Segarra et al., 2002) University of Cambridge (Young, 2002) Aachen University of Technology (Macherey et al., 2003) Université d’Avignon (Raymond et al., 2003) AT&T (Potamianos et al., 2005)

 AT&T (Levin y Pieraccini, 1995).

En (Levin y Pieraccini, 1995), se describe CHRONUS, un módulo de comprensión diseñado para la tarea ATIS. CHRONUS es un módulo híbrido, que usa un modelo estocástico, aprendido a partir de un corpus anotado, y otros componentes de conocimiento, diseñados a mano (reglas lingüísticas). La comprensión se lleva a cabo en dos fases, realizadas por dos componentes de CHRONUS.

El primer componente es el módulo de análisis local, que recibe las frases en lenguaje natural, efectúa su preprocesado léxico y segmentación conceptual, y genera una(s) plantilla(s), representación semántica de la entrada recibida. El segundo componente es el módulo intérprete y se encarga de resolver las ambigüedades que hayan quedado después del análisis local (es decir, este intérprete modifica las plantillas que recibe teniendo en cuenta la información de contexto, de toda la intervención del usuario así como de anteriores intervenciones).

Es en el primer componente, el módulo de análisis local, donde los investigadores de AT&T usan modelos estocásticos, en concreto modelos ocultos de Markov (HMMs) cuyos estados corresponden a los diferentes conceptos de la tarea. El análisis local consiste en una búsqueda de Viterbi que genera la segmentación más probable de la frase de entrada en segmentos etiquetados mediante conceptos.

40

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

 LIMSI (Minker et al., 1996).

En (Minker et al., 1996), los investigadores del LIMSI abordan la aproximación estocástica a la comprensión del lenguaje y comparan los resultados con los obtenidos anteriormente usando una aproximación basada en reglas (mediante una gramática de casos, a rulebased case grammar). El modelo estocástico considerado es un modelo oculto de Markov de primer orden. Consideran la tarea ARPA ATIS para entrenar el modelo y realizar la comparativa de resultados entre ambas aproximaciones.

En el aprendizaje, se estiman los parámetros del modelo (un bigram backoff HMM) teniendo en cuenta las secuencias de palabras preprocesadas (las observaciones) y sus correspondientes secuencias semánticas (semantic sequences) que definen los estados del modelo. Para llevar a cabo este aprendizaje, se han usado 6.439 consultas de los corpus de ATIS. Se obtiene un modelo de 330 estados (diferentes secuencias semánticas).

La tarea de comprensión se descompone en dos subtareas realizadas por los siguientes módulos: un preprocesador de conceptos (conceptual preprocessor) y un analizador semántico (semantic decoder). El preprocesador de conceptos realiza un análisis morfológico (tratamiento de expresiones compuestas, unificación de formas flexionadas, agrupamiento en clases de palabras de significado parecido, identificación de palabras no relevantes y de palabras fuera del dominio, etc.).

Este análisis reduce el número de entidades léxicas de 1.164 a 737, lo que simplifica bastante la siguiente subtarea. El analizador semántico, usando el HMM aprendido a partir del corpus, genera la secuencia semántica más probable dada la consulta preprocesada que recibe en su entrada.

En la evaluación, se aprecia que la aproximación basada en reglas obtiene mejores resultados, aunque esto era previsible dado que el modelo estocástico considerado es bastante simple. Al tratarse de un modelo de bigramas, no se tiene en cuenta la información del contexto. En trabajo futuro, se plantea la necesidad de incluir esta información de contexto en el modelo para mejorar el rendimiento. 41

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Por otra parte, se destaca que la aproximación estocástica es más flexible ante cambios en la tarea o el idioma. Mientras que la aproximación basada en reglas requiere el diseño y mantenimiento de una gramática de casos, en la aproximación estocástica basta con la tarea de etiquetar un nuevo corpus (tarea más simple que diseñar a mano una gramática) y, a partir del corpus etiquetado entrenar, automáticamente, los modelos.

En (Minker, 1997) se comprueba esto último, al presentar el desarrollo del mismo módulo de comprensión adaptado de la tarea ATIS (tarea sobre consulta de vuelos, en inglés) a la tarea MASK (tarea sobre información turística, en francés). La evaluación muestra que, en la tarea MASK, la aproximación estocástica alcanza menores tasas de error en la identificación de las secuencias semánticas que la aproximación basada en reglas.

 DSIC-UPV (Segarra et al., 2002)

En (Segarra et al., 2002) se aborda la comprensión del lenguaje desde una aproximación estocástica y considerando el problema desde el punto de vista de una traducción. Así, el módulo de comprensión recibe secuencias de palabras (en el caso de un sistema de diálogo, frases o intervenciones del usuario) y genera frames (unidades semánticas que describen el significado de las intervenciones del usuario, en el caso de los diálogos). Y esta traducción de frases a frames se realiza mediante traductores (transducers) aprendidos automáticamente.

La tarea de comprensión se descompone en dos fases. En la primera fase, la frase de entrada, en lenguaje natural, se traduce en una frase semántica, definida en un lenguaje semántico intermedio (intermediate semantic language, ISL) que es secuencial. En la segunda fase, dicha frase semántica se traduce en el frame, o frames, que corresponda. En la traducción a ISL se aplican técnicas de aprendizaje automático (transductores secuenciales), y en la traducción a frames se aplica un sencillo sistema basado en reglas.

La secuencialidad del ISL respecto al lenguaje natural, permite realizar una segmentación de la frase de entrada en intervalos que corresponderán a las unidades semánticas del ISL. De este modo, y si W es el vocabulario de la tarea y 42

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

V es el alfabeto de unidades semánticas, el corpus de entrenamiento será un conjunto de pares (u, v) donde:

v = v1v2⋅⋅⋅vn, vi ∈ V, i = 1 .. n, u = u1u2⋅⋅⋅un, ui = wi1wi2⋅⋅⋅wi|ui|, wij ∈ W, i = 1, ..., n, j = 1, ..., |ui|.

En el aprendizaje del ISL, se han obtenido dos tipos de modelos: un modelo para el lenguaje semántico Ls ⊆ V*, y un conjunto de modelos, uno para cada unidad semántica, vi ∈ V. Ambos tipos de modelos han de ser autómatas de estados finitos estocásticos. En la experimentación, se observa que usando modelos de bigramas se alcanzan menores tasas de error (tanto en identificación de unidades semánticas como de frames) que si se usan otras técnicas basadas en inferencia gramatical, como la MGGI.

 (Potamianos et al., 2005)}

En los sistemas de diálogo hablado, según (Potamianos et al., 2005), la comprensión del lenguaje se encuentra estrechamente vinculada con la determinación del estado de diálogo. En consecuencia, estos autores formulan el problema de la comprensión como la determinación del estado de diálogo St dada la entrada de usuario Wt en términos de secuencias de palabras. Ahora bien, como incluyen la decodificación acústica como fase previa de la comprensión, consideran que la entrada observable es Ot, la secuencia de vectores acústicos, mientras que St y Wt son variables ocultas y la comprensión consiste en una búsqueda conjunta en el espacio de estados Wt, St.

Por tanto, y según la aproximación de máxima verosimilitud, hay que maximizar la distribución de probabilidad a posteriori conjunta:

max St,Wt P(St,Wt|Ot,S1…St-1) = max St,Wt P(Ot|Wt) · P(Wt|S1…St) · P(St|Ot,S1…St-1)

Donde St es el estado de diálogo, Wt es la secuencia de palabras del usuario y Ot es la secuencia acústica observada, en el turno de diálogo t. 43

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

En lugar de realizar esta maximización conjunta, se suele, primero, maximizar la probabilidad a posteriori respecto a Wt y, después, respecto a St:

W’t = arg max Wt P(Ot|Wt) · P(Wt|S1…St-1) S’t = arg max St P(W’t|S1…St) · P(St|S1…St-1)

La segunda maximización corresponde, propiamente, al problema de la comprensión. Las probabilidades se estiman mediante modelos de comprensión λU y de diálogo λD, de manera que el problema se formula como:

S’t = arg max St P(W’t | St, λU)γU · P(St | St-1, λD) γD

Donde γU y γD son pesos dependientes de la tarea y que pueden variar con el tiempo.

Los modelos de comprensión λU considerados son modelos de ngramas (VNSA: Variable Ngram Stochastic Automaton, modelos ya referenciados en anteriores trabajos como Riccardi y Gorin, 2000). Igualmente, los modelos de diálogo λD son modelos de ngramas, considerándose suficiente los bigramas (es decir, P(St|S1…St-1) ≈ P(St| St-1) ) para representar las dependencias entre estados en diálogos con iniciativa del usuario.

En la experimentación, se informa de que la incorporación de los modelos de diálogo λD permiten mejorar los resultados de comprensión entre un 5% y un 15%, en exactitud en el etiquetado de estado de diálogo (LACC: dialogue state label accuracy).

 University of Cambridge (Young, 2002)

También en (Young, 2002) la comprensión del lenguaje se plantea como la obtención de un conjunto de actos de diálogo, Au = {a1, a2, … }, a partir de la señal acústica, Y = Yi, y dado el estado actual del sistema, Ss:

A’u = arg max Au P(Au | Y, Ss) = arg max Au P(Y | Au, Ss) · P(Au | Ss)

44

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Igualmente, el proceso de comprensión se descompone en dos fases sucesivas, en donde la secuencia de palabras, W, constituye el punto intermedio:

A’u = arg max Au { arg max W { P(Y | W) · P(W | Ss) · P(Au | W, Ss) } } W’ = arg max W { P(Y | W) · P(W | Ss) } A’u = arg max Au { P(Au | W’, Ss) }

Como antes, el problema de la comprensión del lenguaje se asocia a la segunda maximización. Ésta, a su vez, se suele llevar a cano introduciendo una representación intermedia, mediante conceptos semánticos, C:

A’u = arg max Au { arg max C { P(Au | C, Ss) · P(C | W’, Ss) } } C’ = arg max C { P(C | W’, Ss) } A’u = arg max Au{ P(Au | C’, Ss) }

La primera ecuación representa el proceso de la extracción semántica, y es habitualmente resuelta usando HMMs. Otras alternativas son los modelos de gramáticas libres de contexto estocásticas (SCFG), y otras variantes de HMM: los modelos de Markov de vector de estados y los modelos de Markov de vector de estados oculto.

La segunda ecuación representa el proceso de combinar el estado del sistema y las representaciones semánticas del usuario para encontrar los actos de diálogo más probable. Para ello, se acostumbra a usar redes bayesianas.

 Radboud University Nijmegen (Sturm et al., 1999)

En (Sturm et al., 1999a), el módulo de comprensión (NLP-module) del prototipo ARISE-NL recibe las frases reconocidas en forma de grafo de palabras y, usando modelos estocásticos (de unigramas y bigramas de conceptos), determina la frase más verosímil así como su significado.

En (Bouwman et al., 1999), se expone cómo se incorporan medidas de confianza en el módulo de comprensión, en ARISE-NL. El grafo de palabras representa todas las hipótesis de palabras de una intervención (utterance) dada. En comprensión, 45

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

una gramática específica de la tarea identifica los conceptos que corresponden a secuencias de palabras significativas. Se construye así su correspondiente grafo de conceptos. Cada concepto permite obtener, al menos, un atributo (el elemento más simple de información).

Cada frase tendrá una probabilidad calculada a partir de las marcas de confianza acústicas de sus palabras (dadas por el reconocedor), la probabilidad del modelo de lenguaje y la probabilidad de la gramática de conceptos. Para determinar la fiabilidad de un atributo, se consideran las frases dentro de un rango predeterminado respecto a la más probable. Si en todas estas frases aparece cierto atributo, éste será fiable, y, en caso contrario, se marcará como inseguro.

El parámetro más importante en esta técnica es el umbral que establece el rango de frases a considerar. Si el rango es demasiado amplio, la mayoría de las frases correctas tendrán competidores y, en consecuencia, aumentará el número de atributos correctamente reconocidos pero marcados como no fiables (false rejection rate). Si el rango es muy pequeño, se aceptarán hipótesis incorrectas y, por tanto, atributos incorrectamente reconocidos serían marcados como fiables (false acceptance rate). El valor óptimo ha sido determinado experimentalmente.

Este uso de las medidas de confianza en comprensión repercute en la funcionalidad del SDS, dada la selección de confirmaciones condicionada a la confianza de los atributos que se lleva a cabo en el gestor de diálogo, (Sturm et al., 1999a) y (Sturm et al., 1999b).

 Aachen University of Technology (Macherey et al., 2003)

En (Macherey et al., 2003a), donde se presenta un mecanismo de detección de errores en reconocimiento (ASR) y de comprensión (NLU) y su uso en gestión del diálogo, se trata brevemente la aproximación seguida en el desarrollo del módulo NLU. Dada la transcripción de la señal reconocida por el ASR, el módulo NLU determina la secuencia de conceptos más probable según los modelos utilizados. Se aplica una metodología basada en máxima entropía (ME) para abordar la tarea de comprensión. Usando el algoritmo GIS (Generalized Iterative Scaling), se estiman los parámetros asociados a cada función característica que se considera 46

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

en el modelo de ME. Las medidas de confianza facilitadas por el ASR constituyen una función característica más a integrar en el cómputo del modelo de ME.  Université d’Avignon (Raymond et al., 2003)

En (Raymond et al., 2003) y (Raymond et al., 2004), se cuestiona el reconocimiento (ASR) basado en listas Nbest generadas por enumeración de los mejores N caminos en los grafos de palabras. Estas listas se suelen ordenar de acuerdo a una combinación de indicadores acústicos y de modelo de lenguaje, sin implicar otros niveles lingüísticos. Las diferencias entre las hipótesis acostumbran a ser pequeñas y pueden estar originadas en ruidos o efectos del habla espontánea. Esto supone una gran debilidad desde la perspectiva del sistema en su conjunto (y del gestor de diálogo, en particular), pues no todas las palabras tienen la misma importancia y todas las hipótesis que difieran sólo por los efectos del habla espontánea pueden considerarse equivalentes.

La alternativa planteada por este grupo de investigadores de la Universidad de Avignon es generar, además de la lista de las mejores N hipótesis de palabras, otra lista con las mejores N interpretaciones. Cada interpretación reflejaría un significado distinto, desde el punto de vista del gestor de diálogo, es decir, estaría asociada a un determinado estado de diálogo, historia del diálogo, o creencia del sistema (system belief). Las interpretaciones constan de secuencias de conceptos, deducidas de modelos conceptuales (SFST, Stochastic Finite State Transducers, propios del gestor de diálogo), que se aplican a los grafos de palabras reconocidas.

La lista de las mejores N hipótesis de palabras se estructuraría entonces de acuerdo a las distintas interpretaciones que se encontrara. Las interpretaciones se ordenarían por el indicador de su primera hipótesis de palabras; y las hipótesis de palabras, correspondientes a una interpretación dada, simplemente por sus indicadores (scores).

El objetivo de la arquitectura propuesta es facilitar al gestor de diálogo un número reducido de hipótesis, pero que sean diferentes en su significado y estén validadas por medidas de confianza. Se ha realizado una evaluación con un corpus de diálogos de consultas turísticas de France Telecom, y se informa de reducciones 47

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

de los errores de comprensión (significativas en concept error rate y understanding error rate, y moderadas en word error rate, como se podía esperar dada la naturaleza de la nueva fuente de información considerada).

En (Raymond et al., 2004), además, se propone una nueva aplicación para el aprendizaje automático de los árboles de decisión, que permiten deducir las interpretaciones, considerando las confianzas acústicas de las palabras que expresan los conceptos, así como la consistencia lingüística y semántica de las hipótesis. Este aprendizaje posibilita una mejora muy significativa en términos de understanding error rate.

En (Béchet et al., 2004), siguiendo la misma línea de investigación, se trata en más detalle el módulo de comprensión. Se destaca la vinculación más estrecha entre los módulos de reconocimiento y comprensión, que permite mejorar la exactitud del reconocimiento y proporcionar mejores interpretaciones para uso del gestor de diálogo.

 MIT (Zue et al., 2000)

En (Zue et al., 2000), se expone cómo funciona TINA, módulo de comprensión desarrollado por el grupo de investigadores del MIT, integrado en el sistema JUPITER. Este analizador transforma secuencias de palabras en representaciones semánticas o frames, y, en JUPITER, actúa en dos situaciones:

 Comprensión del usuario (query understanding). Procesa las intervenciones del usuario, seleccionando las mejores hipótesis del grafo de palabras dado por el ASR. Utiliza una gramática, diseñada a mano, que codifica información sintáctica y semántica. En la fase final del proceso, se consideran los valores (scores) asociados al reconocimiento y calculados por el analizador, y así como el contexto previo del diálogo.  Comprensión de la base de datos (content understanding). De modo automático, tres veces al día, los informes meteorológicos (textos redactados por los expertos del National Weather Service) se traducen a frames.

48

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

 CMU (Rudnicky et al., 1999)

En (Rudnicky et al., 1999b), la comprensión se realiza con un analizador semántico Phoenix, que usa una gramática derivada del sistema CMU ATIS, aumentada con transcripciones recopiladas del uso del propio prototipo (CMU Communicator). La correspondencia entre las frases del usuario y los conceptos (topic) se establece mediante un conjunto de redes receptoras (receptor nets) asociadas con cada schema.

En (Rudnicky y Xu, 1999a), este conjunto de conceptos o redes, resultado del analizador Phoenix, se correlacionará con manejadores (handlers) de una agenda, dado que, en este papel, se sustituye la aproximación al gestor de diálogo basada en scripts por otra, más dinámica, basada en una agenda.

 Philips (Sougvinier et al., 2000)

En (Sougvinier et al., 2000), los investigadores de Philips describen su módulo de comprensión. Éste recibe del ASR un grafo de palabras y lo interpreta valiéndose de tres componentes principales:

1. Una gramática libre de contexto estocástica, que, dada una hipótesis de frase, W = (w1, ..., wn), proporciona una secuencia de segmentos, asociados a conceptos o a frases de relleno, (c1, ..., cN), donde cada segmento ci está asociado a una secuencia de palabras (wj, ..., wk) de la frase W, y se identifica con un concepto Ci con una cierta probabilidad, P(ci|Ci).

2. Un modelo de lenguaje de conceptos (concept LM), que proporciona probabilidades a las secuencias de conceptos. Como el número de conceptos en una frase suele ser pequeño, es suficiente un modelo de bigramas.

P(W) = P(CN+1|CN) · Π i=1 .. N P(ci|Ci) · P(Ci|Ci-1)

49

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

3. Un modelo de lenguaje de relleno (filler LM), que cubre las partes de la intervención que no puedan analizarse. Se usa un modelo de bigramas a nivel de palabras.

La posibilidad de un análisis parcial, con segmentos significativos y otros de relleno, proporciona la robustez necesaria para tratar los problemas del habla espontánea.

Ante la habitual dificultad de la falta de corpus de tamaño suficiente para aprender los modelos, en (Sougvinier et al., 2000) se discuten varias posibilidades:

 Uso de modelos categorizados, que, en el caso de bigramas, permitan el cómputo: P(w2|w1) = P(w2|c(w2)) · P(c(w2)|c(w1))

 Ampliación artificial del corpus de entrenamiento. Invirtiendo el proceso de análisis, se pueden obtener frases a partir de la gramática, que constituirán un corpus artificial para entrenar modelos de ngramas. Para elegir aleatoriamente las reglas de la gramática se usan métodos Monte Carlo.

 Adaptación online no supervisada. Se trata de actualizar los modelos justo después de cada reconocimiento. Los resultados experimentales muestran que esta adaptación empeora los modelos si se usa sólo la mejor hipótesis del ASR. En cambio, resultó efectiva si se usaban todas las hipótesis de la lista N- best. El motivo es que, a diferencia de los errores de reconocimiento, las partes bien entendidas aparecen en la mayoría de las hipótesis.

Finalmente, en cuanto módulo de comprensión, en (Sougvinier et al., 2000) se apuntan algunas ideas innovadoras para mejorar su exactitud usando fuentes de información que corresponden a otros módulos “posteriores” en la arquitectura habitual de los SDS:  Incorporar restricciones de la base de datos. Dado I, el conjunto de atributos presentes en la hipótesis, se puede calcular n(I), el número de tuplas en la BD que coinciden con los valores en I. Se define la distribución: PDB(I) = { 1, si 50

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

n(I)>0; 0, si n(I)=0 }. Y la probabilidad de la hipótesis se reajusta a P(W) · PDB(I(W)). La experimentación muestra una mejora del 21% en tasa de error de atributos.

 Aplicar pruebas de consistencia con la historia del diálogo (system belief). Consiste en rechazar las hipótesis que, tras combinarlas con la actual creencia del sistema, no se refieran a ninguna entrada válida en la BD. Permite detectar información contradictoria con los anteriores turnos y que, presumiblemente, corresponde a errores de reconocimiento.

3.1.1. Gestor del Dialogo3

En esta sección se revisan algunas aportaciones relevantes en el área de la gestión del diálogo, en particular desde una aproximación estocástica. Se tratan las soluciones dadas a la estrategia de diálogo, los modelos de diálogo, la historia del diálogo y, en general, la representación de la estructura de la tarea. Los trabajos que se comentan son los siguientes:

AT&T (Levin et al., 1999) Radboud University Nijmegen (Sturm et al., 1999) CMU (Rudnicky et al., 1999) University of Colorado (Ward y Pellom, 1999) LIMSI (Lamel et al., 2000) MIT (Zue et al., 2000) Philips (Sougvinier et al., 2000) Universidad Politécnica de Madrid (Córdoba et al., 2001) Aachen University of Technology (Macherey et al., 2003)

El aspecto más determinante en el módulo gestor del diálogo es la estrategia de diálogo que se seguirá. Por ello, es habitual asunto de discusión en la literatura, centrándose en el mismo diversos artículos como (Lamel et al., 2000b), (Rosset et al., 1999) y (Sougvinier et al., 2000).

3 Torres Goterris Francisco, Sistemas de diálogo basados en modelos estocásticos: p. 83. 51

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Los modelos de diálogo deben de caracterizar, mediante estados, las situaciones posibles de diálogo en la tarea considerada, y mediante relaciones, conexiones o transiciones, las secuencias de estados que describan cualquier diálogo posible en dicha tarea.

Llamamos historia de un diálogo a cualquier información que se haya obtenido y/o facilitado, por parte del sistema, o por parte del usuario, en cualquiera de los turnos previos y el turno actual de un diálogo determinado.

 LIMSI (Lamel et al., 2000)

En (Lamel et al., 2000b) y (Rosset et al., 1999), los investigadores del LIMSI describen su metodología de diseño y prueba de diferentes estrategias así como exponen la estrategia implementada en su sistema ARISE, una estrategia de iniciativa mixta, en dos niveles, de manera que se permite más libertad al usuario cuando el diálogo se desarrolla correctamente y se restringe su iniciativa, tomándola el sistema, cuando se detectan problemas en la comunicación. En (Rosset et al., 1999), se distinguen diferentes clases de estrategias, o de principios que las determinan:

 Estrategias dependientes de aspectos ergonómicos o de usabilidad, como la flexibilidad permitida, las capacidades de negociación y navegación, el tipo de iniciativa, o el contacto con el usuario para mantenerle al corriente del progreso del diálogo.

 Estrategias dependientes de la metacomunicación, como la identificación de tarea o de cambio de tarea (aspecto estrechamente relacionado con la navegación), y la detección de errores (iniciada por el sistema si se detecta información contradictoria, o por el usuario si cambia de idea o si detecta un error del sistema).

 Estrategias dependientes del conocimiento de la tarea, que determinan la interdependencia entre las restricciones. Por ejemplo, para la subtarea de 52

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

reservas es condición necesaria completar antes la subtarea de selección de un tren específico (puesto que el precio depende del horario y del tipo de tren). Siguiendo con el ejemplo, ante la tarea de reserva, el sistema puede adoptar diferentes estrategias: a) preguntar siempre si el usuario desea hacer una reserva; b) suponer, de entrada, que ésa será la intención del usuario.

 En todo diálogo se distinguen varias fases (ver (Lamel et al., 2000b) y (Rosset et al., 1999)):

 Adquisición: el sistema obtiene la información necesaria para completar la tarea.  Negociación: cuando el usuario introduce cambios en función de la información que le devuelve el sistema (como, por ejemplo, la relajación de las restricciones de búsqueda después de que el sistema informe de que no hay información en la BD que satisfaga la petición precedente).  Navegación: cuando el usuario cambia de una tarea a otra, o cuando pregunta por la funcionalidad del sistema o los tipos de información disponible.  Postaceptación (postacceptance): cuando el usuario acepta la solución propuesta, el diálogo puede pasar a abordar otra tarea, sea por petición del usuario o por sugerencia del sistema. Si esta posibilidad se rechaza, se alcanza el cierre del diálogo.  Metacomunicación: fase relativa a la detección y tratamiento de los errores.

El gestor de diálogo usa y mantiene varias fuentes de conocimiento que determinan el estado del diálogo: la historia de pares intercambiados entre sistema y usuario, la historia completa del diálogo y un modelo de la tarea.

La estrategia de recuperación de errores es diferente según la fase del diálogo en la que se producen: a) en la fase de adquisición, se puede verificar cualquier información contradictoria; b) en la fase de negociación, sólo se permiten cambios en la hora y restricciones adicionales (pues se supone que ya se han confirmado los atributos básicos: origen, destino y fecha del viaje). 53

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

El sistema iniciará subdiálogos restringidos, orientados a obtener un dato específico, cuando detecte dificultad en obtener alguno de los atributos básicos o cuando exista una incoherencia entre lo almacenado por el sistema y el nuevo dato recibido. En cualquier caso, la corrección de errores es una cuestión compleja, dado que éstos también puede presentarse durante los mismos subdiálogos iniciados para su tratamiento.

Se puede decir que (Lamel et al., 2000b) es una recapitulación de aspectos generales de las investigaciones realizadas en el LIMSI, ya expuestos en (Lamel et al., 2000a) y (Rosset et al., 1999).

 Radboud University Nijmegen (Sturm et al., 1999)

En (Sturm et al., 1999a) y (Sturm et al., 1999b), investigadores responsables del ARISE-NL discuten varios aspectos relativos a la estrategia de diálogo a la luz de las experiencias con los primeros prototipos del sistema. Las conclusiones principales de su estudio son:

 Una estrategia de confirmaciones condicionada a las medidas de confianza. El uso exclusivo de una estrategia de confirmación implícita resulta problemático, si hay errores de reconocimiento, pues el usuario no acierta a corregir al sistema cuando, al mismo tiempo, se le solicita nueva información. Por otra parte, usar sólo una estrategia de confirmación explícita (ARISE-NL ’98) facilita la corrección de errores y no incrementa la duración del diálogo, en segundos, porque permite respuestas muy cortas. Sin embargo, aumenta el número de turnos y los usuarios juzgan que la interacción es tediosa. Estas observaciones han llevado (ARISE-NL ’99) a aplicar una combinación de confirmaciones, implícitas y explícitas, en función de la confianza en el reconocimiento de los datos. Así, si el dato tiene una confianza alta, se confirmará implícitamente; sino, se usa una confirmación explícita.

 Iniciativa mixta, superior a una interacción dirigida por el sistema. La iniciativa mixta permite el desarrollo de diálogos más naturales. Los usuarios expertos pueden reducir la duración del diálogo, proporcionando antes los datos de la 54

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

consulta. Los usuarios noveles pueden dejarse guiar, respondiendo a todas las preguntas del sistema, pero también éstos usan su iniciativa en casos como el rechazo a un dato incorrecto que, habitualmente, se acompaña con la corrección o aporte espontáneo del dato válido.

 El manejo de excepciones (exceptions handling o zooming). Conforme a la estrategia en dos niveles, característica de ARISE, cuando no se consigue (por error de reconocimiento o por falta de iniciativa propia) que el usuario suministre la información necesaria, el sistema conmuta a la estrategia dirigida, proporcionando consejos a cerca de las opciones disponibles.

 Navegación flexible, como aproximación a una completa capacidad de negociación (no disponible en los actuales SDS). El sistema ARISE responde con la información relativa a un único viaje, el que mejor se ajuste a la consulta del usuario. A continuación, se abre un subdiálogo de navegación donde el usuario podrá preguntar por trenes anteriores o posteriores, conexiones con algunos cambios, viajes de vuelta, otras conexiones, etc. Si el usuario acepta esta navegación (porque no le interesa la primera respuesta del sistema) pero no ejerce su iniciativa, el sistema aplica zooming y el usuario entrará en un menú. Pese a las mejoras en la parte de negociación, ésta se juzga aún demasiado rígida.

 Defectos en el diseño de los escenarios o en su interpretación. Si bien el uso de escenarios tiene la ventaja de controlar el uso del sistema y simplificar su evaluación, se aprecia que es muy difícil presentar los escenarios de modo que no sean ambiguos ni tampoco sugieran expresiones concretas a los usuarios.

Por otra parte, en los escenarios complejos, con varias tareas, se observó que bastantes usuarios no los completaban porque no intentaban llevar a cabo el subdiálogo de navegación (las razones serían varias: no comprendieron que eran tareas a cumplir, tenían más tendencia a aceptar información incorrecta porque realmente no la necesitaban, o no se daban cuenta de que obtenían información incorrecta).

55

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

En cuanto a modelos de diálogo, en (Baggia et al., 1999) se discuten distintas técnicas para obtener modelos de lenguaje adecuados para los SDS, teniendo en cuenta aspectos como el tamaño reducido de los corpus de entrenamiento o como las restricciones disponibles en un sistema de diálogo. Se plantean las siguientes alternativas:

 Modelos de segmentos de conceptos (conceptual segment modelling). Permiten una comprensión automática robusta, siendo especialmente eficientes para tratar problemas de ambigüedad en frases y palabras en francés.  Modelos dependientes de estados de diálogo (dialoguestate dependent language models). Presentan la dificultad del elevado número de posibles estados de diálogo, que llevaría a crear muchos modelos, y algunos correspondientes a estados apenas presentes en el corpus. Además, existen grupos de estados de diálogo que conducen a respuestas del usuario muy parecidas. Se comentan diversas soluciones: interpolación, clasificación automática, uso de conocimiento adicional...

 Modelos iniciales sintéticos (bootstrap language models). Se obtienen cuando se dispone de muy pocos datos de entrenamiento, al aplicar métodos MonteCarlo para incrementar automáticamente la cantidad de datos. A partir del corpus artificial así generado, pueden entrenarse modelos de ngramas.

 MIT (Zue et al., 2000) El gestor de diálogo (turn manager) de JUPITER (Zue et al., 2000) no ejerce el decisivo control que este módulo tiene en otros sistemas. Parece que, en la arquitectura GALAXY II, muchas de las funciones habituales de este módulo han sido transferidas al hub programable a través del que se conectan todos los módulos.

Aun así, al turn manager se le asigna el cometido de interpretar la petición del usuario y preparar la respuesta del sistema. Sin embargo, la necesaria comunicación con los otros módulos (la aplicación backend de acceso a la BD, el analizador TINA, el generador de respuestas GENESIS...) se encuentra regulada por el hub. 56

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

a) Para dotarlo de cierta independencia respecto a la tarea, el comportamiento de este módulo se ajusta por medio de una tabla de control de diálogo, externa a su código. En dicha tabla se especifican: los conjuntos de condiciones necesarias para llevar a cabo ciertas acciones;

b) las secuencias de operaciones que se activarán si se cumple un conjunto determinado de condiciones. Esta tabla, por tanto, recopila un conjunto de reglas que gobiernan la conducta del sistema.

 CMU (Rudnicky et al., 1999)

En (Rudnicky y Xu, 1999a) y (Rudnicky et al., 1999b), se describe el gestor de diálogo integrado en el Carnegie Mellon Communicator. Se ha diseñado como un módulo independiente de la tarea y cuyo comportamiento se fija mediante un script dependiente de la tarea, además de por la acción complementaria de tres agentes de dominio (agente de información de viajes, agente de interpretación de fechas y horas, y agente de modelo de usuario).

El análisis de diálogos de planificación de viajes, mantenidos por personas, ha permitido implementar un conjunto de guiones (scripts) que capturan las actividades convencionales asociadas a esa tarea compleja. Estas actividades, o subtareas específicas, constituyen las planificaciones (schema) que se agrupan para formar los scripts, estructuras que proporcionan al sistema los modos de interaccionar con el usuario. Además de los scripts, el sistema usa una estructura de datos objetivo (target) donde se almacena el producto (product) de la interacción.

Se trata, por tanto, de un gestor de diálogo basado en scripts. Un script determina una secuencia explícita de conceptos propios de la tarea. Cada concepto (topic) se concreta en una tarea de rellenar un formulario (formfilling), abordada con iniciativa mixta, pudiendo el usuario seguir el orden que desee para suministrar los valores. Por parte del sistema, existe una estrategia según la cual se preguntará al usuario por las posiciones vacías del formulario (slots) en función de su relevancia para determinar o acotar la información solicitada.

57

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

La estructura basada en schema puede usarse tanto para obtener estrategias por defecto que aborden diferentes objetivos parciales como para establecer los detalles de la interacción en situaciones específicas. En cuanto a la estrategia, se consideraron dos políticas. Una política es rígida, pues se obliga al usuario a responder preguntas en un orden fijo (iniciativa del sistema); la otra, libre, pues permite al usuario aportar información (iniciativa mixta). La ocurrencia de entradas incorrectas dictaría cuándo se conmutaría de la iniciativa mixta a la otra más rígida.

En (Rudnicky y Xu, 1999a) se plantean, también, las limitaciones de la aproximación basada en scripts. Éstos están demasiado relacionados con la estructura de datos a rellenar (product), estructura que resulta ser demasiado estática, de tipo formulario. En la tarea de planificación de viajes, conviene disponer de una estructura dinámica, que cambie a lo largo de la sesión, y que facilite su navegación. Por todo ello, en (Rudnicky y Xu, 1999a), se introducen nuevas estructuras de datos:

 Un producto (product) dinámico, representado por un árbol. Se permite modificar su estructura, en el curso de una sesión, añadiendo ramas que representen nuevos itinerarios que solicite el usuario. Para ello, se define una librería de subárboles y mecanismos para vincularlos a la estructura del producto. A cada nodo del árbol se asocia un manejador (handler), que consta de: a) un conjunto de receptores asocia-dos a las redes de entrada; b) una transformación a aplicar para obtener un valor; c) na especificación de lo que el sistema puede decir sobre la información que se maneja en el nodo. Un handler equivale a un schema, y gestiona un subdiálogo acerca de una información específica.

 Una agenda, que viene a ser una pila (stack) generalizada, sustituye al script fijo. La agenda es una lista ordenada de conceptos (topics) que especifica la estrategia completa para llevar a cabo la tarea. Cuando se recibe una nueva entrada del usuario, la agenda explora el árbol producto de izquierda a derecha y en profundidad, invoca, según este orden, a los manejadores, y éstos tratan de interpretar la entrada del usuario. La agenda permite adaptar 58

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

dinámicamente el producto (conforme a la iniciativa del usuario en una sesión dada). Así, cuando un manejador se convierte en foco de atención, éste es promocionado a la posición superior de la agenda y, además, para mantener los conceptos en su contexto, se aplica una operación similar a la rama que contiene al nodo (subtree promotion). La flexibilidad es completa, pues tanto el sistema como el usuario pueden reordenar los elementos en la agenda.

En cuanto a modelos de diálogo, en (Rudnicky y Xu, 1999a) se consideran dos aproximaciones:

 Sistemas basados en grafos. Donde se enumeran todos los posibles estados de diálogo y las transiciones permitidas, según la ocurrencia de sucesos específicos. Los grafos suelen ser árboles y presentan limitaciones en su uso, como dificultad para conmutar a otro concepto, codificado en un subárbol diferente, o dificultad para navegar en un árbol dado.

 Sistemas basados en frames. La gestión del diálogo consiste en rellenar formularios. Hay que supervisar que el formulario se complete, fijar los elementos dados por el usuario y preguntar al usuario por los que no haya facilitado. Son más flexibles en la obtención de datos, pues no se requiere seguir un orden particular (a diferencia de lo que ocurre en el recorrido de los árboles), pero menos en cuanto que no permiten modificar la estructura de los formularios.

Para la tarea de planificar viajes, en el CMU Communicator, no resulta adecuado el procedimiento de completar un formulario puesto que no se conoce de antemano la estructura exacta del viaje, estructura posiblemente compleja si consta de varios itinerarios. Por ello, la tarea se modela mediante árboles, aunque no se abandona el concepto de formulario. Un itinerario complejo será una estructura jerárquica de formularios.

En cuanto a la historia del diálogo, en (Rudnicky et al., 1999b), el conocimiento de la tarea de planificación de viajes se formaliza en dos estructuras de datos: 59

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

a) un producto (product) que guarda el resultado de la interacción; b) un conjunto de schema, que describe el modo de acceso a los elementos del producto. Dada la tarea, las entidades más importantes del producto son los itinerarios.

Un itinerario es una estructura de datos jerárquica o arborescente. El árbol del itinerario es construido interactivamente, con las restricciones impuestas por el usuario y con el conocimiento del dominio de que dispone el sistema. Construir un itinerario requiere dos actividades:

a) definir la estructura del árbol; b) asignar valores a esa estructura con datos específicos de la tarea. Los constructores de schema se usan para construir y editar la estructura del producto.

 University of Colorado (Ward y Pellom, 1999)

En (Ward y Pellom, 1999), se presenta el sistema CU Communicator, desarrollado en el Center for Spoken Language Understanding, de la Universidad de Colorado. La arquitectura del sistema es similar a la de Galaxy, con un módulo hub que conecta todos los servidores y retransmite los mensajes que intercambian. Usan los mismos módulos de reconocimiento y de comprensión que en el sistema de la CMU: SphinxII y una versión modificada de Phoenix, respectivamente. En su gestor de diálogo se ha implementado una estrategia flexible, que no obedece a un guión o conjunto de reglas, sino que está dirigida por sucesos que afecten al cambio del contexto del diálogo (event driven dialog manager). Entre las funciones de este módulo se citan:

 Integrar la interpretación de la entrada (frames recibidos) con el contexto del diálogo;

 Resolver ambigüedades de interpretación, estimar la confianza de la información obtenida;

60

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

 Solicitar al usuario aclaraciones sobre la interpretación o el contexto, pedir al usua-rio la información que falte.

 Construir la consultas a la base de datos (SQL queries);

 Enviar información al módulo de generación de lenguaje natural para su presentación al usuario.

En este gestor de diálogo no se consideran modos separados de iniciativa del usuario o iniciativa del sistema. Cuando el sistema dispone de suficiente información para atender la consulta, lo hace, y si no, pregunta por lo que necesita. El usuario, sin embargo, puede responder lo que quiera, y el sistema, tras analizar la posible nueva petición, fijaría su objetivo en el frame resultante.

La estrategia event driven seguida consiste en que, una vez integrada la interpretación de los frames de usuario con el contexto del diálogo, el gestor de diálogo examina este contexto para decidir la acción a llevar a cabo. Sus alternativas, listadas en orden de prioridad, son las siguientes:

 Resolución de ambigüedades (Clarify if necessary). Interacción con el usuario para obtener una interpretación única y fiable.

 Cierre si la consulta ha terminado (Sign off if all done).

 Acceder a la BD e informar al usuario (Retrieve data and present to user). Obtener los resultados de la consulta a la BD y presentar al usuario la información de la mejor tupla.

 Petición de información (Prompt user for required information). Solicitar los datos que falten para construir la consulta a la BD. Se establece una escala de prioridades en la petición de datos para rellenar los slots vacíos.

El acceso a la información de la BD a través de Internet plantea riesgos de retrasos, a veces prolongados, en el curso del diálogo. Por ello, el gestor de 61

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

diálogo comprueba que los registros solicitados no se encuentren ya en su memoria local, antes de enviar la petición a través de la red. También se fija un límite de espera (30 segundos) a la obtención de la página html de resultados. Si se excede, el gestor de diálogo avisa al usuario de que la causa de la demora está en el acceso a Internet.

Además, se ha procurado que el gestor de diálogo sea bastante independiente de la tarea, mediante una representación declarativa. Así, la mayoría de la información específica del dominio se encuentra en ficheros externos al código C del módulo. En cuanto al uso de la historia del diálogo, en (Ward y Pellom, 1999), la estrategia del gestor de diálogo se encuentra determinada por dicha historia, aquí denominada contexto actual. El contexto es un conjunto de estructuras de C, tratándose de una representación conceptual basada en formularios.

Cada formulario consta de un conjunto de campos, y cada campo de un conjunto de punteros: 1º, al nombre del campo; 2º, a su valor; 3º, al análisis de comprensión (frame) que se corresponde con el campo; y otros punteros, a plantillas para generar salidas que usen el valor del campo, tanto en lenguajes formales (por ej., SQL, para consultar la BD) como naturales, para el generador de respuestas. Este mecanismo permite una fácil ampliación para aplicaciones multilingües.

 Universidad Politécnica de Madrid (Córdoba et al., 2001)

En (Córdoba et al., 2001), el Grupo de Tecnología del Habla, de la Universidad Politécnica de Madrid, presenta los resultados obtenidos en el proyecto IDAS (Interactive Directory Assistance Service). Por la naturaleza del proyecto, se destaca el módulo de reconocimiento del habla. De todos modos, es interesante observar las características que se recomiendan para el módulo gestor de diálogo.

Dadas las serias dificultades para el ASR (ruido telefónico, gran tamaño del vocabulario, alto grado de similitud entre muchos apellidos en español), y la imposibilidad de disponer de un ASR perfecto, el gestor de diálogo tiene que 62

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

habilitar soluciones: solicitudes de confirmación al usuario y peticiones de deletreo de nombres. Se ha elegido un estrategia de diálogo dirigida por el sistema, por considerarla la más adecuada para incrementar el éxito de los diálogos.

En (San-Segundo et al., 2001a) se describe la propuesta de este grupo, relativa a la metodología de diseño de los gestores de diálogo. Se trata de una metodología similar al modelo de ciclo de vida, planteada en el proyecto DISC, y que se organiza en 5 pasos:

 Análisis de la base de datos. Se describe, mediante un diagrama entidad– relación (E–R), la información contenida en la BD, objeto del servicio ofrecido por el SDS. Las entidades estarán asociadas a los objetivos que ha de lograr el sistema. Los campos clave serán los elementos de información que el usuario deberá aportar obligatoriamente y que, por tanto, definirán las interacciones del diálogo.

 Diseño por intuición (o brainstorming). Fase en la que se determinan los objetivos del servicio ofrecido (entidades cuyo valor se consultará) así como las secuencias de acciones y los elementos de información necesarios para alcanzarlos.

 Diseño por observación. Donde se analizan diálogos usuario–operador humano en una tarea o servicio igual o parecido. El objetivo es depurar las alternativas planteadas en el diseño por intuición, mediante el análisis, en estos diálogos reales, de: a) los objetivos (frecuencia de petición, secuencias de consulta, información dada por el operador para satisfacerlo); b) los elementos de información (secuencias de consulta, clasificación en obligatorios u opcionales, en simples o complejos, modos de especificación y ordenamiento); c) la negociación (información de ayuda a la toma de decisión del usuario, número de alternativas simultáneas que el operador plantea).

 Diseño por simulación, usando la técnica del mago de Oz. En esta fase se busca mejorar el flujo de diálogo. Para ello, se recopilan medidas acerca de los experimentos realizados: anotaciones del sistema y respuestas de los usuarios 63

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

a cuestionarios. Esto permite evaluar las decisiones de diseño de las fases previas.

 Diseño por mejora iterativa. Mediante el estudio del funcionamiento del prototipo de SDS automático, se pueden plantear y refinar:

a) estrategias de confirmación (implícita, explícita, rechazo...); b) mecanismos de recuperación de errores (comandos especiales para corrección puntual o para reinicio de la sesión); c) adaptación al usuario (se establecen 4 niveles de habilidad de usuario, y se puede conmutar de nivel en función del número de errores, o de confirmaciones positivas, que se produzcan).

 AT&T (Levin et al., 1999) Dentro de la aproximación estocástica, en (Levin et al., 1999) y (Levin et al., 2000a), se presenta el algoritmo del gestor de diálogo, formalizado como un proceso de decisión secuencial. S = S tIwhile St <> SF { At = NextAction(St) invoke A tOt = environment response to At St+1 = NextState(St, At, Ot) = t+1 }

En (Levin et al., 1998) y (Levin et al., 2000a), se describen las sucesivas estrategias obtenidas en un proceso de aprendizaje automático de las mismas, dirigido por la minimización de una función objetivo que mide el coste del diálogo. A continuación, se enumeran estos hitos en el aprendizaje de la estrategia y la justificación de que se alcancen:

 Estrategia de cierre inmediato (closing). Esta estrategia, aprendida tras 20 diálogos, tiene un coste muy alto, debido a la obvia insatisfacción del usuario.

64

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Sin embargo, tiene menos coste que una estrategia aleatoria (punto de partida del aprendizaje).  Estrategia con apertura de cortesía (greeting), a la espera de la iniciativa del usuario. Aprendida después de 12.000 diálogos, porque aumenta el número de restricciones (datos facilitados por el usuario) en el primer turno y, en consecuencia, reduce la duración del diálogo.  Estrategia con estado opcional de restricción (constrain). Aprendida tras 90.000 diálogos, porque formular preguntas que restrinjan el rango de la consulta supone que se reduzca el coste de recuperación de información de la base de datos.  Estrategia con estado opcional de relajación (relax). Aprendida tras 700.000 diálogos, al comprobar que ampliar el rango de la consulta evita las situaciones anómalas de obtener conjuntos vacíos de información de la base de datos. En (Levin et al., 2000b), se describe la estrategia implementada en DARPA Communicator. Se establece un compromiso entre la iniciativa permitida al usuario y el rendimiento del ASR. De entrada, el sistema permite el máximo de iniciativa al usuario. Sin embargo, cuando se detectan problemas (como la petición reiterada de un mismo atributo), el sistema gradualmente reduce esa iniciativa, aplicando modelos de lenguaje más restrictivos que se reflejan en preguntas al usuario cada vez más específicas. Si, tras varios intentos, el problema persiste, se conmuta al modo de iniciativa estricta del sistema, donde cada atributo deberá ser explícitamente confirmado. Se trata, por tanto, de una estrategia que coincide claramente con la estrategia de dos niveles del LIMSI.

La estrategia, o flujo funcional del diálogo, en la tarea de planificación de viajes implementada en DARPA Communicator es la siguiente:  Identificación de usuario (sign in). Fase inicial, opcional, que permite al usuario activar su perfil. Existe un usuario invitado, sin perfil particular.  Planificación de vuelo (flight planning). Constituye la parte principal del diálogo y, para cada itinerario, se estructura en dos fases: 1ª) Recopilación (information gathering). El sistema solicita todos los datos obligatorios para construir la consulta a la BD. El usuario puede tomar la iniciativa y proporcionar varios datos a la vez, incluyendo datos opcionales que el sistema también añadirá a la consulta a la BD. 65

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

2ª) Presentación y negociación (flight presentation and negotiation). Tras recopilar la información necesaria y lanzar la consulta a la BD, el sistema presenta los resultados. Si la consulta no proporciona resultados, el sistema toma la iniciativa de relajar alguna condición relativa a atributos opcionales e informa al usuario de ello. Si la consulta proporciona muchos resultados, éstos, en principio, se ordenan por precio. El usuario, entonces, tiene las opciones de: a) aceptar el resultado presentado; b) recorrer la lista de resultados; c) filtrar la lista, proporcionando restricciones suplementarias.  Planificación de servicios en destino (ground arrangements). Constituye una fase opcional del diálogo donde el usuario puede reservar hoteles o coches. Se estructura en dos fases como la planificación del vuelo.  Presentación de resumen de itinerario (itinerary summary presentation). Opcional, a petición del usuario.  Encuesta y cierre (user satisfaction polling and closing remarks).

En resumen, la estrategia de diálogo en (Levin et al., 2000b) consiste en desglosar una tarea compleja en subtareas. Cada subtarea tiene un objetivo específico y se desarrolla un subdiálogo que busca cumplirlo. Con independencia de su objetivo, los subdiálogos tienen un esquema común: primero, recopilación de datos; segundo, presentación de resultados y posible negociación.

En cuanto al uso de la historia del diálogo, en (Pieraccini et al., 1997), en la arquitectura AMICA, el curso de diálogo depende de la historia (dialogue state), que guarda la información disponible desde el inicio del diálogo en una estructura de pares {nombre, valor}, y el estado (control state), que identifica una situación en el diagrama de flujo que regula el diálogo.

En (Levin et al., 2000a), la representación del estado del sistema se estructura en tres plantillas que reflejan la historia del diálogo:

 Plantilla de usuario (user template). Representa el significado de la petición del usuario, interpretada en su contexto. Consta de una lista de pares {nombre, valor} de todos los atributos. 66

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

 Plantilla de datos (data template). Describe los datos extraídos de la base de datos, conforme a una consulta basada en la plantilla de usuario. Consta de un cierto número de tuplas de datos.  Plantilla del sistema (system template). Representa la historia de acciones del sistema durante el diálogo.  Philips (Sougvinier et al., 2000)

En (Sougvinier et al., 2000), se discuten estrategias que compatibilicen la robustez del sistema con un adecuado nivel de naturalidad en el curso del diálogo. La estrategia considerada se basa en dos principios: a) considerar las distintas fuentes de información tan pronto como sea posible; b) mantener alternativas, retrasando la elección de una única opción tanto como sea posible. Consecuencia del primer principio es una arquitectura del sistema donde información procedente del gestor de diálogo o del sistema gestor de la BD puede ser usada para valorar las hipótesis generadas en los módulos de reconocimiento y comprensión.

En los sistemas desarrollados en Philips, el gestor de diálogo sigue una estrategia consistente en completar los datos necesarios para la consulta (slotfilling strategy). Al tratarse de sistemas con iniciativa mixta, el usuario puede proporcionar valores para varios slots, con independencia de que éstos figurasen en el precedente prompt del sistema. La tarea del gestor de diálogo es rellenar los slots necesarios para poder satisfacer la petición del usuario, procurando que el diálogo sea lo más breve posible.

Una cuestión relevante que se plantea es el uso de los distintos tipos de confirmación. Lo más seguro, pero también más tedioso y menos natural, es la confirmación explícita de cada uno de los valores asignados a los slots. La confirmación implícita, seguida de ausencia de corrección por parte del usuario, resulta una técnica más refinada, aunque puede no ser recomendable para algunas acciones críticas (como pasar una llamada, en un sistema directorio como PADIS).

Además, se contempla cómo las medidas de confianza sobre las unidades semánticas pueden afectar a la estrategia del diálogo.

67

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Con la intención de facilitar la migración a otras aplicaciones, se ha desarrollado HDDL, un lenguaje de descripción de diálogos, que permite especificar, de modo declarativo, las definiciones de los slots, las preguntas y las estrategias de confirmación.

En este trabajo, la historia del diálogo, o creencias del sistema (system belief), consiste en una o más hipótesis sobre los valores de los slots y su estado de confirmación. El lenguaje HDDL (definido para facilitar la adaptación del gestor de diálogo a diferentes dominios) proporciona comandos para gestionar los slots, en particular para determinar cuáles slots deben ser borrados y cuáles mantener sus valores en cada momento de una sesión de diálogo.

68

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

CAPITULO 2: Módulo de Comprensión

69

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

3.2 Introducción. En esta sección se describe el módulo de comprensión del lenguaje natural el cual sera desarrollado en la presente tesis. Este módulo recibe una entrada de texto, procedente del reconocedor del habla, y genera una salida adecuada, para el módulo gestor de diálogo, consistente en la representación semántica de las frases recibidas.

El desarrollo de un módulo de comprensión se planteó como un objetivo adicional, o secundario, puesto que en el grupo de investigación de “Reconocimiento de Formas e Inteligencia Artificial” (DSIC-UPV) ya se disponía de un módulo de comprensión basado en modelos estocásticos para la tarea BASURDE (Segarra et al., 2002).

En (Segarra et al., 2002), la comprensión del lenguaje se trata como una tarea de traducción que consta de dos fases. En la primera fase, el texto de entrada se traduce a representaciones semánticas, definidas en un lenguaje semántico intermedio (ISL) secuencial, y en la segunda fase, dichas representaciones semánticas se traducen a frames. En la traducción a ISL se aplican técnicas de aprendizaje automático (transductores secuenciales), y en la traducción a frames se aplica un sencillo sistema basado en reglas.

En este nuevo módulo de comprensión, la tarea se aborda también en dos fases. En la primera fase se identifican los atributos, mediante la consulta de diccionarios que almacenan los posibles valores de los atributos, y se reescribe la frase sustituyendo valores de atributos por identificadores de variables atributo. Esta reescritura permite, en la segunda fase de la comprensión, identificar y generar los frames mediante técnicas estadísticas. Se han estimado modelos estocásticos de comprensión que establecen las probabilidades de que las secuencias de palabras recibidas sean muestras de determinados actos de diálogo. Y se ha considerado la estrecha vinculación entre la representación semántica mediante frames, usada en comprensión, y el etiquetado de actos de diálogo, usado en la gestión del diálogo.

70

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

3.2.1 Descripción del módulo de comprensión. Una definición genérica de un sistema de Comprensión del Lenguaje, es la de una máquina que acepta cadenas de palabras como entrada y produce frases de un cierto lenguaje semántico que especifica las acciones que se van a llevar a cabo. Bajo este punto de vista, la Comprensión del Lenguaje es un proceso de traducción. Para implementar este proceso se pueden emplear una serie de técnicas de inferencia para aprender, de forma automática, el traductor necesario a partir de un conjunto de muestras de entrada y salida de entrenamiento.

En la comprensión del lenguaje, se usaron frames como unidades semánticas que almacenan la información relevante contenida en un turno de usuario. Un frame consta de un nombre de concepto y, opcionalmente, uno o más pares {nombre, valor} de atributos.

71

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

CAPITULO 3: Gestor de Dialogo

72

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

3.3 Introducción. El manejo de diálogo controla la interacción del sistema con el usuario y la aplicación del servidor. Es responsable para decidir qué acciones debe realizar el sistema en cada paso de la interacción.

El manejador de diálogo es el encargado de varias funciones:

 Resuelve la ambigüedad en la interpretación de los eventos.  Estima la confidencia al extraer información.  Clarifica la interpretación con el usuario si es requerido.  Integra nuevas entradas con el contexto de diálogo.  Construye consultas (queries) para la base de datos.  Envía datos al generador de lenguaje natural para la presentación del usuario.

El manejador de diálogo es flexible para manejar cualquier evento del contexto del sistema. El manejador de diálogo recibe entrada desde el parser y envía una salida al generador de lenguaje natural. Éste envía y recibe información desde la aplicación o la base de datos. El manejador de diálogo toma el paso final de interpretar la expresión e integrar esto dentro de un contexto del diálogo. El manejador de diálogo controla la interacción del sistema con el usuario. Eso decidirá qué es lo que el sistema debe hacer o lo siguiente a decir.

El manejador de diálogo está configurado para operar como un servidor en la arquitectura del Hub DARPA. La interacción con otros servidores es llevada a cabo por el envío de frames mediante el Hub.

El manejador de diálogo organiza la producción del sistema. Eso es normalmente en un estado inactivo esperando la entrada de un evento. Cuando recibe una entrada, envía algunos frames al Hub, y entonces regresa a un estado inactivo.

El manejador de diálogo cuando interactúa con otros servidores tiene diversas funciones:  Recibe la cadena de entrada desde el Servidor de análisis semántico 73

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

 Valoración de la elipsis.  Clarificación.  Actualización del contexto.  Envía peticiones al generador de lenguaje natural  Información de salida para el usuario.  Genera los queries para la base de datos y los envía al servidor de bases de datos.  Recibe los resultados de la base de datos desde el servidor de bases de datos.

Los frames son una estructura básica de información para representar un dominio de información. Un frame tiene un nombre y un número fijo de slots. Cada slot es un concepto jerárquico con el nombre del slot como la raíz como se puede ver en la Fig. 2.5.

Existe una librería de funciones para la manipulación de los frames. La información es extraída en pequeñas partes dentro de los frames y es almacenada en los frames directamente por el manejador de diálogo. Idealmente, el concepto de estructura en este frame es igual al producido por el parser. En este caso, la extracción desde el parser al frame del manejador de diálogo es directa.

1. Ilustración: Estructura de un frame

Donde Air_Travel_Time es el nombre del frame y los slots son todos los demás campos los cuales son llenados con la información proporcionada por el usuario. 74

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

En esta sección se presenta la parte principal del sistema ha ser desarrollado en esta tesis, el módulo gestor de diálogo.

En primer lugar, se describe la entrada al gestor de diálogo y su interconexión con los otros módulos del sistema de diálogo. A continuación, se expone el procedimiento seguido en el aprendizaje de los modelos estocásticos de diálogo y las características de los modelos obtenidos.

A continuación, los apartados siguientes se dedican a exponer en detalle varios aspectos relevantes del funcionamiento del gestor de diálogo:

 El uso de las técnicas de generalización semántica (o suavizado de los frames de usuario) en la selección de transiciones a estados de usuario.

 El uso de las reglas de consistencia con el contenido del registro histórico (o uso de la historia del diálogo como complemento a los modelos de bigramas) en la selección de transiciones a estados de sistema.

 El uso de las medidas de confianza y su efecto en la selección de transiciones en el modelo estocástico.

3.3.1 Tipos de Gestores de Dialogo.4 3.3.1.1 Gestor de Dialogo de Iniciativa del sistema 3.3.1.2 Gestor de Dialogo de Iniciativa Mixta. 3.3.1.3 Gestor de Dialogo de Iniciativa Completa del usuario. Para el desarrollo de la Tesis planteada, se usara el gestor de Dialogo de Iniciativa del sistema.

4 Rubén San Segundo Hernández, Gestor del Dialogo Métodos. pág. 4. 75

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

3.3.2 Estrategias de diseño de; Gestor de Dialogo.

3.3.2.1 Diseño por intuición: definición del diálogo en función de la experiencia del desarrollador.

3.3.2.2 Diseño por observación: definición del diálogo mediante el análisis de conversaciones usuario operador (humano) en un servicio análogo al que se desea automatizar.

3.3.2.3 Diseño por simulación (Mago de Oz): simular parte de la funcionalidad del sistema que se desea automatizar para aprender el comportamiento que los usuarios tendrán ante este tipo de sistemas y poder hacer un mejor diseño.

3.3.2.4 Diseño por prototipado y mejora iteractiva: desarrollo rápido de un primer prototipo (diseño por intuición) y proceso iterativo de prueba con usuarios reales y mejora del sistema.

3.3.2.5 Diseño por aprendizaje sobre un modelo

estocástico: en este caso se pretende la definición de un modelo estocástico cuyos parámetros son estimados a partir de diálogo etiquetados.

3.3.3 Elementos del Modelado.

3.3.3.1Turnos de Dialogo Estructuras de datos en los que se almacena información relevante para cada turno de dialogo.

3.3.3.2 Historia y estado del Dialogo Estructura de datos en las que se almacenan el estado actual del dialogo (datos obtenidos, datos confirmados,..) y la historia del dialogo (secuencia de turnos ejecutados).

76

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

3.3.3.3 Algoritmo de ejecución de los turnos Algoritmo que decide la secuencia de ejecución de los turnos que forman el dialogo.

3.3.4 Generador de Respuestas. El generador de respuestas del sistema consta de un módulo que genera las respuestas del sistema en modo texto, y un módulo que realiza la conversión de las mismas de texto a voz. El generador de respuestas utiliza 41 patrones para realizar la formación de los diversos tipos de frases. Asimismo, usa varias reglas para determinar el género y el número de las palabras, y el uso (o no) de pronombres en las frases, teniendo en cuenta la información existente en el contexto en cada momento. Cada patrón consiste en una serie de conceptos, expresiones y huecos. Durante la generación de las respuestas, el sistema expande los conceptos y las expresiones, y rellena los huecos con las palabras correspondientes. La generación de respuestas tiene una doble finalidad. Por una parte, proporcionar a los usuarios la información solicitada, y por otra, proporcionarles otros tipos de información, como por ejemplo, confirmaciones de comprensión de sus frases, mensajes de error, etc. Para realizar la transformación de texto a voz se utiliza la plataforma de síntesis de voz FESTIVAL, desarrollada por el Centro de Investigación de la Tecnología del Habla de la Universidad de Edimburgo (Reino Unido).

77

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

CAPITULO 4: Síntesis de Voz

78

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

3.4 Visión general de la tecnología de síntesis de voz5 La síntesis de voz es la producción artificial de habla humana. Un sistema usado con este propósito recibe el nombre de sintetizador de voz y puede implementarse en software o en hardware. La síntesis de voz se llama a menudo en ingles text-to-speech (TTS), en referencia a su capacidad de convertir texto en habla. Sin embargo, hay sistemas que en lugar de producir voz a partir de texto lo hacen a partir de representación lingüística simbólica

3.4.1 Tecnologías de síntesis Las dos características utilizadas para describir la calidad de un sintetizador de voz son la naturalidad e inteligibilidad. La naturalidad de un sintetizador de voz se refiere a cuanto suena como la voz de una persona real. La inteligibilidad de un sintetizador se refiere a la facilidad de la salida de poder ser entendida. El sintetizador ideal debe de ser a la vez natural e inteligible, y cada tecnología intenta conseguir el máximo de ambas. Algunas de las tecnologías son mejores en naturalidad o en inteligibilidad y las metas de la síntesis determinan a menudo que aproximación debe seguirse. Hay dos tecnologías principales usadas para generar habla sintética: síntesis concatenativa y síntesis de formantes.

3.4.1.1 Síntesis concatenativa La síntesis concatenativa se basa en la concatenación de segmentos de voz grabados. Generalmente, la síntesis concatenativa produce los resultados más naturales. Sin embargo, la variación natural del habla y las técnicas automatizadas de segmentación de formas de onda resultan en defectos audibles, que conllevan una pérdida de naturalidad 3.4.1.2 Síntesis de formantes La síntesis de formantes no usa muestras de habla humana en tiempo de ejecución. En lugar de eso, la salida se crea usando un modelo acústico. Parámetros como la frecuencia fundamental y los niveles de ruido se varían durante el tiempo para crear una forma de onda o habla artificial. Este método se conoce también como síntesis basada en reglas pero algunos aducen que muchos sistemas concatenativos usan componentes basados en reglas para algunas partes de sus sistemas, como el front- end, así que el termino no es suficientemente especıfico.

5 Rubén San Segundo Hernández, menAgenteMS. pág. 21 79

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Muchos sistemas basados en síntesis de formantes generan habla robótica y de apariencia artificial, y la salida nunca se podría confundir con la voz humana. Sin embargo, la naturalidad máxima no es siempre la meta de un sintetizador de voz, y estos sistemas tienen algunas ventajas sobre los sistemas concatenativos. La síntesis de formantes puede ser muy inteligible, incluso a altas velocidades, evitando los defectos acústicos que pueden aparecer con frecuencia en los sistemas concatenativos.

La síntesis de voz de alta velocidad es a menudo usada por los discapacitados visuales para utilizar computadores con fluidez. Por otra parte, los sintetizadores de formantes son a menudo programas más pequeños que los sistemas concatenativos porque no necesitan una base de datos de muestras de voz grabada. De esta forma, pueden usarse en sistemas empotrados, donde la memoria y la capacidad de proceso son a menudo exiguas. Por último, dado que los sistemas basados en formantes tienen un control total sobre todos los aspectos del habla producida, pueden incorporar una amplia variedad de tipos de entonaciones, que no solo comprendan preguntas y enunciaciones.

3.4.2 Sintetizadores de voz disponibles libremente  Festival es un sintetizador de voz disponible libremente basado en concatenación de difonos y selección de unidades. Está disponible para español, inglés británico y americano y gales.  Flite (Festival-lite) es una alternativa más pequeña de Festival diseñado para sistemas empotrados y servidores de gran volumen de trabajo.  FreeTTS escrito enteramente en Java, basado en Flite.  MBROLA es un sistema de concatenación de difonos para unas 25 lenguas.  es un paquete extensible de texto a voz basado en síntesis por reglas articulatoria en tiempo real.  Epos es un sistema texto a voz controlado por reglas diseñado principalmente para investigación. Disponible para checo y eslovaco.  Microsoft Speech SDK 5.1

3.4.3 Sintetizadores de voz disponibles comercialmente  DSC Text To Speech Software Aplicaciones y demostraciones de texto a voz.  RealSpeak por Nuance para español, inglés, alemán y griego entre otros muchos. 80

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

 IBM Research TTS (ejemplos para ingles americano, árabe, chino, francés y alemán).  NeoSpeech VoiceText  Sakrament Text-to-Speech Engine para ruso y algunas otras lenguas.  SVOX Especialista suizo en soluciones empotradas de voz para 18 lenguas.  Verbio TTS - Applied Technologies on Language and Speech (ATLAS) Para frances, español e ingles.  sintetizador de voz de Yamaha.  ASY es un sistema de síntesis de voz articulatoria desarrollado en los Laboratorios Haskins.  iFlyTek InterPhonic es un sintetizador basado en corpus desarrollado por una compañía china.  VoiceText es un sistema de síntesis de voz concatenativo realizado por Voiceware, Corea.  Wizzard Software ofrece sistemas texto a voz.  Acapela Group con muchos sintetizadores de voz que soportan muchas lenguas  Voces de texto a voz de ATIP para el alemán (también con acentos francés y Turco) e Inglés.  Voces naturales AT-T para español, inglés, alemán y francés.  Cepstral para español, inglés, italiano, alemán y francés.

81

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

CAPITULO 5: Java Speech API

82

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

3.5 Que es Java Speech.6 La API de Java Speech (JSAPI) es una extensión de la plataforma Java. Las extensiones son paquetes de clases escritos en lenguaje de programación java (u otro código nativo asociado) que los desarrolladores de aplicaciones pueden utilizar para extender la funcionalidad de la plataforma Java.

La JSAPI define una interfaz de SW multiplataforma estándar y fácil de usar para implementar la tecnología de habla.

3.5.1 Objetivos de Diseño. • Proveer soporte para sintetizadores de voz y para sistemas de reconocimiento de habla (tanto aquellos de Control por Comandos como los de Dictado).

• Proveer una interfaz multiplataforma y multiproveedor robusta para la síntesis y reconocimiento del habla.

• Permitir el acceso al estado del arte de la tecnología del habla.

• Soportar la integración con otras capacidades de la plataforma Java, como por ejemplo la API de Java Media.

• Ser simple, compacto y fácil de aprender

3.5.2 Implementaciones Sun trabaja con las compañías que se dedican a la tecnología del habla en implementaciones de la API de Java Speech.

A continuación se describen los principales mecanismos para implementar la API:

6 http://www.sicuma.uma.es/sicuma/independientes/argentina08/Liliana/JSAPI.htm 83

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

 Implementaciones nativas: muchas aplicaciones existentes en esta área están implementadas en C o C++ y se accede a través de plataformas específicas como son: Apple Speech managers y Microsoft Speech API (SAPI), o bien a través de APIs propietaria. Mediante la utilización de la Interfaz Nativa Java (JNI) y las envolturas de SW Java (Java SW wrappers) es posible implementar la API de Java Speech en el nivel superior del SW de habla existente.

2. Ilustración: Implementación de JSAPI

 Implementaciones Java: los sintetizadores y reconocedores de habla pueden ser escritos en Java. Estas implementaciones tienen el beneficio de la portabilidad y de las mejoras continuas en la velocidad de ejecución de las máquinas virtuales Java.

 Implementaciones telefónicas: estas aplicaciones se implementan generalmente sobre HW dedicado capaz de soportar un gran número de conexiones simultáneas. Las capacidades de reconocimiento y síntesis de 84

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

habla en este HW puede ser envuelto con software Java para soportar la JSAPI como un tipo especial de implementación nativa.

3.5.3 Requerimientos Para utilizar JSAPI se debe contar con requerimientos mínimos de HW y SW. Los requerimientos individuales de los sintetizadores y reconocedores de habla varían mucho entre uno y otro, por lo que el usuario deberá analizarlos cuidadosamente al momento de elegir.

 Software de habla: se debe disponer de un sintetizador o reconocedor de habla compatible con JSAPI

 Requerimientos del sistema: muchos reconocedores de habla y algunos sintetizadores de habla, ambos de escritorio, requieren computadoras relativamente potentes para correr eficientemente. Es necesario controlar los requerimientos mínimos de memoria, CPU y espacio en disco al momento de adquirir un producto de habla.

HW de audio: los sintetizadores de habla requieren salida de audio, en tanto que los reconocedores requieren micrófonos. Los sistemas de dictado requieren placas de sonido de buena calidad para funcionar de manera óptima. Muchos reconocedores son sensibles al micrófono y muchos productos recomiendan micrófonos específicos. Los micrófonos auriculares generalmente proveen el mejor rendimiento, especialmente en entornos ruidosos.

3.5.4 Estados del motor 3.5.4.1 Sistemas de estado La interfaz Engine incluye un conjunto de métodos que definen un administrador del sistema de estados. Existen dos sistemas básicos implementados por todos los motores de habla: el sistema de asignación y el de pausa-reanudación.

85

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Un estado define un modo particular de operación del motor de habla. Por ejemplo, la cola de salida (OUTPUT QUEUE) se mueve entre los estados QUEUE_EMPTY y QUEUE_NOT_EMPTY. A continuación se presentan aspectos básicos de la administración de estados.

El método getEngineState retorna el estado actual del motor. El estado del motor se representa mediante un número de 64 bits. Bits específicos de estado indican los estados en que se encuentra el motor. Esta representación se utiliza porque un motor puede estar en más de un estado al mismo tiempo.

Cada motor debe estar en uno y sólo uno de cuatro estados de asignación: DEALLOCATED, ALLOCATED, ALLOCATING-RESOURCES y DEALLOCATING_RESOURCES. El estado ALLOCATED tiene múltiples sub-estados. Algunos motores ALLOCATED deben estar en estado PAUSED o RESUMED.

Existe un sistema separado de sub-estados para la cola de estados. Así como los estados paused/resumed, los estados QUEUE_EMPTY y QUEUE_NOT_EMPTY son subastados del estado ALLOCATED. La cola de estados y los estados pause/resumed son independientes.

Los reconocedores tienen tres sistemas independientes de sub-estados del estado ALLOCATED (el PAUSED/RESUMED y otros dos). Los estados LISTENING, PROCESSING y SUSPENDED indican la actividad actual del proceso de reconocimiento. Los estados FOCUS_ON y FOCUS_OFF indican si el reconocedor dispone actualmente el “focus” del habla. Para el reconocedor, los tres sub-estados del estado ALLOCATED operan independientemente (con algunas excepciones).

Cada uno de estos nombres de estado se representan mediante static long en el cual se setea un bit. Para manipular estos bits se utilizan los operadores & y | del lenguaje Java. Por ejemplo, el estado de un sintetizador ALLOCATED y RESUMED con una cola de speech output vacía se define de la siguiente manera:

(Engine.ALLOCATED | Engine.RESUMED | Synthesizer.QUEUE_EMPTY)

Para evaluar si un motor está en estado RESUMED se utiliza el siguiente test:

86

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

if ((engine.getEngineState() & Engine.RESUMED) != 0) ...

La interfaz Engine define dos métodos adicionales para manejar los estados del motor. El método testEngineState recibe el valor de estado y retorna TRUE si todos los bits de estado en ese valor están seteados para el motor. Así, para testear si el motor está en RESUMED se puede escribir:

if (engine.testEngineState(Engine.RESUMED)) ...

El método testEngineState(state) es equivalente a: if ((engine.getEngineState() & state) == state)...

El método waitEngineState bloquea el hilo de llamada hasta que el motor llegue al estado definido. Por ejemplo, para esperar a que el sintetizador termine de hablar porque la cola está vacía se utiliza: engine.waitEngineState(Synthesizer.QUEUE_EMPTY);

Además, las aplicaciones pueden monitorear el estado a través del sistema de eventos. Las transiciones de estado se etiquetan mediante un EngineEvent y son emitidos para cada EngineListener adjunto al motor. La clase EngineEvent es extendida por las clases SynthesizerEvent y RecognizerEvent para las transiciones de estado específicas para esos motores. Por ejemplo, RECOGNIZER_PROCESSING RecognizerEvent indica una transición del estado LISTENING al PROCESSING (lo cual indica que el reconocedor detectó habla y está produciendo resultado).

3.5.4.2 Allocation State System La asignación es el proceso mediante el cual el motor obtiene los recursos requeridos. La asignación no es automática cuando el motor es creado, porque los motores pueden requerir recursos sustanciales (CPU, memoria y espacio en disco) y también pueden necesitar acceso exclusivo a recursos de audio (micrófonos, parlantes). Por lo expuesto, este proceso puede demandar bastante tiempo (algunos segundos o más de un minuto).

El método allocate de la interfaz Engine requiere la asignación y es , usualmente, una de las primera llamadas que se hacen al motor creado. Un motor recién creado está siempre en estado DEALLOCATED. Una llamada al método ALLOCATE es un 87

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

requerimiento al motor para que cambie al estado ALLOCATED. Durante la transición, el motor está en el estado temporal ALLOCATING_RESOURCES.

El método DEALLOCATE de la interfaz del motor requiere la desasignación de los recursos asignados al motor. Este método vuelve al motor al estado DEALLOCATED. Durante la transición, el motor queda en el estado temporal DEALLOCATING_RESOURCES.

3. Ilustración: Diagrama del sistema de estados de asignación

Cada bloque representa un estado posible. El motor debe estar siempre en alguno de estos cuatro estados. Durante las transiciones de estado, el evento etiquetado en los arcos es enviado al EngineListeners agregado al motor.

El estado operacional normal del motor es ALLOCATED.

88

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

3.5.4.3 Estados de asignación y bloqueos de llamada Para aplicaciones avanzadas suele ser deseable empezar la asignación de un motor de habla en un hilo en segundo plano mientras otras partes de la aplicación se inicializan. Esto puede realizarse llamando al método de asignación en un hilo separado. El siguiente código muestra un ejemplo de esto mediante el uso de una implementación de clase interna de la interfaz Runnable. Para determinar cuándo el método de asignación está completo se chequea si el motor está en el estado ALLOCATED.

En una aplicación que utiliza esta forma de asignar recursos al motor requiere prever la posibilidad de que la asignación falle, en cuyo caso el método de asignación emite una Engine.Exception y el motor retorna al estado DEALLOCATED.

Otro aspecto que las aplicaciones deben considerar es el bloqueo. Muchos métodos del motor, reconocedor y sintetizador, se definen para la operación normal en el estado ALLOCATED. ¿Qué ocurriría si fueran llamados para un motor en otro estado de asignación? Para la mayoría de los métodos la operación se define de la siguiente manera:

· Estado ALLOCATED: para casi todos los métodos el comportamiento normal se define para este estado (una excepción es el método allocate)

· Estado ALLOCATING_RESOURCES: muchos métodos se bloquean en este estado. El hilo de llamada espera hasta que el motor llegue al estado ALLOCATED, luego de lo cual el método se comporta normalmente.

· Estado DEALLOCATED: muchos métodos no están definidos para esre estado, por lo que se envía un EngineStateError .

· Estado DEALLOCATING_RESOURCES: ídem anterior.

Un pequeño subconjunto de los métodos operarán correctamente en todos los estados posibles del motor. getEngineProperties siempre permite que las propiedades runtime sean seteadas y testeadas (a pesar de que las propiedades sólo tienen efecto en el estado ALLOCATED). 89

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

3.5.4.4 Estados Pause-Resume

Todos los motores de habla cuyo estado es ALLOCATED tienen los estados PAUSED y RESUMED. Una vez que el motor alcanza el estado ALLOCATED entra al estado PAUSED o RESUMED. Estos estados indican si la entrada o salida de audio del motor está encendida o apagada. Un reconocedor en estado RESUMED está recibiendo entrada de audio. Si está en estado PAUSADO ignora la entrada de audio. Un sintetizador en estado RESUMED produce salida de audio, en tanto que si está en estado PAUSED no la produce.

La interfaz Engine provee de varios métodos para testear el estado PAUSED/RESUMED.

Una aplicación puede pausar o reanudar un motor indefinidamente. Cada vez que se produce un cambio entre ambos estados se envía un EngineEvent a cada EngineListener agregado al motor.

Los estados PAUSED y RESUMED son subestados del estado ALLOCATED.

4. Ilustración: Estados Paused y Resumed

3.5.4.5 Compartición de estados El estado PAUSED/RESUMED puede ser compartido por múltiples aplicaciones. En este punto debe hacerse una distinción entre los objetos Java que representan a un Reconocedor o a un Sintetizador y el motor subyacente que puede tener múltiples aplicaciones, Java y no Java, conectadas a él. Por ejemplo, en sistemas personales hay un motor simple corriendo conectado a la entrada de micrófono o a la salida de parlante y todas las aplicaciones comparten ese recurso. 90

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Cuando el reconocedor o el sintetizador (objeto Java) es pausado o reanudado, el motor compartido subyacente es pausado o reanudado y todas las aplicaciones conectadas al motor son afectadas.

Hay tres aspectos importantes a tener en cuenta en esta arquitectura:

 Una aplicación pausará o reanudará un motor únicamente ante un requerimiento del usuario (por ejemplo, si el botón del micrófono es presionado por el reconocedor). Por ejemplo, no debería pausar un motor antes de desasignar sus recursos.

 Un reconocedor o sintetizador puede ser pausado y reanudado debido a un requerimiento de otra aplicación. La aplicación recibirá un evento ENGINE_PAUSED o ENGINE_RESUMED y el valor de estado del motor será actualizado.

Dado que un motor podría reanudarse sin un requerimiento explícito, debería estar siempre preparado para esta reanudación. Por ejemplo, no debería ubicar texto en la cola de salida del sintetizador a menos que espere que éste sea hablado a raíz de una reanudación. De la misma manera, el conjunto de gramáticas habilitadas por un reconocedor deberían ser siempre las adecuadas al contexto de la aplicación y la aplicación debería estar preparada para aceptar entradas provenientes del reconocedor si una gramática habilitada es reanudada inesperadamente.

3.5.4.6 Eventos de habla Los motores de habla generan varios tipos de evento. Si bien no se requiere que las aplicaciones manejen estos eventos, algunos son muy importantes para implementar aplicaciones de habla. Por ejemplo, algunos eventos deben procesarse para recibir el texto reconocido por el reconocedor.

Los eventos de JSAPI siguen el modelo de eventos de JavaBeans. Los eventos son emitidos hacia un “oyente” adjunto al objeto involucrado en la generación del evento. Todos los eventos de habla se derivan de la clase SpeechEvent del paquete javax.speech.

91

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Eventos de habla: paquete javax.speech Nombre Descripción SpeechEvent Clase padre de todos los eventos de habla. EngineEvent Señala un cambio en el estado del motor de habla. AudioEvent Señala un evento de entrada o salida de audio. EngineErrorEvent Es una sub clase que señala la ocurrencia de un problema asincrónico en el motor. 1. Tabla: Eventos del Habla: paquete javax.speech

Eventos de habla: paquete javax.speech.synthesis Nombre Descripción SynthesizerEvent Extiende EngineEvent para eventos especializados de un sintetizador. SpeakableEvent Señala el progreso en la salida de texto sintetizado.

2. Tabla: Eventos de Habla: paquete javax.speech.synthesis

Eventos de habla: paquete javax.speech.recognition Nombre Descripción RecognizerEvent Extiende EngineEvent para eventos especializados de un reconocedor. GrammarEvent Señala una actualización o un cambio de estado de la gramática de reconocimiento. ResultEvent Señala cambios de estado y de datos de los resultados del reconocimiento RecognizerAudioEvent Extiende AudioEvent con eventos para iniciar y parar el habla y la actualización de niveles de audio. 3. Tabla: Eventos de Habla: paquete javax.speech.recognition

3.5.4.6.1 Sincronización de eventos Los motores de habla deben proveer la sincronización de sus eventos con la cola de eventos AWT, siempre que sea posible. La razón de esta limitación es que simplifica la

92

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

integración de los eventos de habla con los eventos AWT y los eventos de las clases Java Foundation (por ejemplo, teclado, Mouse y eventos focus).

La sincronización con la cola de eventos AWT significa que ésta no está enviando otro evento cuando un evento de habla es emitido. Para implementar esto, los motores de habla deben ubicar los eventos de habla en la cola de eventos AWT. La cola se obtiene a través de AWT Toolkit.

EventQueue q = Toolkit.getDefaultToolkit().getSystemEventQueue();

EventQueue corre un hilo aparte para el despachador de eventos. El motor de habla no está obligado a emitir los eventos a través de ese hilo, pero debería asegurarse que el hilo esté bloqueado cuando un evento de habla es emitido.

SpeechEvent no es una subclase de AWTEvent, y los eventos de habla no son ubicados directamente en la cola de eventos AWT. En lugar de ello, el motor de habla realiza actividades internas para mantener su cola interna de eventos de habla sincronizada con la cola de eventos AWT.

3.5.4.7 Otras funciones de los motores 3.5.4.7.1 Propiedades Runtime Los motores de habla tienen un conjunto de propiedades que pueden modificarse mientras el motor está corriendo. La interfaz EngineProperties definida en el paquete javax.speech permite acceder a estas propiedades. Es extendida por la interfaz SyntesizerProperties definida en el paquete javax.speech.synthesis y por la interfaz RecognizerProperties definida en el paquete the javax.speech.recognition.

La interfaz EngineProperties provee tres tipos de funcionalidad:

93

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

 Los métodos addPropertyChangeListener y removePropertyChangeListener agregan o remueven el PropertyChangeListener de JavaBeans. El “listener” recibe una notificación de evento cada vez que un valor de propiedad cambia.

 El método getControlComponent retorna un componente AWT provisto por el motor o “null” si no hay uno provisto por el motor. Este componente puede ser desplegado por un usuario para modificar las propiedades del motor. En algunos casos este componente puede permitir la adaptación de propiedades que no son accesibles por programa.  El método reset se utiliza para setear todas las propiedades del motor a los valores por defecto.

Para cada propiedad hay un método get y set. Por ejemplo, los métodos para manejar las voces de un sintetizador son:

float getVolume() void setVolume(float voice) throws PropertyVetoException;

El método get retorna el seteo actual, en tanto que el método set intenta asignar otro valor al volumen y lanza una excepción si el método falla (esto sucede si el motor rechaza el valor establecido). En el caso del volumen, un valor fuera del rango aceptado, 0.0 a 1.0, originará una excepción.

Los métodos set de las interfaces SyntesizerProperties y RecognizerProperties son asíncronos. Por ejemplo, un cambio en la voz de un sintetizador debe diferirse hasta el final de la palabra actual, la oración actual o el documento actual.

94

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Un evento de cambio de propiedad puede ser emitido porque otra aplicación cambió una propiedad que afecta a otra (por ejemplo, un cambio en la voz del sintetizador, de masculino a femenino, causará un incremento en el tono) o bien porque los valores han sido reseteados.

3.5.4.7.2 Audio Management

La interfaz AudioManager de un motor de habla es provista para el manejo de la entrada o salida de habla. Para la JSAPI Versión 1.0 la intefaz AudioManager interface is simple: está vacía. Sin embargo la interfaz RecognizerAudioListener extiende la intefaz AudioListener para recibir tres tipos de eventos de audio: SPEECH_STARTED, SPEECH-STOPPED y AUDIO_LEVEL.

3.5.4.7.3 Manejo de Vocabulario Un motor puede, opcionalmente, proveer un gestor de vocabulario para controlar la pronunciación de las palabras y otro vocabulario. Este gestor se obtiene llamando al método getVocabManager del motor. Si el motor no soporta manejo de vocabulario, el método retorna null.

El gestor define una lista de objetos Word. Las palabras pueden agregarse a, borrarse de y buscarse en el VocabManager.

La clase Word está definida en el paquete javax.speech. cada palabra se define mediante las siguientes características:

 Forma escrita: consiste en una cadena requerida que define cómo la palabra debe presentarse visualmente.

 Forma hablada: consiste en una cadena opcional que indica cómo debe hablarse la palabra.

95

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

 Pronunciación: es una cadena opcional que contiene una o más representaciones fonémicas de la pronunciación de la palabra. A este efecto se utiliza el IPA (Internacional Phonetic Alphabet).

 Categorías gramaticales: es un conjunto opcional de categorías gramaticales. La clase Word define 16 clases de palabras (nombre, verbo, conjunción,etc). Estas clases no representan un desglose lingüístico completo de todos los idiomas. Hay intentos de proveer reconocedores o sintetizadores con información adicional acerca de la palabra que puede ayudar en el correcto reconocimiento o síntesis.

3.5.4.8 Reconocimiento de voz La otra parte importante del JavaSpeech API es el reconocimiento de voz. Sin embargo, el estado en relación al reconocimiento de voz no está siquiera, cercano al avanzado estado de la síntesis de voz. El motivo de esto es muy simple, el reconocimiento de voz es una tarea mucho más compleja.

La tarea de reconocimiento de voz, a grandes rasgos, consiste en que el ordenador captura la voz a través del micrófono convirtiéndola después en información digital. El motor de reconocimiento debe reconocer las sílabas de entre el conjunto de fonemas que ha recibido. Estas sílabas deben ser entonces combinadas para formar las palabras que inicialmente se había pronunciado.

Estas operaciones a priori bastante complejas en sí mismas, todavía aumentan su complejidad cuando consideramos características más concretas del habla humana, como las diferentes voces, la pronunciación, las diferencias dialectales dentro de una misma lengua: Diferentes personas tienen diferentes tonos de voz, hablan a diferentes velocidades, utilizan diferentes entonaciones, ...

De hecho, podríamos diferenciar de una manera genérica, dos tipos de dificultades técnicas en relación al reconocimiento de voz:

 Problemas relacionados con las diferentes características de la voz de cada persona: Como ya hemos dicho, diferentes personas tienen diferentes tonos de

96

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

voz, diferente pronunciación, existen diferencias dialectales dentro de una misma lengua.

 Problemas relacionados con la complejidad de las estructuras del lenguaje: El reconocimiento de voz supone la identificación de palabras. Pero el lenguaje es mucho más complejo que la simple utilización de palabras una después de otra; el lenguaje tiene estructuras cuya identificación en ocasiones, es incluso esencial para entender el sentido completo de la frase. Así pues, los motores de reconocimiento actuales deben incorporar métodos para reconocer gramáticas y, por supuesto, el JavaSpeech API no sólo las soporta, sino que son un elemento imprescindible.

3.5.4.9 JSGF (JavaSpeech Grammar Format).7 Un sistema de declaración de gramáticas simplifica la tarea del motor de reconocimiento limitando el número de posibles palabras y frases que se deben considerar cuando se intenta determinar qué ha dicho el usuario. Las gramáticas también facilitan la tarea del programador de aplicaciones de voz, reduciendo y agrupando los posibles casos que se deben tener en cuenta. Existen dos tipos de gramáticas:

 Gramáticas basadas en reglas: Están compuestas de tokens y reglas. Cuando un usuario habla, la entrada es comparada con las reglas y los tokens de la gramática con el fin de identificar los patrones esperados. La aplicación de reconocimiento de voz debe proporcionar una gramática basada en reglas al motor, normalmente durante la inicialización de este.

 Gramáticas de dictado: Estas gramáticas definen miles de palabras que el usuario puede decir de una manera libre. Se trataría de gramáticas integradas en el propio motor de reconocimiento que identifican el habla sin las restricciones que imponen las gramáticas basadas en reglas. Sin embargo, este tipo de métodos es más complejo desde un punto de vista técnico, con lo que son motores más lentos y cometen muchos errores.

7 http://www.w3.org/TR/jsgf/ 97

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

La especificación de JSGF soporta reconocimiento de voz mediante gramáticas basadas en reglas, no soportando las gramáticas de dictado por estar en un estado de desarrollo mucho más temprano e inmaduro. Sin embargo, JSGF soporta gramáticas dinámicas. Esto significa que las gramáticas que utiliza una aplicación que hace uso de JSAPI pueden ser modificadas en tiempo de ejecución, según las necesidades de la aplicación. Esto permite aumentar la flexibilidad del sistema, así como optimizar las aplicaciones que requieren reconocimiento de voz, adaptando las capacidades de reconocimiento gramatical a cada contexto.

Análisis de la sintaxis del Java Speech Grammar Format más detenidamente:

1. Cabecera de la gramática: Si definimos un fichero de gramáticas externo a nuestra aplicación donde declaramos las diferentes construcciones gramaticales aceptadas por el programa, este fichero debe tener un nombre identificativo único, declarado en su cabecera siguiente la sintaxis:

#JSGF V1.0 ISO8859-9 es; grammar packageName.simpleGrammarName;

El nombre de los paquetes de gramáticas es equivalente al nombre de los paquetes en Java; por tanto un nombre completo para una gramática será una lista de identificadores de paquete separados por puntos. Utilizar estos convencionalismos puede reducir el número de conflictos entre paquetes.

Dentro de una gramática podemos importar el contenido de otra u otras gramáticas. La declaración de una importación agrega una o todas las reglas públicas de gramática a nuestra gramática local:

//Añade todas las reglas públicas

import ;

/Añade la regla nameRule del paquete fullyQualifiedGrammar

import ;

2. Cuerpo de la gramática: En el cuerpo de la gramática es donde se declaran las reglas del motor de reconocimiento. Una regla gramatical debe presentar la siguiente sintaxis:

98

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

[public] = ruleExpansion ;

–Una regla se puede declarar con o sin el modificador public . Una regla que no sea declarada explícitamente como public será implícitamente privada. En esencia este modificador afectará a la importación de reglas en otros ficheros de gramáticas. Las reglas declaradas como public pueden ser importadas, las reglas privadas no podrán ser importadas, sólo podrán ser accedidas localmente.

–El nombre de una regla gramatical debe ser único en un mismo ámbito. Si una regla importada y una regla local tienen el mismo nombre, se podrían diferenciar (como en Java) utilizando el nombre totalmente cualificado de la regla.

3. Cuerpo de una regla gramatical: En el campo ruleExpansion del patrón sintáctico anterior es donde se encuentra la verdadera potencia del JSGF.

En él se puede declarar la estructura gramatical que debe tener una locución para que JavaSpeech considere que “casa” con esta regla gramatical. Una expresión gramatical puede estar formada por:

- una palabra

- varias palabras relacionadas entre sí mediante operadores

- una referencia a otra regla gramatical.

3.5.4.9.1 Secuencias

Una regla puede ser definida como una secuencia de expresiones válidas. Una secuencia de expresiones válidas, separadas entre sí mediante espacios en blanco es, así mismo, una expresión válida. Debido a que tanto palabras como referencias a otras reglas son expresiones gramaticales válidas, las siguientes definiciones de reglas son también válidas: = Vivo en Madrid; = este es ;

99

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Para poder reconocer una secuencia, cada elemento debe ser pronunciado en el orden definido y obedeciendo a las condiciones impuestas en cada regla gramatical. Así, para reconocer la regla el usuario debe decir las palabras “Vivo en Madrid” en el orden exacto. El segundo ejemplo mezcla palabras con referencias a otras reglas; para reconocer la regla el usuario debe pronunciar “este” seguido de una expresión que case con la regla , entonces “es” y finalmente algo que case con Una secuencia vacía no es legal. Sin embargo, existe la Secuencia vacía. = ; // no legal = ; // legal

3.5.4.9.2 Alternativas Una regla puede ser definida como un conjunto de expresiones alternativas separadas por una barra vertical '|' y opcionalmente por espacios en blanco. Por ejemplo:

= lápiz | avión | monitor | ;

Para que el motor reconozca la regla el usuario debe decir una y sólo una de las palabras separadas mediante la barra vertical, o bien, alguna expresión que case con la regla

Una alternativa vacía no es legal.

= Michael | | Mary; // not legal

3.5.4.9.3 Agrupaciones Paréntesis: Cualquier expresión legal puede ser explícitamente agrupada utilizando paréntesis '()'. Una agrupación mediante paréntesis supone considerar de manera atómica aquéllo que está contenido entre los paréntesis de apertura y cierre. Veamos un ejemplo:

= por favor (abre | cierra | borra);

Para que el motor reconozca la regla el usuario debe pronunciar las palabras “por favor” seguidas de una de entre las alternativas entre paréntesis, es decir, o bien “abre” o “cierra” o “borra”, pero no dos de ellas, por ejemplo.

Un ejemplo más elaborado:

100

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

= (abre | cierra) la (ventana |puerta) (ahora | después);

Esta regla admitiría frases diferentes como “abre la ventana ahora”, “cierra la puerta después”.

Un paréntesis sin contenido no está permitido

( ) // no legal

3.5.4.9.4 Corchetes [ ] Cualquier expresión legal puede ser explícitamente agrupada mediante corchetes '[]'. Una expresión situada entre corchetes puede, opcionalmente, ser pronunciada o no por el usuario. Por ejemplo:

= amigo mío | oh mi gran amigo | compañero del alma; public = [ ] ven a recogerme;

Permite al usuario decir “ven a recogerme” y opcionalmente frases como “compañero del alma ven a recogerme” o bien “amigo mío ven a recogerme”

Unos corchetes sin contenido no está permitido:

[ ] // no legal

3.5.4.9.5 Asterisco * Una expresión legal seguida de un símbolo asterisco, significa que la expresión puede ser pronunciada cero o más veces. Veamos un ejemplo:

= cinco* dos tres ocho seis;

El motor admitiría como válido tanto “dos tres ocho seis” como “cinco cinco cinco dos tres ocho seis”.

= amigo mío | oh mi gran amigo | compañero del alma; public = * ven a recogerme;

101

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

En este caso, la regla casaría con frases diferentes como: “ven a recogerme”, “amigo mío compañero del alma ven a recogerme” o “compañero del alma oh mi gran amigo ven a recogerme”.

3.5.4.9.6 Operador Suma + Una expresión legal seguida de un símbolo asterisco significa que la expresión puede ser pronunciada una o más veces (pero al menos una vez). Veamos un ejemplo:

= (por favor)+ no me digas eso;

El motor admitiría frases como “por favor no me digas eso” o “por favor por favor no me digas eso”.

3.5.4.9.7 Tags Los tags son un mecanismo para añadir información específica de cara a la aplicación a partes concretas de la definición de la regla. Las aplicaciones típicamente utilizan los tags para simplificar o mejorar el proceso de reconocimiento. Los tag son texto encerrado entre llaves de conjunto '{}'

Los tags no afectan al reconocimiento de una gramática. Los tags solamente son adjuntados al objeto devuelto por el reconocedor de voz a la aplicación. De esta manera, el programador puede saber que el texto pronunciado por el usuario, casa con una determinada parte de la regla gramatical o bien con otra. Veamos un ejemplo:

= por favor (abre {OPEN} | cierra {CLOSE}) la ventana;

Mediante el uso de tags podremos saber, a nivel de código Java y en tiempo de ejecución, si el usuario ha dicho “por favor abre la ventana” o bien “por favor cierra la ventana”, ambas expresiones válidas de la regla gramatical anterior pero que no serían diferenciables de otro modo.

102

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

3.5.4.10 Tipos de Reconocedores Para añadirle reconocimiento de voz al sistema, se necesita un reconocedor que trabajara sobre la plataforma de Windows y que fuera completamente gratuito.

Entre los reconocedores que se encontró y considero que fuera posible implementarlos en el sistema de dialogo fueron los siguientes:

 CSLU TOOLKIT: esta herramienta permite hacer reconocedores de voz en español y es completamente gratuito, se puede adquirir a través de la web. Sin embargo había que construir todo el reconocedor, desde crear el diccionario de datos, etiquetar, alinear y crear la aplicación y dentro de los objetivos planteados no se encuentra el construir un reconocedor de voz, si no implementar uno que ya se encuentre hecho.

 Sphinx: Al igual que el toolkit esta herramienta permite crear un reconocedor de voz. Esta herramienta al igual que el Toolkit es gratuita, pero las aplicaciones que pueden ser creadas son para el idioma inglés.

 Speech Microsoft Recognition: éste es un reconocedor gratuito ya construido, inicialmente está desarrollado para el idioma inglés pero ya en la actualidad soporta de forma segura el reconocimiento para el idioma Español. Una de las ventajas que presenta este reconocedor es que trabaja bajo SAPI que es el mismo API utilizado por el sintetizador de voz para el Sistema de Dialogo

103

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

CAPITULO 6: HERRAMIENTAS DE DESARROLLO

104

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

3.6.1 Microsoft Recognition Reconocimiento de voz de Windows permite al usuario controlar el ordenador dando comandos específicos de voz. El programa también puede ser utilizado para el dictado de texto para que el usuario pueda controlar su Sistema Windows.

Reconocimiento de voz de Windows es un reconocimiento de voz aplicación incluida en Windows Vista y, más recientemente, Windows 7.

3.6.1.1 Características8

Reconocimiento de voz de Windows permite al usuario controlar el ordenador dando comandos específicos de voz. El programa también puede ser utilizado para el dictado de texto para que el usuario pueda controlar su Sistema Windows.

Reconocimiento de voz de Windows tiene una precisión de reconocimiento bastante alto y ofrece un conjunto de comandos que ayuda en el dictado. Un breve discurso basado tutorial se incluye para ayudar a familiarizar al usuario con los comandos de reconocimiento de voz. La capacitación también se pudo completar para mejorar la precisión de reconocimiento de voz.

En la actualidad, la aplicación es compatible con varios idiomas, incluyendo Inglés (EE.UU. y Reino Unido), español, alemán, francés, japonés y chino (tradicional y simplificado).

3.6.1.2 Detalles técnicos Reconocimiento de voz de Windows se basa en Microsoft SAPI versión 5.3 (incluido en Windows Vista) para funcionar. La aplicación también utiliza el reconocedor de voz de Microsoft para Windows 8.0 como motor de su perfil de voz.

8 Wikipedia. 2010. Blender [en línea]. Características, [http://es.wikipedia.org/w/index.php?title=Blender],[Consulta:20 de Septiembre 2010]

105

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

3.6.2 SAPI9

El Speech Application Programming Interface o SAPI es una API desarrollada por Microsoft para permitir el uso de reconocimiento de voz y síntesis de voz dentro de aplicaciones Windows. Hasta la fecha, una serie de versiones de la API han sido puestos en libertad, que se han distribuido ya sea como parte de un Speech SDK, o como parte de Windows OS en sí. Las aplicaciones que utilizan SAPI incluye Microsoft Office, y .

En general todas las versiones de la API se han diseñado de tal manera que un desarrollador de software puede escribir una aplicación para realizar el reconocimiento y síntesis de voz mediante el uso de un conjunto estándar de interfaces, accesible desde una gran variedad de lenguajes de programación. Además, es posible que una empresa tercera partes para producir su propio reconocimiento de voz y de texto a voz o adaptar los motores de los motores existentes para trabajar con SAPI. En principio, siempre y cuando estos motores se ajustan a las interfaces definidas que pueden ser utilizados en lugar de los motores suministrados por Microsoft.

En general, la API de voz es un componente de libre redistribuible que puede ser enviado con cualquier aplicación de Windows que desea utilizar la tecnología del habla. Muchas versiones (aunque no todos) de los motores de reconocimiento y síntesis de voz también se puede redistribuir libremente.

Ha habido dos grandes "familias" de la API de Microsoft Speech. Versiones SAPI del 1 al 4 son similares entre sí, con las características adicionales en cada nueva versión. SAPI 5 sin embargo, era una interfaz completamente nueva, lanzado en 2000. Desde entonces, varios sub-versiones de este API han sido liberados.

3.6.2.1 SAPI 5 En términos de la API de voz puede ser visto como una interfaz o una pieza de middleware que se encuentra entre las aplicaciones y motores de voz (reconocimiento y síntesis). En las versiones SAPI 1 a 4, las aplicaciones podían comunicarse directamente con los motores.

9 Wikipedia. 2011. Microsoft Speech API [en línea]. Características, [http://en.wikipedia.org/wiki/Microsoft_Speech_API],[Consulta:20 de Septiembre 2011] 106

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

En SAPI 5 Sin embargo, las aplicaciones y los motores no se comunican directamente entre sí. En su lugar cada uno hable con un tiempo de ejecución de los componentes (sapi.dll). Hay un API implementada por este componente de las aplicaciones que uso, y otro conjunto de interfaces para los motores.

Esta versión incluida a finales de 2000 como parte de la Speech SDK versión 5.0, junto con la versión 5.0 de los motores de reconocimiento y síntesis. Los motores de reconocimiento el apoyo de dictado continuo y mando y control y fueron puestos en libertad en EE.UU. Inglés, Español, japonés y chino simplificado versiones. En el sistema de EE.UU. Inglés, modelos acústicos especiales estaban disponibles para el lenguaje infantil y el discurso de telefonía. El motor de síntesis estaba disponible en Inglés y Chino. Esta versión de los motores de la API y el reconocimiento también se incluye en Microsoft Office XP en 2001

3.6.3 MYSQL MySQL es un sistema de gestión de bases de datos relacional, multihilo y multiusuario con más de seis millones de instalaciones. MySQL AB desde enero de 2008 una subsidiaria de y ésta a su vez de Oracle Corporation desde abril de 2009 desarrolla MySQL como software libre en un esquema de licenciamiento dual.

Este gestor de bases de datos es, probablemente, el gestor más usado en el mundo del software libre, debido a su gran rapidez y facilidad de uso. Esta gran aceptación es debida, en parte, a que existen infinidad de librerías y otras herramientas que permiten su uso a través de gran cantidad de lenguajes de programación, además de su fácil instalación y configuración.

Aunque MySQL es software libre, MySQL AB distribuye una versión comercial de MySQL, que no se diferencia de la versión libre más que en el soporte técnico que se ofrece, y la posibilidad de integrar este gestor en un software propietario, ya que de no ser así, se vulneraría la licencia GPL.

Por un lado se ofrece bajo la GNU GPL para cualquier uso compatible con esta licencia, pero para aquellas empresas que quieran incorporarlo en productos privativos deben comprar a la empresa una licencia específica que les permita este uso. Está desarrollado en su mayor parte en ANSI C.

107

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Al contrario de proyectos como Apache, donde el software es desarrollado por una comunidad pública y los derechos de autor del código están en poder del autor individual, MySQL es patrocinado por una empresa privada, que posee el copyright de la mayor parte del código.

Esto es lo que posibilita el esquema de licenciamiento anteriormente mencionado. Además de la venta de licencias privativas, la compañía ofrece soporte y servicios. Para sus operaciones contratan trabajadores alrededor del mundo que colaboran vía Internet.

3.6.4 XML: Persistencia de Datos en java Existen diferentes tipos de persistencia, sin embargo, en la plataforma java uno de los más utilizados es la serialización por la cual se entiende que un objeto puede transformarse en un conjunto de bytes, el mismo que se podrá reconstruir cuando se desee, esto permitirá guardarlo en un archivo o mandarlo por la red.

El estándar XML es un formato de texto simple y muy flexible, fue diseñado para describir datos y hoy en día es de suma importancia para el intercambio de datos a través de la web.

En el proyecto utilizamos las clases XMLEncoder y XMLDecoder para serializar y reconstruir objetos java, lo cual se logra a partir de versiones superiores a la 1.4 la cual solo permitía realizarlo a través de la interfaz serializable usando el formato binario.

XMLEncoder trabaja reproduciendo el grafo del objeto y registrando los pasos que fueron necesarios para crear la copia. Así este posee una copia que XMLDecoder tomaría para descifrar el archivo.

Java ofrece la posibilidad de la clase java.beans.XMLEncoder para realizar la persistencia de objetos como documentos XML, la cual se encarga de convertir el objeto con todos sus datos a un formato XML. Entre las ventajas que posee tenemos:

 Soporta cambios en las versiones lo que permite que sean intercambiables entre entornos que tienen versiones diferentes de alguna clase o incluso máquinas virtuales distintas.

108

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

 Es sumamente compacto ya que XMLEncoder utiliza un algoritmo de eliminación de redundancia.  Tolerante a fallas ya que los errores no estructurales permanecen localizados lo que permite que el proceso continúe con las partes del documento que no se ven afectadas por el error.

3.6.5 Autómata Autómata del griego automatos (αὐτόματος) que significa espontáneo o con movimiento propio, puede referirse a:

 Autómata: Máquina que imita la figura y los movimientos de un ser animado.  Autómata programable: Equipo electrónico programable en lenguaje no informático y diseñado para controlar, en tiempo real y en ambiente industrial, procesos secuenciales. No tiene sus propios movimientos, sino que estos parecen ser de robot.  Teoría de autómatas: Estudio matemático de máquinas abstractas. (p.e. Autómata finito, autómata con pila)

3.6.5.1 Autómata Finito Determinista10

Un autómata finito determinista (abreviado AFD) es un autómata finito que además es un sistema determinista; es decir, para cada estado en que se encuentre el autómata, y con cualquier símbolo del alfabeto leído, existe siempre a lo más una transición posible desde ese estado y con ese símbolo.

Formalmente, se define como una 5-tupla (Q, Σ, q0, δ, F) donde:1

 Q, es un conjunto de estados;  Σ, es un alfabeto;  q0 Є Q es el estado inicial;  δ:Q x Σ →Q es una función de transición;  F Q es un conjunto de estados finales o de aceptación.

10 Wikipedia, 2010. Autómata finito determinista,[En línea], Autómata finito determinista, [http://es.wikipedia.org/wiki/Autómata_finito_determinista], [Consulta: 15 de mayo del 2011] 109

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

En un AFD no pueden darse ninguno de estos dos casos:

 Que existan dos transiciones del tipo δ(q,a)=q1 y δ(q,a)=q2, siendo q1 ≠ q2;  Que existan transiciones del tipo δ(q, ε), donde ε es la cadena vacía, salvo que q sea un estado final, sin transiciones hacia otros estados.

5. Ilustración: Autómata Finito Determinista

110

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

4. RESULTADOS

La Universidad Nacional de Loja, en su misión constante de formar nuevos profesionales en las diferentes carreras que se encuentran en las Áreas como son Área de la Salud Humana, Área de la Educación, Arte y la Comunicación, Área Jurídica, Social y Administrativa, Área Agropecuaria y de Recursos Naturales Renovables y Área de la Energía, Industrias y Recursos Naturales No Renovables.

El Área de la Energía, las Industrias y los Recursos Naturales No Renovables, se encuentra ubicada en el sector La Argelia cerca de la FEUE, posee las siguientes carreras Ingeniería e Electrónica y Telecomunicaciones, Geología Ambiental y Ordenamiento Territorial, Electromecánica, Sistemas y tecnología en electricidad.

Siguiendo el Sistema Académico Modular por Objeto de Transformación (SAMOT) adoptada por la Universidad Nacional de Loja el cual tiene como objetivo principal mejorar la pertinencia social y la calidad de la formación profesional, impulsar la investigación científica y tecnológica, y potenciar la vinculación con la colectividad de manera más efectiva en el desarrollo de la región sur del Ecuador y del país. Lo cual implica que los estudiantes tengan conocimiento de los diferentes problemas que se dan entorno a su profesión o especialidad no solo a nivel local sino también regional, nacional y mundial, y que desarrollen su capacidad de análisis para así poder aportar con soluciones efectivas a los mismos.

Con el fin de mejorar la calidad de acceso a la información bibliográfica a personas no videntes que hacen uso de la biblioteca Braille del Honorable Consejo Provincial de Loja, se toma la iniciativa de desarrollar una herramienta de Software que permita a una persona no vidente utilizar su voz con el objetivo de que el sistema suministre cierta información bibliográfica sobre los libros existes en la Biblioteca Braille, administrar el préstamo y recepción de Libros Braille para luego generar estadísticas, esto mediante la interacción directa con una Computadora. Dichas estadísticas permitirán hacer una mejor planificación, transcripción de Libros que en verdad se requieren así como también una adecuada asignación de la inversión en cuanto a los libros más solicitados por el usuario no vidente, evitando de esta manera la mala administración de recursos económicos. Cabe señalar que esta propuesta permite al ahorro de la mitad del tiempo que normalmente le tomo a una persona no vidente encontrar un tema en un libro braille. 111

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

4.1. Desarrollo de la propuesta alternativa

Para poder evidenciar el correcto desarrollo del presente proyecto de investigación, es necesario realizar la evaluación correspondiente al cumplimiento de los objetivos planteados al inicio del desarrollo de la tesis.

 Objetivo Específico 1

Realizar la investigación detallada para aplicar los conocimientos adquiridos de la misma, en el desarrollo del sistema informático.

El cumplimiento de este Objetivo se llevó a cabo primeramente con la Obtención de información mediante el acceso a páginas Web, una vez recolectada se procedió a categorizar la información y lo cual dio como resultado obtener Información útil para el desarrollo del sistema.

Este proceso me permitió saber más sobre los sistemas de diálogos, como están compuestos, la capacidad de usabilidad que estos pueden llegar a tener, conocer las herramientas de programación para poder desarrollar el proyecto de tesis planteado lo cual me dio las bases para determinar las estrategias a seguir para el desarrollo del sistema.

 Objetivo Específico 2

Realizar la búsqueda de mecanismos eficientes para que el sistema explote la información disponible en un perfil de usuario, con el objetivo de adaptar el comportamiento del sistema a las preferencias, capacidades y características de los usuarios.

Este objetivo se llevó a cabo mediante la técnica de la observación directa del área donde se determinó solucionar el problema planteado, y mediante la técnica de la entrevista, la misma que fue dirigida a los bibliotecarios, para obtener la información respecto de cómo se llevan actualmente el proceso de brindar información bibliográfica 112

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

dentro de la biblioteca, y así también, se realizó una socialización con todos los responsables de la biblioteca, para definir toda la información, que requieren para la realización de esta tarea y también la estructura del formato para el reporte de los mismos, lo cual sirvió para establecer la estructura de los procesos a optimizar para cumplir con el objetivo.

 Objetivo Específico 3

Adaptar un Módulo de reconocimiento del Habla basado en diseños y esquemas abiertos, el cual supla las necesidades del sistema.

Luego de realizar un análisis minucioso de todas y cada una de las herramientas encontradas, y en base a los requerimientos que se determinó en la biblioteca mediante una entrevista con el personal bibliotecario, se pudo determinar de manera clara la mejor herramienta disponible para el desarrollo y adaptación del módulo RAH.

 Objetivo Específico 4

Diseñar y construir el Módulo de comprensión del lenguaje el cual se adapte al ambiente en el cual va a funcionar.

El cumplimiento de este objetivo, se lo pudo realizar en una parte mediante un análisis conjunto con el personal bibliotecario braille, lo cual permitió determinar de manera oportuna la mejor forma en la que el sistema pueda ir actualizando todo su dominio o conocimiento, y por otra parte mediante la utilización de una herramienta que permita el cumplimiento de la tarea antes mencionada de tal manera que la aplicación sea totalmente dinámica.

 Objetivo Específico 5

Diseñar y construir el Módulo gestor del dialogo, orientado a la generación del dialogo entre el usuario y el computador.

El cumplimiento de este objetivo se llevó a cabo, mediante un análisis y estudio de 113

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

todas las formas posibles sobre el desarrollo de este módulo, para solucionar al problema propuesto, llegando a establecer aplicar por una parte autómatas de estados finitos y por otra parte desarrollar un sistema con iniciativa por parte del sistema. Esta última parte se determinó mediante la observación directa y entrevista con todas las personas involucradas en este proceso como son los estudiantes. Lo cual permitió establecer la base para el desarrollo y construcción del Gestor del Dialogo.

 Objetivo Específico 6

Diseñar y construir el Módulo generador de respuestas y de síntesis del habla, usando tecnologías libres, de tal manera que la generación de respuestas sea lo más adaptable el usuario.

Para el desarrollo de este objetivo, se determinó la mejor manera para lograr una respuesta del sistema lo más natural posible, mediante plantillas las cuales serán rellenadas con los datos obtenidos de la base de datos, estas plantillas pudieron ser elaboradas, mediante la técnica de la entrevista, la cual fue realizada al personal que labora en la biblioteca, ayudándome a conocer y adaptar de mejor manera el proceso de generación de respuestas.

 Objetivo Específico 7

Realizar Pruebas pertinentes al Software realizado.

El cumplimiento de este objetivo, se lo realizo mediante la implementación del sistema, lo cual ayudo bastante para la puesta a prueba del sistema y culminación del mismo, permitiendo corregir los problemas que se presentaron y adaptar de mejor manera el sistema con la realización de las sugerencias planteadas por parte de quienes hicieron y harán uso del sistema, cumplimiento de mejor manera el objetivo deseado quedando ambas partes satisfechas.

114

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

 Objetivo Específico 8

Implementar el Sistema de Dialogo para brindar información bibliográfica en la Biblioteca Braille del Honorable Consejo Provincial de Loja.

El cumplimiento de este objetivo, se lo pudo realizar con la implementación, desarrollo y aplicación de la metodología ICONIX, la cual permite llevar un control total de las actividades realizadas en cada una de sus fases sobre el desarrolla de la aplicación plantada.

4.2. Valoración Técnica-Económica-Ambiental

El sistema se desarrolló de la mejor manera posible ya que se contó con todos los recursos humanos, económicos y tecnológicos como hardware y software lo cual hizo posible culminar de forma exitosa el presente proyecto.

Las herramientas empleadas para la implantación del proyecto son de libre distribución lo cual permitió la fácil adquisición de las mismas ya que en su mayoría se encuentran disponibles en sus sitios web. El lenguaje programación utilizado fue java cuya versión es 1.6, el IDE de desarrollo Netbeans 6.8, librería jfreechart-1.0.13 la cual facilito la realización de las gráficas Estadísticas, librería cgjsapi, jsapi y cgjsapi170 las cuales permiten cargar reconocedor y sintetizador de voz, librería liquidlnf-0.2.6 que permite cambiar la apariencia de la interfaz gráfica

Recursos Humanos

Recursos Humanos Cantidad Horas Costo por Hora Costo Total c/u Director de Tesis ------Desarrolladores 1 1000 $3.00 $3000.00 TOTAL $3000.00

4. Tabla: Recursos Humanos

115

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Recursos Materiales

Recursos Materiales Cantidad Costo Unitario Costo Total Resma de Papel 4 $4 $16.00 Cartuchos de tinta. 5 $10 $50.00 Internet/horas 500 $1 $500.00 TOTAL $566.00

5. Tabla: Recursos Materiales

Recursos Técnicos

Recursos Técnicos Cantidad Horas Costo por hora Costo Total Computadores 1 1000 0.30 $300.00 Impresora canon 1 16 0.50 $8.00 pixma ip1500 TOTAL $308.00

6. Tabla: Recursos Técnicos

Recursos Tecnológicos

Recursos Tecnológicos Cantidad Costo Unitario Costo Total NetBeans IDE 6.8 1 Gratuito $0.00 Java JDK 1.6 1 Gratuito $0.00 JSAPI V1.0 1 Gratuito $0.00 Enterprise Architec 7.0 2 Trial $0.00 TOTAL $0.00

7. Tabla: Recursos Tecnológicos

116

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Costo total del Proyecto

Costo total del Proyecto Costo Total Recursos Humanos $3000.00

Recursos Materiales $566.00 Recursos Técnicos $308.00 Recursos Tecnológicos $00.00

TOTAL $3874.00

8. Tabla: Costo Total del Proyecto

117

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5. DISCUSIÓN

5.1. DETERMINACION DE REQUERIMIENTOS 5.2. Determinación de requerimientos funcionales

REFERENCIA FUNCIÓN CATEGORIA VALIDA RF1 Solicitar información y conseguir Evidente pedir un libro con los datos que requiere consultar. RF2 Dialogar con el sistema cuyo Evidente objetivo es el de pedir un libro RF3 Información sobre qué libro fue Evidente solicitado por el estudiante RF4 Administrar entrega y recepción de Evidente libros. RF5 Dialogo dirigido por la semántica Evidente RF6 Mantener un dialogo lo más real y Evidente objetivo posible RF7 Generar el pedido de un libro Evidente RF8 Reconocedor de la gramática Evidente definida RF9 Sintetizador de texto a voz Evidente RF10 Brindar informe de libros Prestados, Evidente existentes y cuales son más usados. RF11 Ingresar libro a la base de datos Evidente RF12 Crear, modificar y eliminar registro Evidente de libros RF13 Administrar registro de libros evidente solicitados actuales

118

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

RF14 Brindar información de Solicitantes. evidente RF15 Informar estado de libros. evidente

9. Tabla: Requerimientos Funcionales

5.2.1. Determinación de requerimientos no funcionales

CODIGO DESCRIPCIÓN RNF001 Funciona bajo el S.O. Windows 7 Ultímate RNF002 Utiliza lenguaje de programación JAVA 1.6 o superior RNF003 Utiliza el Administrador de Base de Datos MYSQL versión 5.0 o superior RNF004 Utiliza el patrón Singleton RNF005 Utiliza el modelo Vista Controlador para la administración de Libros.

10. Tabla: Requerimientos no Funcionales

119

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.3. MODELO DEL DOMINIO

5.3.1. Glosario de términos

TÉRMINO DESCRIPCIÓN Dialogo Discurso oral entre dos personas. Reconocimiento de voz Es una parte de la Inteligencia Artificial que tiene como objetivo permitir la comunicación hablada entre seres humanos y computadoras electrónicas. Síntesis de voz Es la producción artificial de habla humana. Dominio restringido Referente al alcance de palabras utilizadas únicamente en un entorno dado. Braille Es un sistema de comunicación por puntos de manera o superficie con relieve, utilizado por las personas con discapacidad visual. Información bibliográfica Es el estudio de referencia de los textos. Gramática Es el estudio de las reglas y principios que regulan el uso de las lenguas y la organización de las palabras dentro de una oración. JSGF Es una representación textual de gramáticas para su uso en el reconocimiento de voz. JSAPI Esta API especifica una interfaz de plataforma cruzada para apoyar a los reconocedores de mando y control, sistemas de dictado y sintetizadores de voz. Sintetizador Es un dispositivo que se encarga de la producción artificial del habla humana.

120

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Frame canónico Tipo de estructura utilizado para representar los diferentes estados del dialogo entre usuario y la maquina.

11. Tabla: Glosario de términos

121

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.3.2. Modelo conceptual del dominio

6. Ilustración: Modelo inicial del dominio

122

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.4. MODELADO DE CASOS DE USO

5.4.1. Determinación de casos de uso

ACTOR META CASO DE USO Solicitar información y Dialogo con el sistema conseguir pedir un libro con los datos que requiere consultar.

Dialogar con el sistema cuyo Dialogo con el sistema

objetivo es el de pedir un libro.

Dialogo de iniciativa del Dialogo con el sistema sistema, dirigido por reglas definidas.

Estudiante No Vidente No Estudiante Traducir a Texto lo dicho por Dialogo con el sistema el usuario

Brindar Información solicitada Dialogo con el sistema por el sistema

Generar el pedido de un libro Dialogo con el sistema Información sobre qué libro Tareas pendientes Entregar Libro fue solicitado por el estudiante. Bibliotecaria no Vidente Realizar la Tarea Pendiente Tareas pendientes Entregar Libro Entregar Libro

Información sobre que Libros Recepción de Libros están por ser receptados. 123

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Receptar el Libro y regístralo Recepción de Libros como devuelto.

Verificar estado de Libros Inventario de Libros

Controlar libros en existencia Inventario de Libros Bibliotecaria Vidente Brindar informe estadístico Estadística de Materias consultadas.

Brindar informe estadístico Estadística sobre el número de consultas realizadas.

Administrar registro de libros Administración de Libros Braille solicitados actuales

Ingresar un nuevo al sistema Administración de Libros Braille

Modificar datos del libro Administración de Libros Braille

Dar de baja un Libro Administración de Libros Braille

12. Tabla: Determinación de Requerimientos

124

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.4.2. Diagramas de casos de uso

Caso de uso: Dialogo con el sistema.

7. Ilustración: Diagrama del Caso de Uso Dialogo con el sistema

125

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Caso de uso: Tareas Pendientes

8. Ilustración: Diagrama del Caso de Uso Tareas Pendientes

Caso de uso: Recepción de Libros Braille.

9. Ilustración: Diagrama del Caso de Uso Recepción de Libros Braille

126

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Caso de uso: Administrar Libros Braille.

10. Ilustración: Diagrama del Caso de Uso Administrar Libros braille

127

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Caso de uso: Estadística.

11. Ilustración: Diagrama del Caso de Uso Estadística

Caso de uso: Inventario de Libros Braille.

12. Ilustración: Diagrama del Caso de Uso Inventario de Libros Braille 128

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.4.3. PROTOTIPADO DE PANTALLAS

Nombre de la Pantalla: SIBLO-ACCESO A DB Código: PP001 Tipo de Interfaz gráfica: JFrame Caso de Uso: Administrar Libros Braille

Realizado por: José Ubertino Fecha: Jaramillo Zhingre

13. Tabla: Prototipo de la Pantalla – Administrar Libros Braille

129

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Nombre de la Pantalla: Aviso no hay Datos Código: PP002 Requeridos Tipo de Interfaz gráfica: JOptionPane Caso de Uso: Administrar Libros Braille

Realizado por: José Ubertino Fecha: Jaramillo Zhingre

14. Tabla: Prototipo de la Pantalla – Administrar Libros Braille

130

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Nombre de la Pantalla: SIBLO- Presentación Código: PP003 Tipo de Interfaz gráfica: JFrame Caso de Uso:

Realizado por: José Ubertino Fecha: Jaramillo Zhingre

15. Tabla: Prototipo de la Pantalla – Administrar Componentes Gráficos

131

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Nombre de la Pantalla: Ingresar Libro Código: PP004 Tipo de Interfaz gráfica: JFrame Caso de Uso: Administrar Libros Braille

Realizado por: José Ubertino Fecha: Jaramillo Zhingre

16. Tabla: Prototipo de la Pantalla – Exportar Presentación

132

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Nombre de la Pantalla: Buscar Libro a ser Código: PP005 modificado Tipo de Interfaz gráfica: JFrame Caso de Uso: Administrar Libros Braille

Realizado por: José Ubertino Fecha: Jaramillo Zhingre

17. Tabla: Prototipo de la Pantalla – Crear Presentación con diseño

133

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Nombre de la Pantalla: Ingresar ID libro a Código:PP006 modificar Tipo de Interfaz gráfica: JDialog Caso de Uso: Administrar Libros Braille

Realizado por: José Ubertino Fecha: Jaramillo Zhingre

18. Tabla: Prototipo de la Pantalla –Administrar Libros Braille

134

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Nombre de la Pantalla: Modificar Libro Código: PP007 Tipo de Interfaz gráfica: JFrame Caso de Uso: Administrar Libro Braille

Realizado por: José Ubertino Fecha: Jaramillo Zhingre

19. Tabla: Prototipo de la Pantalla – Modificar Libro

135

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Nombre de la Pantalla: Buscar el Libro a ser Código: PP008 Eliminado Tipo de Interfaz gráfica: JFrame Caso de Uso: Administrar Libros Libros

Realizado por: José Ubertino Fecha: Jaramillo Zhingre

20. Tabla: Prototipo de la Pantalla – Eliminar Libro

136

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Nombre de la Pantalla: Ingresar el ID del Libro a Código: PP009 Eliminar Tipo de Interfaz gráfica: JDialog Caso de Uso: Administrar Libros Braille

Realizado por: José Ubertino Fecha: Jaramillo Zhingre

21. Tabla: Prototipo de la Pantalla – Eliminar Libro

137

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Nombre de la Pantalla: Aviso Datos erroneos Código: PP010 Tipo de Interfaz gráfica: JOptionPane Caso de Uso: Administrar Libros Braille

Realizado por: José Ubertino Fecha: Jaramillo Zhingre

22. Tabla: Prototipo de la Pantalla – Eliminar Libro

138

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Nombre de la Pantalla: Aviso Libro Eliminado Código: PP011 Tipo de Interfaz gráfica: JOptionPane Caso de Uso: Administrar Libros Braille

Realizado por: José Ubertino Fecha: Jaramillo Zhingre

23. Tabla: Prototipo de la Pantalla – Eliminar Libro

139

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Nombre de la Pantalla: Solicitar ID del Libro a ver Código: PP012 detalles Tipo de Interfaz gráfica: JOptionPane Caso de Uso: Administrar Libros Braille

Realizado por: José Ubertino Fecha: Jaramillo Zhingre

24. Tabla: Prototipo de la Pantalla – Detalles de Libro Braille

140

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Nombre de la Pantalla: Detalles de Libro Braille Código:PP013 Tipo de Interfaz gráfica: JFrame Caso de Uso: Administrar Libros Braille

Realizado por: José Ubertino Fecha: Jaramillo Zhingre

25. Tabla: Prototipo de la Pantalla – Detalles de Libro Braille

141

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Nombre de la Pantalla: Inventario Libros Braille Código:PP013 Tipo de Interfaz gráfica: JFrame Caso de Uso: Inventario Libros Braille

Realizado por: José Ubertino Fecha: Jaramillo Zhingre

26. Tabla: Prototipo de la Pantalla – Inventario Libros Braille

142

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Nombre de la Pantalla: Reportes estadísticos Código:PP013 Tipo de Interfaz gráfica: JFrame Caso de Uso: Estadística

Realizado por: José Ubertino Fecha: Jaramillo Zhingre

27. Tabla: Prototipo de la Pantalla – Reportes estadísticos

143

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Nombre de la Pantalla: Selección de Voz del Código:PP013 Sistema Tipo de Interfaz gráfica: JDialog Caso de Uso:

Realizado por: José Ubertino Fecha: Jaramillo Zhingre

28. Tabla: Prototipo de la Pantalla – Selección de Voz del sistema

144

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.5. DESCRIPCION DE CASOS DE USO 5.5.1. Caso de Uso Dialogo con el sistema.

CU-001 Caso de Uso: CU-001 Dialogo con el sistema. Actores: Usuario no vidente(U), Software(S) Resumen: El usuario del sistema podrá saber, si existe o no un libro braille que contenga un tema que busca. Referencias RF-002 Cruzadas: Precondiciones: El asistente de software haya iniciado y se haya configurado una voz del sistema. Postcondiciones: Se cree una nueva Tarea Pendiente a la bibliotecaria. Curso normal de eventos Acción del actor Respuesta del sistema 3. Recibe al usuario con el saludo de 1. El caso de uso comienza bienvenida al sistema y pregunta al cuando el usuario invidente usuario si necesita instrucciones de uso. entra al sistema y se coloca al micrófono con la intención de 5. El sistema Procede a dar Instrucciones realizar cierta tarea. de uso del sistema de dialogo. El sistema solicita la materia del tema que 2. El usuario selecciona del busca. asistente de software la opción realizar consulta presionando la 6. El sistema solicita la materia de tecla F1. consulta.

4. El usuario escucha al sistema y responde afirmando la pregunta hecha por el sistema

7. El usuario escucha al sistema y responde con la materia 145

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

solicitada. 8. El sistema reconoce que la Materia hablada por el usuario es correcta y la “Dice” para confirma.

9. El usuario escucha al sistema 10. El sistema reconoce que la palabra y confirma la respuesta. hablada por el usuario es correcta.

11. Almacena la materia el en Frame Consulta.

12. El sistema solicita el nombre del Libro.

13. El usuario escucha al sistema y responde con el 14. El sistema reconoce que el Nombre nombre del libro. del Libro hablado por el usuario es correcta y la “Dice” para confirma.

15. El usuario escucha al 16. El sistema reconoce que la palabra sistema y confirma la respuesta. hablada por el usuario es correcta.

17. Almacena la materia el en Frame Consulta.

18. El sistema solicita el Autor del Libro.

19. El usuario escucha al 20. El sistema reconoce que el Nombre sistema y responde con el del Autor hablado por el usuario es 146

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

nombre del autor. correcta y la “Dice” para confirma.

22. El sistema reconoce que la palabra 21. El usuario escucha al hablada por el usuario es correcta. sistema y confirma la respuesta. 23. Almacena la materia el en Frame Consulta.

24. El sistema solicita el tema o contendió.

25. El usuario escucha al 26. El sistema reconoce que el tema sistema y responde con el tema. hablado por el usuario es correcta y la “Dice” para confirma.

27. El usuario escucha al 28. El sistema reconoce que la palabra sistema y confirma la respuesta. hablada por el usuario es correcta.

29. Almacena la materia el en Frame Consulta.

30. Realiza La consulta en la Base de datos y genera la respuesta sobre la consulta presentando los libros encontrados.

31. El sistema pregunta a usuario que 147

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

seleccione algún libro de los presentados.

32. El usuario escucha al 33. El sistema reconoce que la palabra sistema, y escoge un libro de hablada por el usuario es correcta y “dice” los presentados. el libro seleccionado para confirmar.

34. El usuario escucha al sistema y confirma la respuesta. 35. El sistema reconoce que la palabra hablada por el usuario es correcta.

36. El sistema solicita el Numero de cedula. 37. El usuario escucha al sistema y responde con el número de su cedula. 38. El sistema Reconoce y valida que sean solo números y lo “Dice” para confirmar. 39. El usuario escucha al sistema y confirma la respuesta.

40. El sistema reconoce que la palabra hablada por el usuario es correcta.

41. El sistema solicita el Nombre del 42. El usuario escucha al Usuario. 148

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

sistema y responde con sus nombres. 43. El sistema Reconoce que el nombre dado es válido y lo “Dice” para confirmar.

44. El usuario escucha al sistema y confirma la respuesta. 45. El sistema reconoce que la palabra hablada por el usuario es correcta.

46. El sistema solicita el Apellido del Usuario. 47. El usuario escucha al sistema y responde dando sus apellidos. 48. El sistema Reconoce y valida los apellidos y lo “Dice” para confirma.

49. El usuario escucha al sistema y confirma la respuesta. 50. El sistema reconoce que la palabra hablada por el usuario es correcta.

51. El sistema solicita la Dirección del Usuario.

52. El usuario escucha al sistema y responde dando su 53. El sistema Reconoce y valida la dirección. dirección y la “Dice” para confirmar.

54. El usuario escucha al 55. El sistema reconoce que la palabra sistema y confirma la respuesta. hablada por el usuario es correcta.

56. El sistema solicita el Teléfono del 149

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Usuario.

57. El usuario escucha al sistema y responde dando su 58. El sistema Reconoce y valida el número de teléfono. número de teléfono y lo “Dice” para confirma.

59. El usuario escucha al sistema y confirma la respuesta. 60. El sistema reconoce que la palabra hablada por el usuario es correcta.

61. El sistema registra al usuario y genera la tarea pendiente a la bibliotecaria no vidente.

62. El caso de uso finaliza.

Curso alterno de eventos Acción del actor Respuesta del sistema A4.El usuario Responde con un A4. El sistema no da las instrucciones de valor negativo. Uso.

B7.B13-B19-B25. El usuario B8. El sistema informa que no lo ha responde con datos que no sean a entendido. los solicitados o datos fuera del B9. El sistema Vuelve a solicitar el dato. dominio. A9-A15-A21-A27. El usuario B8.1 El sistema valida lo dicho por el usuario responde con el comando “SALIR”. y solicita confirmar comando de salida del sistema. A9-A15-A21-A27. El usuario Niega A10. El sistema valida lo dicho por usuario.

150

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

la respuesta. A11. El sistema Solicita nuevamente el dato

A32. El usuario da un número de A33. El sistema valida lo dicho por el usuario libro fuera del rango. y le informa nuevamente las opciones disponibles. B32. E l usuario dice el comando B33. El sistema valida lo dicho. “NINGUNO” B34. El sistema Pregunta al usuario sobre una nueva consulta? A37. El usuario da un numero de A.38 El sistema valida el número de cedula cedula no valido reconocido mediante un algoritmo de validación de números de cedula. A.39 Si no es válido el número de cedula el sistema lo solicita nuevamente. A37-A42-A47-A52-A57. El usuario B.38 El sistema informa que no lo ha responde con datos que no sean a entendido. los solicitados o datos fuera del B39. El sistema Vuelve a solicitar el dato. dominio A39-A44-A49-A54-59. El usuario A40. El sistema valida lo dicho por usuario. Niega la respuesta. A41. El sistema Solicita nuevamente el dato.

A40. El sistema busca usuario en la base de datos con el número de cedula y si ya existe le comunica que lo ha identificado. A41. El sistema ya no solicita datos como nombre-apellido-dirección-teléfono. A42. El sistema genera la terea pendiente.

29. Tabla: Descripción del caso de uso Dialogo con el sistema

151

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.5.2. Caso de uso Comprensión del habla.

CU-002 Caso de Uso: CU-002 Comprensión del habla. Actores: Usuario(U), Software(S) Resumen: El usuario del sistema podrá dar información únicamente la permitida dentro del Dominio. Referencias RF-002 Cruzadas: Precondiciones: El dialogo con el sistema este ya iniciado. Postcondiciones: Curso normal de eventos Acción del actor Respuesta del sistema 1. El usuario escucha al 2. El sistema carga la gramática sistema y responde. adecuada al dato solicitado. 3. Activa el reconocedor con la nueva gramática. 4. Reconoce lo dicho por usuario según la gramática cargada. 5. Genera una cadena de texto que contiene los mejores Tokens reconocidos. 6. La guarda en un archivo la cadena. 7. validar en el autómata la frase reconocida. 8. Retorna un valor booleano TRUE si todo esta correcto caso contrario un valor de FALSE. 9. El caso de uso Finaliza.

Curso alterno de eventos Acción del actor Respuesta del sistema A7. El sistema no realiza la validación la 152

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

frase con el autómata.

30. Tabla: Descripción del caso de uso Crear Presentación con plantilla

153

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.5.3. Caso de uso Gestor del Dialogo.

CU-003 Caso de Uso: CU-003 Gestor del Dialogo. Actores: Usuario(U), Software(S) Resumen: El usuario del sistema podrá dialogar con el sistema. Referencias RF-002 Cruzadas: Precondiciones: El dialogo con el sistema este ya iniciado. Postcondiciones: Curso normal de eventos Acción del actor Respuesta del sistema 1. El usuario escucha al 2. Estado del sistema toma un valor de sistema y responde. iniciado. 3. El sistema da la iniciativa. 4. Obtiene la sentencia del turno de usuario. 5. Extrae el significado de la sentencia. 6. De acuerdo al estado actual, determina el nuevo estado en base a un autómata finito determinista. 7. El estado toma el valor permitido por el autómata. 8. Actualiza Valores 9. Verifica si se cuenta con datos para realizar una consulta a la base de datos. 10. Si hay todos los genera un SQL. 11. Ejecuta el SQL generado. 12. Determina la nueva transición en base a los resultados del SQL. 13. Genera Frame de salida 14. Generar Respuesta para el usuario 15. Sintetizar Respuesta generada. 16. Generar Tarea Pendiente, en el 154

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

momento que se haya cumplido todas las condiciones para hacerlo. 17. Repite nuevamente l ciclo hasta que el usuario diga el comando “SALIR”. 18. El caso de uso finaliza.

Curso alterno de eventos Acción del actor Respuesta del sistema A1. El usuario escucha al sistema y A2. El sistema avisa al usuario que lo que responde con información fuera del esta fuera del dominio lo que está diciendo. dominio. A2. Solicita nuevamente el dato. B5. El sistema determina si se ha rebasado el número de errores en la comprensión. B6. Si se ha llegado al límite de errores por parte del usuario genera una respuesta indicando lo que sucede con las posibles opciones.

31. Tabla: Descripción del caso de uso Gestor del dialogo.

155

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.5.4. Caso de uso Tareas Pendientes.

CU-004 Caso de Uso: CU-004 Tareas Pendientes. Actores: Usuario(U), Software(S) Resumen: El usuario del sistema podrá procesar las tareas pendientes, entregar el libro solicitado y registrar dicho préstamo. Referencias RF-002 Cruzadas: Precondiciones: El usuario haya realizado pedido de libros. Postcondiciones: Se procesa la terea pendiente y se registra el libro prestado quedando en espera de ser receptado. Curso normal de eventos Acción del actor Respuesta del sistema 1. El usuario presiona la tecla 2. El sistema da un saludo de F3 para entrar a Tareas bienvenida al usuario. pendientes 3. El sistema Busca en la base de datos las tareas pendientes por procesar. 4. Informa el total de las tareas pendientes que ha encontrado.

5. El usuario presiona la tecla ESPACIADORA. 6. El sistema lee una Tarea pendiente el orden ascendente.

8. El usuario presiona la tecla ENTER. 9. El sistema cambia de estado de lectura de tareas pendientes a estado de procesar tareas pendientes. 10. Indica al usuario que va a procesar la tarea.

156

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

11. El usuario presiona la tecla ESPACIADORA 12. El sistema procesa la tarea pendiente y comunica al usuario el estado de la acción realizada.

13. El sistema cambia de estado procesar tareas pendientes a Leer tareas pendientes.

14. El ciclo se repite hasta que el usuario presione la tecla ESCAPE.

15. El caso de uso finaliza.

Curso alterno de eventos Acción del actor Respuesta del sistema A4. El sistema informa que no se han encontrado tareas pendientes. A5. El usuario presiona la tecla A5.1 El sistema informa que no hay tareas ESPACIADORA pendientes por procesar. A6. El usuario presiona la tecla A6.1 El sistema informa que no hay tareas ENTER pendientes por procesar

32. Tabla: Descripción del caso de uso Tareas Pendientes.

157

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.5.5. Caso de uso Recepción de Libros Braille.

CU-005 Caso de Uso: CU-005 Recepción de Libros Braille. Actores: Usuario(U), Software(S) Resumen: El usuario del sistema registrar que libros han sido devueltos, saber cuántos libros hay por receptar con datos de cada solicitante. Referencias RF-005 Cruzadas: Precondiciones: El usuario haya prestado libros. Postcondiciones: Se procesa la recepción de libros braille y se registra el libro receptado. Curso normal de eventos Acción del actor Respuesta del sistema 1. El usuario presiona la tecla 2. El sistema da un saludo de bienvenida F4 para entrar a Recepción al usuario. de Libros. 3. El sistema Busca en la base de datos los libros que están por receptar . 4. Informa el total de libros por receptar que ha encontrado. 5. El usuario presiona la tecla ESPACIADORA. 6. El sistema lee un libro por receptar en orden ascendente.

8. El usuario presiona la tecla ENTER.

9. El sistema cambia de estado de lectura de libros por receptar a estado de receptar libro. 10. Indica al usuario que va a procesar la recepción del libro. 158

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

11. El usuario presiona la tecla ESPACIADORA

12. El sistema procesa la recepción del libro y comunica al usuario el estado de la acción realizada.

13. El sistema cambia de estado procesar recepción de libro a Leer tareas libros por receptar.

14. El ciclo se repite hasta que el usuario presione la tecla ESCAPE.

15. El caso de uso finaliza.

Curso alterno de eventos Acción del actor Respuesta del sistema A4. El sistema informa que no se han encontrado Libros por receptar. A5. El usuario presiona la tecla A5.1 El sistema informa que no hay Libros ESPACIADORA por receptar a ser procesados. A6. El usuario presiona la tecla A6.1 El sistema informa que no hay Libros ENTER por receptar a ser procesados.

33. Tabla: Descripción del caso de uso Recepción de libros braille.

159

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.5.6. Caso de uso Ingresar Libro.

CU-006 Caso de Uso: CU-006 Ingresar Libro. Actores: Usuario(U), Software(S) Resumen: El usuario del sistema podrá registrar libros braille del sistema. Referencias RF-005 Cruzadas: Precondiciones: El asistente de software haya iniciado Postcondiciones: Actualizar e incrementar el dominio de la aplicación con nuevos contenidos. Curso normal de eventos Acción del actor Respuesta del sistema 1. El usuario selecciona 2. El sistema busca en la base de datos Ingresar Libro de la barra de la materia, curso y llena los herramientas en la Pantalla componentes que muestran dichos Principal. datos. 3. El sistema muestra el panel correspondiente para ingresar Libros. 4. El sistema desactiva de la barra de herramientas el menú administrar y el menú reportes. 5. El usuario llena los campos correspondientes a la cabecera el libro. 6. El usuario digita uno a uno 9. El sistema valida la información los datos que forman parte ingresada por el usuario. del índice del libro. 10. El sistema Verifica que el nombre del 7. El usuario añade el libro y el tomo no existan el base de contenido del índice del datos. índice del libro a la tabla. 11. El sistema verifica que por lo menos 8. El usuario presiona el botón hayan 2 contenidos o temas Guardar. ingresados. 12. El sistema Ingresa el Libro en la base de datos. 160

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

13. El sistema da un aviso al usuario que el libro se ha ingresado correctamente.

14. El usuario presiona el botón sácame de aquí.

15. El caso de uso finaliza.

Curso alterno de eventos Acción del actor Respuesta del sistema A7. El usuario añade el contenido del índice del libro a la tabla. A7.1 El usuario se ubica en el registro de la tabla corrige algún dato mal ingresado a la tabla de índices. A7.3 El usuario actualiza su contenido. A7.2 El usuario presiona la tecla ENTER para confirmar el cambio del dato.

34. Tabla: Descripción del caso de uso Ingresar Libro.

161

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.5.7. Caso de uso Modificar Libro.

CU-007 Caso de Uso: CU-007 Modificar Libro. Actores: Usuario(U), Software(S) Resumen: Permite al usuario Modificar el contenido de un Libro. Referencias RF-002 Cruzadas: Precondiciones: El usuario haya ingresado al sistema. Postcondiciones: Curso normal de eventos Acción del actor Respuesta del sistema 1. El usuario seleccione 2. El sistema muestra el panel Actualizar Libro de la barra correspondiente para Buscar el Libro de herramientas en la a ser modificado. Pantalla Principal. 3. El usuario despliega opción 6. El sistema realiza la búsqueda de los buscar libro y selecciona libros que cumplan la condición de una opción. búsqueda. 4. El usuario Ingresa el dato del 7. El sistema Presenta en la tabla, los libro a buscar. libros encontrados. 5. El usuario Presiona el botón Buscar. 8. El usuario presiona en botón 9. El sistema presenta el JOptionDialog Modificar. preguntando el ID del libro a modificar.

10. El usuario ingresa el ID del 12. El sistema busca los datos del libro libro que quiere modificar. según el ID y llena el componente 11. El usuario presiona el botón modificar libro. Aceptar. 13. Desactiva el campo Nombre del Libro 14. El usuario Realiza los y campo Tomo. cambios necesarios al 16. El sistema realiza la actualización del libro. libro en la base de datos. 15. El usuario presiona el botón 17. El sistema Informa que la tarea ha Guardar. sido realizado con éxito. 162

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

18. El caso de uso finaliza. Curso alterno de eventos Acción del actor Respuesta del sistema A10. El usuario ingresa ID erróneo A11. El sistema valida el ID, y si no existe del libro. avisa al usuario. A12. El sistema vuelve a solicitar el ID del libro B10. El usuario Presiona el botón B11. El sistema cierra el dialogo que solicita cancelar. e ID del libro.

35. Tabla: Descripción del caso de uso Modificar Libro

163

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.5.8. Caso de uso Eliminar Libro.

CU-008 Caso de Uso: CU-008 Eliminar Libro. Actores: Usuario(U), Software(S) Resumen: El usuario podrá dar de Baja un Libro braille del sistema. Referencias RF-012 Cruzadas: Precondiciones: Postcondiciones: Curso normal de eventos Acción del actor Respuesta del sistema 1. El usuario seleccione Dar de 2. El sistema muestra el panel Baja Libro de la barra de correspondiente para Buscar el Libro herramientas en la Pantalla a ser modificado. Principal. 3. El usuario despliega opción 6. El sistema realiza la búsqueda de los buscar libro y selecciona libros que cumplan la condición de una opción. búsqueda. 4. El usuario Ingresa el dato del 7. El sistema Presenta en la tabla, los libro a buscar. libros encontrados. 5. El usuario Presiona el botón Buscar. 8. El usuario presiona el botón 9. El sistema presenta el JOptionDialog Eliminar. preguntando el ID del libro a modificar. 10. El usuario ingresa el ID del libro que quiere modificar. 11. El usuario presiona el botón 12. El sistema proceda a eliminar el libro Aceptar. de la base de datos. 13. El sistema informa que la tarea ha sido realizado con éxito. 14. El caso de uso finaliza.

Curso alterno de eventos Acción del actor Respuesta del sistema 164

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

A10. El usuario ingresa ID erróneo A11. El sistema valida el ID, y si no existe del libro. avisa al usuario. A12. El sistema vuelve a solicitar el ID del libro B10. El usuario Presiona el botón B11. El sistema cierra el dialogo que solicita e cancelar. ID del libro.

36. Tabla: Descripción del caso de uso Eliminar Libro

165

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.5.9. Caso de uso Estadística.

CU-009 Caso de Uso: CU-009 Estadística. Actores: Usuario(U), Software(S) Resumen: El usuario podrá generar estadística sobre las materias o consultas realizadas, permitiendo imprimir estas estadísticas. Referencias RF-018 Cruzadas: Precondiciones: Postcondiciones: Curso normal de eventos Acción del actor Respuesta del sistema 1. El usuario selecciona 2. El sistema muestra el panel Reportes > ir a Reportes, de correspondiente para la generación de la barra de herramientas en estadísticas. la Pantalla Principal. 3. El usuario selecciona del 4. El sistema presenta los componentes jcombobox el tipo de requeridos a ser llenados por el estadística a generar. usuario para poder generar la estadística seleccionada. 5. El usuario selecciona los 7. El sistema valida el tipo de estadística parámetros de la estadística a generar. que quiere generar. 8. El sistema valida el periodo y el mes. 6. El usuario presiona el botón 9. El sistema genera el SQL de acuerdo Generar Estadística. a los datos marcados por usuario. 10. El sistema Ejecuta el SQL para obtener los datos a ser analizados. 11. El sistema ordena la información y genera la gráfica estadística. 12. El sistema muestra al usuario la gráfica generada. 13. El sistema cambia el texto del botón Generar estadística por Nuevo Reporte. 166

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

14. El caso de uso finaliza.

Curso alterno de eventos Acción del actor Respuesta del sistema A3. EL usuario no selecciona A3.1 El sistema le indica que debe ningún tipo de estadística. seleccionar una opción. A5. El usuario no selecciona ningún A5.1 El sistema le indica que debe parámetro valido. seleccionar parámetros validos.

37. Tabla: Descripción del caso de uso Estadística.

167

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.5.10. Caso de uso Imprimir Estadística.

CU-010 Caso de Uso: CU-010 Imprimir Estadística. Actores: Usuario(U), Software(S) Resumen: El usuario del sistema podrá agregar nuevas diapositivas a la presentación de forma rápida y sencilla. Referencias RF-001 Cruzadas: Precondiciones: El usuario haya creado una presentación. Postcondiciones: Se agregue la nueva diapositiva a la presentación. Curso normal de eventos Acción del actor Respuesta del sistema 1. El usuario selecciona el 2. El sistema presenta la gráfica de la botón generar estadística estadística generada. 3. El usuario da clic derecho en 5. El sistema presenta la pantalla para cualquier lado de la Grafica configurar impresión. estadística. 4. El usuario selecciona la opción imprimir. 6. El usuario configura las 8. El sistema envía los datos a imprimir a opciones de impresión la impresora. adecuadas. 7. El usuario presiona el botón aceptar de la pantalla de configuración de impresión. 9. El caso de uso finaliza.

Curso alterno de eventos Acción del actor Respuesta del sistema A7. El usuario presiona el botón A8. El sistema termina el proceso de cancelar. impresión.

38. Tabla: Descripción del caso de uso imprimir estadística

168

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.5.11. Caso de uso Inventario de Libros Braille.

CU-011 Caso de Uso: CU-011 Inventario de Libros Braille. Actores: Usuario(U), Software(S) Resumen: El usuario del sistema podrá ver el total y estado de los libros braille que están disponibles para los usuarios, de forma rápida y sencilla. Referencias RF-001 Cruzadas: Precondiciones: Se haya ingresado libros al sistema. Postcondiciones: Curso normal de eventos Acción del actor Respuesta del sistema 1. El usuario Administrar > 2. El sistema muestra el panel Inventario de libros, de la correspondiente a inventario de libros. barra de herramientas en la 3. El sistema desactiva de la barra de Pantalla Principal. herramientas el menú administrar y el menú reportes 4. El usuario selecciona criterio 7. El sistema genera el SQL adecuado para la búsqueda correspondiente para l búsqueda de de libros. libros. 5. Ingresa el dato solicitado 8. El sistema ejecuta el SQL generado y para encontrar el libro. presenta los libros encontrados según 6. El usuario selecciona el el criterio de búsqueda elegido por el botón buscar. usuario y mostrándolos en la tabla. 9. El usuario selecciona botón Sácame de aquí. 10. El caso de uso finaliza.

Curso alterno de eventos

39. Tabla: Descripción del caso de uso Inventario de Libros Braille

169

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.5.12. Caso de uso Imprimir Inventario de Libros Braille.

CU-012 Caso de Uso: CU-012 Imprimir Inventario de Libros Braille. Actores: Usuario(U), Software(S) Resumen: El usuario podrá imprimir la información relacionada con el inventario de libros. Referencias RF-001 Cruzadas: Precondiciones: El usuario haya ingresado al sistema y haya buscado libros en Inventario. Postcondiciones: Se imprimirá los resultados de la búsqueda en el inventario de libros. Curso normal de eventos Acción del actor Respuesta del sistema 1. El usuario selecciona el 2. El sistema presenta la pantalla para botón imprimir de la ventana configurar impresión. Inventario de libros braille. 3. El usuario selecciona la 5. El sistema realiza la impresión del configuración de impresión inventario de Libros de acuerdo a la deseada. configuración realizada. 4. El usuario presiona el botón 6. El sistema indica que la impresión se imprimir. ha realizado con éxito.

7. El caso de uso finaliza.

Curso alterno de eventos Acción del actor Respuesta del sistema A4. El usuario presiona el botón A4.1 El sistema termina el proceso de cancelar impresión de inventario de libros lbraille.

40. Tabla: Descripción del caso de uso Imprimir inventario de Libros Braille

170

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.6. MODELADO DE ROBUSTEZ

5.6.1. Modelo de robustez del Caso de uso Dialogo con el sistema.

object Dialogo con el Sistema

WHILE(STADO!=SALIR)

Transion a estado

Run-Dialogo Iniciar Componentes ControlDialogo DB

Listen 1 Prsiona F1

ReconocerFrase AnalizarFrase Frame principal Usuario no v idente Speak Frase

GenerarRespuesta GenerarTareaPendiente

13. Ilustración: DR Crear presentación vacía

171

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.6.2. Modelo de robustez del Caso de uso Comprensión del Habla.

object Comprension

Analizar Lexicamente

Habla Frase o comando

Frame Principal Listen Best Tokens Write best Tokens Usuario No v idente Analisar Sintacticamente

Gestor del Dialogo

14. Ilustración: DR Comprensión del habla

172

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.6.3. Modelo de robustez del Caso de uso Tareas Pendientes.

object Tareas Pendientes

Run Adnibistrador RL Find Libros por Frame Principal Receptar en DB

Presiona F3

SpeakLibros por receptar hallados

Presiona Tecla ESPACIADORA

Frame Principal Read un Libro por Usuario No v idente Receptar

Presiona la tecla ENTER

Presiona la tecla ESCAPE

Frame Principal Procesar la RL Update Libros por Receptar en DB

Frame Principal SALIR DE TP

15. Ilustración: DR Tareas Pendientes

173

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.6.4. Modelo de robustez del Caso de uso Recepción de Libros Braille.

object Recepción de libros Braille

Run Adnibistrador RL Find Libros por Frame Principal Receptar en DB

Presiona F3

SpeakLibros por receptar hallados

Presiona Tecla ESPACIADORA

Frame Principal Read un Libro por Usuario No v idente Receptar

Presiona la tecla ENTER

Presiona la tecla ESCAPE

Frame Principal Procesar la RL Update Libros por Receptar en DB

Frame Principal SALIR DE TP

16. Ilustración: DR Recepción de Libros Braille

174

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.6.5. Modelo de robustez del Caso de uso Ingresar Libro Braille.

object Ingresar Libro Braille

Activa Opciones Frame Principal

Elige la opción Ingresar Libro Load Datos a Materia, Curso DB Componentes

Frame Principal

Completa los campos requeridos Selecciona Stock Validar Materia Nueva crear Materia DB Selecciona Pais

Selecciona Materia Frame Principal

Presiona el Botón Crear Materia

Presiona el botón Crear crear Curso DB

Validar Curso Nuevo Selecciona Curso

Presiona el botón Crear Curso Frame Principal Usuario v idente Presiona el botón Crear

Presiona el botón Add

Presiona el botón Guardar Frame Principal

add contenido Validar Datos

Jtable Contenidos

Crear Libro

Valida Datos Frame Principal

Crear contenido

17. Ilustración: DR Ingresar Libros Braille

175

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.6.6. Modelo de robustez del Caso de uso Modificar Libro Braille.

object Modificar libro braille

Frame Principal Elige la opción Dar de baja Libro

Selecciona el tipo de busqueda del libro

JPanel Drop update Libro Ingresa los datos del libro

Selecciona el botón Buscar

Selecciona el botón eliminar

JPanel Drop Usuario Vidente updateLibro Pseiona el botona aceptar Solicita el ID del libro a modificar

Rea;liza los cambios

Presiona el boton Guardar

JOptionPane.imputDialog Validar ID

Update Libro

Validar Datos JPanel Eliminar Libro

Update Contenido

18. Ilustración: DR Modificar Libro Braille

176

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.6.7. Modelo de robustez del Caso de uso Eliminar Libro Braille.

object Eliminar Libro Braille

Frame Principal Elige la opción Dar de baja Libro

Selecciona el tipo de busqueda del libro

JPanel Drop update Libro Ingresa los datos del libro

Selecciona el botón Buscar

Selecciona el botón eliminar

JPanel Drop Usuario Vidente updateLibro Pseiona el botona aceptar Solicita el ID del libro a eliminar

Prseiona el Boton Aceptar

JOptionPane.imputDialog Validar ID Update Libro DB

Informa el estado de la acción

JOptionPane.ShowMessage

19. Ilustración: DR Eliminar Libro Braille

177

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.6.8. Modelo de robustez del Caso de uso Estadística.

20. Ilustración: DR Estadística

178

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.6.9. Modelo de robustez del Caso de uso Imprimir estadística.

object Imprimir Estadistica

Clic derecho JPanel Grafica

Selecciona la opcióm Imprimir

Control Configura Impresion Presenta

Usuario Vidente Botón Aceptar

botón Aceptar Pantalla imprimir imprimir

Comunica que la impresión a terminado

JOptionPane.showDialog

21. Ilustración: DR Imprimir estadística

179

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.6.10. Modelo de robustez del Caso de uso Inventario de libros Braille.

object Inv entario Libros Braille

Frame Principal

Selecciona la opción Invntario de Libros Braille

selecciona tipo de Busqueda

Ingresa los datos solicitados JPanel Inventario

botón Buscar Usuario Vidente

JPanel Inventario Validar Datos Buscar Libros Presentar

JTable Libros

22. Ilustración: DR Inventario e Libros Braille

180

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.6.11. Modelo de robustez del Caso de uso Imprimir inventario de Libros Braille.

object Imprimir Inv entario de Libros

JPanelInventario

botón Imprimir Presenta

Configura Impresión

botón Imprimir Pantalla Imprimir

Usuario Vidente imprimir Inform que la impresion a terminado

JOptionPane.showDialog

23. Ilustración: DR Inventario de libros Braille

24. Ilustración: DR Modificar componente grafico

181

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.7. MODELADO DE SECUENCIA O MODELO DETALLADO 5.7.1. Modelado de secuencia del Caso de uso Dialogo con el sistema.

25. Ilustración: DS Flujo Normal Dialogo con el sistema

182

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Flujo Alterno

26. Ilustración: DS Flujo Alterno Crear presentación vacía

183

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.7.2. Modelado de secuencia del Caso de uso Comprensión del Habla.

27. Ilustración: DS Flujo Normal Comprensión del Habla

Flujo Alterno

28. Ilustración: DS Flujo Alterno Crear presentación con plantilla 184

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.7.3. Modelado de secuencia del Caso de uso Tareas Pendientes.

29. Ilustración: DS Flujo Normal Tareas Pendientes

Flujo Alterno

30. Ilustración: DS Flujo Alterno Modificar presentación 185

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.7.4. Modelado de secuencia del Caso de uso Recepción de Libros Braille.

31. Ilustración: DS Flujo Normal Recepción de Libros Braille

186

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.7.5. Modelado de secuencia del Caso de uso Ingresar Libro.

32. Ilustración: DS Flujo Normal Ingresar Libro braille

187

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Flujo Alterno

33. Ilustración: DS Flujo Alterno Exportar presentación en formato png

188

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.7.6. Modelado de secuencia del Caso de uso Modificar Libro Braille.

34. Ilustración: DS Flujo Normal Modificar Libro Braille

189

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.7.7. Modelado de secuencia del Caso de uso Eliminar Libro Braille.

35. Ilustración: DS Flujo Normal Eliminar Libro Braille

190

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.7.8. Modelado de secuencia del Caso de uso Estadística.

36. Ilustración: DS Flujo Normal Estadística

191

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Flujo Alterno

37. Ilustración: DS Flujo Alterno Generar Vista previa

192

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.7.9. Modelado de secuencia del Caso de uso Imprimir Estadística

38. Ilustración: DS Flujo Normal Imprimir Estadística

193

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.7.10. Modelado de secuencia del Caso de uso Inventario de Libros Braille.

39. Ilustración: DS Flujo Normal Inventario de Libros Braille

194

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.7.11. Modelado de secuencia del Caso de uso Imprimir Inventario de Libros Braille.

40. Ilustración: DS Flujo Normal Imprimir Inventario de Libros Braille

195

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.8. MODELADO DE ARQUITECTURA 5.8.1. Modelo de Arquitectura

VOZ USUSARIO VOZ SISTEMA

INTERFAZ MICROFONO - HEADPHONES

MEMORIA

SEMÁNTICO

GESTIÓN DIÁLOGO GESTIÓN

SYNTETIZADOR VOZ SYNTETIZADOR

RECONOCEDOR DE VOZ DE RECONOCEDOR

GENERADOR RESPUESTAS GENERADOR ANALIZADOR ANALIZADOR

GESTOR DE BASE DE DATOS

DICCIONARIO BASE DE DATOS

41. Ilustración: Arquitectura del Sistema 196

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.8.2. Diagrama de paquetes

42. Ilustración: Diagrama de Paquetes

197

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.8.3. Diagrama de clases por paquete

Paquete unl.sis_dialog.Control

pkg Control

ActionListener ActionListener ActionListeningUpdateBook ActionListeningInv entarioBook

+ componentsMessages: HashMap = null - idlibro: int = -1 - id_libro: int = -1 - libros: LinkedList = null - opd: operacionesDB = null - libroSelected: Libro = null - result: ResultSet = null - opd: operacionesDB = null - SQL: String = "" - result: ResultSet = null - SQL: String = "" + actionPerformed(ActionEvent) : void + encerarBox(Vector) : void + actionPerformed(ActionEvent) : void + encerarComponentes(Vector) : void - printTable() : void + getComponentMessages() : HashMap + ValidarDatos(int) : boolean + isExisteLibro(String, int) : boolean + validarCombobox(Vector) : boolean + verSihayDatos(Vector) : boolean

ActionListener ActionListener ActionListeningAccesoDB ActionListeningReporte

+ componentsMessages: HashMap = null - opd: operacionesDB = null ~ panelGrafico: ChartPanel = null + actionPerformed(ActionEvent) : void - result: ResultSet = null + desactivarOpcionesaCliente() : void - SQL: String = "" + getComponentMessages() : HashMap + IniciarAplicacion() : void + actionPerformed(ActionEvent) : void + verSihayDatos(Vector) : boolean - createChart(PieDataset, String) : JFreeChart + getMes(int) : String

ActionListener ActionListener ActionListeningCrearLibro ActionListeningUpdateDeleteLibros + componentsMessages: HashMap = null - id_libro: int = -1 - idlibro: int = -1 - opd: operacionesDB = null - libros: LinkedList = null - result: ResultSet = null - libroSelected: Libro = null - opd: operacionesDB = null - SQL: String = "" - result: ResultSet = null + actionPerformed(ActionEvent) : void - SQL: String = "" + encerarBox(Vector) : void + encerarComponentes(Vector) : void + actionPerformed(ActionEvent) : void + solicitarIdlibro(String) : int + getComponentMessages() : HashMap + validarCombobox(Vector) : boolean + ValidarId_libroRecibido(int) : boolean + verSihayDatos(Vector) : boolean

43. Ilustración: Diagrama de Clases del Paquete unl.sis_dialog.Control

198

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Paquete unl.sis_dialog.Mod.RAH

pkg RAH

GrammarAdapter AdaptarGramatica GramCommitTest ~ gram0: RuleGrammar + AdaptarGramatica() ~ gram1: RuleGrammar + grammarActivated(GrammarEvent) : void ~ gram1enabled: boolean = true + grammarDeactivated(GrammarEvent) : void ~ gram1rule: int = 0 ~ gram2: RuleGrammar ~ gram2rule: int = 0 ~ rec: Recognizer = null ~ rules1: String ([]) = {"alpha","bravo... ResultAdapter ~ rules2: String ([]) = {"uno","dos","t... ~ synth: Synthesizer = null Escucha

- BgrammarAutores: boolean = false + listCommands(Recognizer) : void - BgrammarComand: boolean = false + main(String[]) : void - BgrammarConsult: boolean = false - BgrammarDireccion: boolean = false - BgrammarNombre: boolean = false - BgrammarNombreLibros: boolean = false - BgrammarNumber: boolean = false - BgrammarTodosConsulta: boolean = false ~ cont: int = 3 ~ grammarAllConsult: RuleGrammar = null ~ grammarAutores: RuleGrammar = null ~ grammarComandos: RuleGrammar = null ~ grammarDireccion: RuleGrammar ~ grammarMaterias: RuleGrammar = null ~ grammarNombres: RuleGrammar = null ~ grammarNombresLibros: RuleGrammar = null ~ grammarNumeros: RuleGrammar = null + gst: String = "" + listenig_completo: boolean = false + recognizer: Recognizer = null + tokens_best_recognizer: String = null

+ activarGramtica(String) : void + cleanupRecognizer() : void + desactivarGramticaActiva() : void + enableReco(boolean) : void + Escucha() + Escucha(Recognizer) + getRecognizer() : Recognizer + getTokens_best_recognizer() : String + initRecognizer() : void + isListenig_completo() : boolean + listCommands(Recognizer) : void + LoadGramticaAdecuada() : void + main(String[]) : void + pausarRecognizer() : void + resultAccepted(ResultEvent) : void + SavetoFile() : void + setListenig_completo(boolean) : void + setRecognizer(Recognizer) : void + setTokens_best_recognizer(String) : void

44. Ilustración: Diagrama de Clases del Paquete RAH

199

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Paquete unl.sis_dislog.Mod.Comprension_Habla

pkg Comprension_Habla

CUP$AnalizadorSintactico$actions

- parser: AnalizadorSintactico {readOnly}

~ CUP$AnalizadorSintactico$actions(AnalizadorSintactico) + CUP$AnalizadorSintactico$do_action(int, java_cup.runtime.lr_parser, java.util.Stack, int) : java_cup.runtime.Symbol ~ print(String) : void

#action_obj

-parser java_cup.runtime.lr_parser AnalizadorSintactico java_cup.runtime.Scanner sym # _action_table: short ([][]) = unpackFromStrin... {readOnly} AnalizadorLexico # _production_table: short ([][]) = unpackFromStrin... {readOnly} + A: int = 32 {readOnly} # _reduce_table: short ([][]) = unpackFromStrin... {readOnly} + ACEPTAR: int = 14 {readOnly} ~ columna: int = 1 # action_obj: CUP$AnalizadorSintactico$actions + ADMINISTRAR: int = 4 {readOnly} ~ string: StringBuffer = new StringBuffer() + AQUI: int = 30 {readOnly} ~ temp_include: String + action_table() : short[] + CANCELAR: int = 15 {readOnly} - yychar: int + AnalizadorSintactico() + CASA: int = 33 {readOnly} - yycolumn: int + AnalizadorSintactico(java_cup.runtime.Scanner) + COMP: int = 40 {readOnly} + YYEOF: int = -1 {readOnly} + AnalizadorSintactico(java_cup.runtime.Scanner, java_cup.runtime.SymbolFactory) + CONSULTAR: int = 3 {readOnly} + YYINITIAL: int = 0 {readOnly} + do_action(int, java_cup.runtime.lr_parser, java.util.Stack, int) : java_cup.runtime.Symbol + CONTENIDO: int = 18 {readOnly} - yyline: int + EOF_sym() : int + CULFIS: int = 39 {readOnly} - ZZ_ACTION: int ([]) = zzUnpackAction() {readOnly} + error_sym() : int + DE: int = 23 {readOnly} - ZZ_ACTION_PACKED_0: String = "\1\1\1\2\1\3\1... {readOnly} # init_actions() : void + DIGIT: int = 29 {readOnly} - ZZ_ATTRIBUTE: int ([]) = zzUnpackAttribute() {readOnly} + production_table() : short[] + EL: int = 24 {readOnly} - ZZ_ATTRIBUTE_PACKED_0: String = "\1\1\3\11\1\1\... {readOnly} + reduce_table() : short[] + EOF: int = 0 {readOnly} - ZZ_BUFFERSIZE: int = 16384 {readOnly} + semantic(Symbol, String) : void + error: int = 1 {readOnly} - ZZ_CMAP: char ([]) = zzUnpackCMap(ZZ... {readOnly} + semantic(String, Object) : void + ESTE: int = 11 {readOnly} - ZZ_CMAP_PACKED: String = "\10\0\1\0\1\2\... {readOnly} + start_production() : int + FIS: int = 37 {readOnly} - ZZ_ERROR_MSG: String ([]) = { "Unkown ... {readOnly} + start_state() : int + FRA: int = 45 {readOnly} - ZZ_LEXSTATE: int ([]) = { 0, 0 } {readOnly} + syntax_error(Symbol) : void + IDCADENA: int = 22 {readOnly} - ZZ_NO_MATCH: int = 1 {readOnly} + unrecovered_syntax_error(Symbol) : void + IDE: int = 47 {readOnly} - ZZ_PUSHBACK_2BIG: int = 2 {readOnly} + INDICE: int = 19 {readOnly} - ZZ_ROWMAP: int ([]) = zzUnpackRowMap() {readOnly} + ING: int = 44 {readOnly} - ZZ_ROWMAP_PACKED_0: String = "\0\0\0\34\0\34... {readOnly} + INV: int = 41 {readOnly} - ZZ_TRANS: int ([]) = zzUnpackTrans() {readOnly} + LA: int = 26 {readOnly} - ZZ_TRANS_PACKED_0: String = "\1\2\1\3\1\4\1... {readOnly} + LAS: int = 28 {readOnly} - ZZ_UNKNOWN_ERROR: int = 0 {readOnly} + LIBRO: int = 6 {readOnly} - zzAtBOL: boolean = true + LIT: int = 38 {readOnly} - zzAtEOF: boolean + LLEVAR: int = 31 {readOnly} - zzBuffer: char ([]) = new char[ZZ_BUF... + LOS: int = 27 {readOnly} - zzCurrentPos: int + MAN: int = 42 {readOnly} - zzEndRead: int + MAT: int = 36 {readOnly} - zzEOFDone: boolean + MEC: int = 43 {readOnly} - zzLexicalState: int = YYINITIAL + NECESITO: int = 5 {readOnly} - zzMarkedPos: int + NINGUNO: int = 34 {readOnly} - zzReader: java.io.Reader + NO: int = 13 {readOnly} - zzStartRead: int + QUE: int = 8 {readOnly} - zzState: int + QUI: int = 46 {readOnly} + QUIERO: int = 2 {readOnly} + AnalizadorLexico(java.io.Reader) + REGRESAR: int = 16 {readOnly} + AnalizadorLexico(java.io.InputStream) + SALIR: int = 17 {readOnly} + next_token() : java_cup.runtime.Symbol + SI: int = 12 {readOnly} - parseLong(int, int, int) : long + SOBRE: int = 7 {readOnly} - symbol(int) : Symbol + STRING: int = 48 {readOnly} - symbol(int, Object) : Symbol + SUBTITULO: int = 21 {readOnly} + yybegin(int) : void + TENGA: int = 9 {readOnly} + yycharat(int) : char + TENGO: int = 35 {readOnly} + yyclose() : void + TIENE: int = 10 {readOnly} + yylength() : int + TITULO: int = 20 {readOnly} + yypushback(int) : void + UN: int = 25 {readOnly} + yyreset(java.io.Reader) : void + yystate() : int + yytext() : String - zzDoEOF() : void - zzRefill() : boolean - zzScanError(int) : void - zzUnpackAction() : int[] - zzUnpackAction(String, int, int[]) : int - zzUnpackAttribute() : int[] - zzUnpackAttribute(String, int, int[]) : int - zzUnpackCMap(String) : char[] - zzUnpackRowMap() : int[] - zzUnpackRowMap(String, int, int[]) : int - zzUnpackTrans() : int[] - zzUnpackTrans(String, int, int[]) : int

45. Ilustración: Diagrama de Clases del Paquete Comprension_habla

200

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Paquete unl.sis_dialog.Mod.Control_Dialogo

pkg Control_Dialogo

Thread Administrar_RL

+ estado: int = 0 + genera_respuesta: Generar_Respuesta = new Generar_Res... Red_RD_Libros_automata ~ keyPressed: String = "" + keys: Vector = null ~red ~ estado_siguiente: int = 0 ~ listenning: boolean = false ~ red: Red_RD_Libros_automata = new Red_RD_Libr... + Red_RD_Libros_automata() ~ speak: Syntetizador = null + Transicion_a(String, int) : int ~ SQL: String = ""

+ accederBaseDatos() : boolean + Administrar_RL() + ejecutarSql() : int + getKeysPermitidas() : Vector + getSpeak() : Syntetizador Thread + isKeyPermitida(String) : boolean Administrar_TP + run() : void + setSpeak(Syntetizador) : void + estado: int = 0 + userKeyPressed() : boolean + genera_respuesta: Generar_Respuesta = new Generar_Res... ~ keyPressed: String = "" + keys: Vector = null ~ listenning: boolean = false v alor_estados ~ red: Red_TP_automata = new Red_TP_auto... ~ speak: Syntetizador = null + ADMINISTRAR: int = 2 {readOnly} ~ SQL: String = "" + CONFIRMACION: int = 3 {readOnly} + CONSULTA: int = 1 {readOnly} + accederBaseDatos() : boolean + convert_values: HashMap = null + Administrar_TP() + Frame_del_dialogo: HashMap = null + ejecutarSql() : int + Frames_RL: HashMap = null + getKeysPermitidas() : Vector + Frames_TP: HashMap = null + getSpeak() : Syntetizador + Gramatica_for_Frame_del_dialogo: HashMap = null + isKeyPermitida(String) : boolean + inicio: int = 0 {readOnly} + run() : void + nodos: HashMap = null + setSpeak(Syntetizador) : void + SALIR: int = 4 {readOnly} + userKeyPressed() : boolean + get_avanzarA() : HashMap + get_convert_values() : HashMap + get_Frame_del_dialogo() : HashMap + get_Gramatica_for_Frame_del_dialogo() : HashMap ~red + main(String[]) : void «property get» Red_TP_automata + getFrames_RL() : HashMap ~ estado_siguiente: int = 0 + getFrames_TP() : HashMap «property set» + Red_TP_automata() + setFrames_RL(HashMap) : void + Transicion_a(String, int) : int + setFrames_TP(HashMap) : void

Thread GestordelDialogo

- avisoUsuario: String = "" ~ cont: int = 0 Red_deldialogo_automata ~ continuar: boolean = false + estado: int = 0 - estado_sig: int = 0 + genera_respuesta: Generar_Respuesta = null + HistoriNodosRecorridos: Vector = null ~ recoEnabled: boolean = false - numero_negaciones: int = 0 + red_del_dialogo: Red_deldialogo_automata = null +red_del_dialogo + speak: Syntetizador = null + analizar_Frame(File) : int ~ SQL: String = "" + elegir_Transiscion(int, boolean) : int + getObjectFrame() : FrameCanonico + Actualizar_RVA(Object) : void + Red_deldialogo_automata() + consulta_completa(Object) : boolean + Transicion_a(int, Object) : int + darIniciativa() : void + validarContenidos() : boolean + Ejecutar_SQL_generado() : int + extraer_significado(String) : Object + generar_frame_salida(int) : File + GestordelDialogo() + getSpeak() : Syntetizador + Iniciar(String) : void + run() : void + setSpeak(Syntetizador) : void + updateStock() : boolean + userInteractua() : boolean + Validar_Tokens_in_automata() : boolean

46. Ilustración: Diagrama de Clases del Paquete Control_Dialog

201

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Paquete unl.sis_dialog.Mod.Genera_Respuesta

pkg Genera_Respuesta

Generar_Respuesta

~ N_libro_read: int = 0 ~ N_tarea_read: int = 0 ~ plantillasDR_LIBROS: HashMap = null ~ plantillasTP: HashMap = null

+ determinar_respuesta(String) : String + Generar_Respuesta() + GetInstruccionesdeUso() : String + getPlantillasRD_Libros() : HashMap + getPlantillasTP() : HashMap + getRespuestaDR_Libros() : String + getRespuestaTP() : String + plantillas() : HashMap

47. Ilustración: Diagrama de Clases del Paquete Generar_Respuesta

Paquete unl.sis_dialog.Mod.Sintetizador

pkg Sintetizador

Syntetizador

~ sinAdap: SynthesizerAdapter = null + synth: Synthesizer = null

+ cleanupSynthesizer() : void + main(String[]) : void + sayTexto(String) : void + Syntetizador(String) + Syntetizador() + Syntetizador(Boolean) + SyntetizadorTest() : void

48. Ilustración: Diagrama de Clases del Paquete Sintetizador

202

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Paquete unl.sis_dialog.Vistas.GUI

pkg GUI

javax.swing.JPanel JComboBox JPanel_Configuracion ComboxPersonalizado JDialog JPanel - jButton1Aceptar: JButton ~ opd: operacionesDB = null DialogSeleccionarVoz Presentacion - jButton1Cancelar: JButton ~ tabla: String = null - jComboBox1TipoEquipo: JComboBox - ayud: JDialog = null + area: JTextPane - jLabel1: JLabel + ComboxPersonalizado(String) - pantalla: Dimension + cuatro: JPanel - jLabel2: JLabel + UpdateComponent() : void - presentacion: Presentacion -presentacion + dos: JPanel - jLabel3: JLabel ~ file: File = null - jLabel4: JLabel -jComboBoxMateria-jComboBoxCUrsos-jComboBoxMateria-jComboBoxCUrsos + Ayuda() : void ~ patchProyect: String = "" - jLabel5: JLabel + DialogSeleccionarVoz() + tres: JPanel - jPanel1BaseDatos: JPanel + main(String[]) : void + uno: JPanel - jPanel1Center: JPanel - url: URL - jPasswordField1Passdb: JPasswordField +jdialog - jTextField1Ip: JTextField + getTree() : JTree - jTextField1Puerto: JTextField + Presentacion() - jTextField1Userdb: JTextField - oyente: ActionListeningAccesoDB = new ActionListe...

+ getJButton1Aceptar() : JButton + getJButton1Cancelar() : JButton + getJComboBox1TipoEquipo() : JComboBox + getJPanel1BaseDatos() : JPanel javax.swing.JFrame + getJPanel1Center() : JPanel NewJFrame + getJPasswordField1Passdb() : JPasswordField javax.swing.JPanel - jMenu1BackupDB: JMenu + getJTextField1Ip() : JTextField JPanel_UpdateLibro - jMenuAdmin: JMenu + getJTextField1Puerto() : JTextField - jMenuAyuda: JMenu + getJTextField1Userdb() : JTextField + control: ControlTablaLibro = new ControlTabl... javax.swing.JPanel - jMenuBarPrincipal: JMenuBar - initGUI() : void - jButtonAddRegistro: JButton JPanel_insertLibro - jMenuConfiguracion: JMenu + JPanel_Configuracion() - jButtonCancelar: JButton - jMenuItemAcercaDe: JMenuItem + main(String[]) : void - jButtonCancelarCurso: JButton + control: ControlTablaLibro = new ControlTabl... - jMenuItemBackup: JMenuItem - jButtonCaneclarMateria: JButton - jButtonAddRegistro: JButton - jMenuItemCrear: JMenuItem - jButtonnewCurso: JButton - jButtonCancelar: JButton - jButtonCancelarCurso: JButton javax.swing.JPanel - jMenuItemDelete: JMenuItem - jButtonnewMateria: JButton - jMenuItemEliminarLibro: JMenuItem - jButtonSave: JButton - jButtonCaneclarMateria: JButton JPanel_ListRecursosDisponibles - jMenuItemGuia: JMenuItem - jComboBoxCUrsos: ComboxPersonalizado - jButtonnewCurso: JButton - jButton1Aceptar: JButton - jMenuItemInventario: JMenuItem - jComboBoxMateria: ComboxPersonalizado - jButtonnewMateria: JButton - jButton1Cancelar: JButton - jMenuItemPresentarReportes: JMenuItem - jComboBoxPais: JComboBox - jButtonSave: JButton - jButton1Provar: JButton - jMenuItemPropiedaes: JMenuItem - jComboBoxQty: JComboBox - jComboBoxCUrsos: ComboxPersonalizado - jComboBox1Voces: JComboBox - jMenuItemRestaurarDB: JMenuItem - jComboBoxStock: JComboBox - jComboBoxMateria: ComboxPersonalizado + jdialog: DialogSeleccionarVoz = null - jMenuReport: JMenu - jComboBoxYearPublication: JComboBox - jComboBoxPais: JComboBox - jLabel2: JLabel - jPanelPrincipal: JPanel - jComboBoxYearTranscription: JComboBox - jComboBoxQty: JComboBox - jPanel1Center: JPanel - jSeparator1Administar: JSeparator - jLabel1: JLabel - jComboBoxStock: JComboBox - jPanel1TestVoz: JPanel - jSeparator2: JSeparator - jLabel10: JLabel - jComboBoxYearPublication: JComboBox - jComboBoxYearTranscription: JComboBox - jPanelSur: JPanel - keyListening: keyListenig = null - jLabel11: JLabel - jTextArea1TextoTest: JTextArea - jLabel12: JLabel - jLabel1: JLabel ~ list: ListEngineTest = new ListEngineTest() + getJMenu1BackupDB() : JMenu - jLabel13: JLabel - jLabel10: JLabel ~ propiedades: SyntetisadorPropiedades = null + getJMenuAdmin() : JMenu - jLabel14: JLabel - jLabel11: JLabel ~ syntetisadorres: Vector< Object> = null + getJMenuAyuda() : JMenu - jLabel15: JLabel - jLabel12: JLabel ~ synth: Synthesizer = null + getJMenuBarPrincipal() : JMenuBar - jLabel16: JLabel - jLabel13: JLabel + getJMenuConfiguracion() : JMenu - jLabel17: JLabel - jLabel14: JLabel + getJButton1Aceptar() : JButton + getJMenuItemAcercaDe() : JMenuItem - jLabel18: JLabel - jLabel15: JLabel + getJButton1Cancelar() : JButton + getJMenuItemBackup() : JMenuItem - jLabel19: JLabel - jLabel16: JLabel + getJButton1Provar() : JButton + getJMenuItemCrear() : JMenuItem - jLabel2: JLabel - jLabel17: JLabel + getJComboBox1Voces() : JComboBox + getJMenuItemDelete() : JMenuItem - jLabel3: JLabel - jLabel18: JLabel + getJPanel1Center() : JPanel + getJMenuItemEliminarLibro() : JMenuItem - jLabel4: JLabel - jLabel19: JLabel + getJPanel1TestVoz() : JPanel + getJMenuItemGuia() : JMenuItem - jLabel5: JLabel - jLabel2: JLabel + getJPanelSur() : JPanel + getJMenuItemInventario() : JMenuItem - jLabel6: JLabel - jLabel3: JLabel + getJTextArea1TextoTest() : JTextArea + getJMenuItemPresentarReportes() : JMenuItem - jLabel7: JLabel - jLabel4: JLabel - initGUI() : void + getJMenuItemPropiedaes() : JMenuItem - jLabel8: JLabel - jLabel5: JLabel - jButton1AceptarActionPerformed(ActionEvent) : void + getJMenuItemRestaurarDB() : JMenuItem - jLabel9: JLabel - jLabel6: JLabel - jButton1CancelarActionPerformed(ActionEvent) : void + getJMenuReport() : JMenu - jPanelCenter: JPanel - jLabel7: JLabel - jButton1ProvarActionPerformed(ActionEvent) : void + getJPanelPrincipal() : JPanel - jPanelCenterContenido: JPanel - jLabel8: JLabel + JPanel_ListRecursosDisponibles(DialogSeleccionarVoz) + getJSeparator1Administar() : JSeparator - jPanelContenidos: JPanel - jLabel9: JLabel - jPanelCenter: JPanel + LoadSytetizador() : void - initGUI() : void - jPanelcontieneCurso: JPanel + main(String[]) : void - jMenuItemRestaurarDBActionPerformed(ActionEvent) : void - jPanelcontieneMateria: JPanel - jPanelCenterContenido: JPanel + main(String[]) : void - jPanelNorte: JPanel - jPanelContenidos: JPanel + NewJFrame() - jPanelSouth: JPanel - jPanelcontieneCurso: JPanel - jPanelcontieneMateria: JPanel - thisKeyPressed(KeyEvent) : void - jScrollPaneTabla: JScrollPane - thisWindowClosed(WindowEvent) : void - jTableContenido: JTable - jPanelNorte: JPanel - jTextFieldAutor: JTextField - jPanelSouth: JPanel - jTextFieldCapitulo: JTextField - jScrollPaneTabla: JScrollPane - jTableContenido: JTable - jTextFieldEditorial: JTextField - jTextFieldNewCurso: JTextField - jTextFieldAutor: JTextField - jTextFieldNewMateria: JTextField - jTextFieldCapitulo: JTextField javax.swing.JPanel - jTextFieldNumeroPagina: JTextField - jTextFieldEditorial: JTextField JPanel_Drop_update_Libro - jTextFieldNewCurso: JTextField - jTextFieldNumeroPaginas: JTextField + controlLibro: ControlTablaBuscarLibro = new ControlTabl... - jTextFieldPrecio: JTextField - jTextFieldNewMateria: JTextField javax.swing.JPanel - jTextFieldNumeroPagina: JTextField - jButtonBuscarLibro: JButton - jTextFieldSubtitulo: JTextField JPanel_inventario - jButtonDetalles: JButton - jTextFieldTitulo: JTextField - jTextFieldNumeroPaginas: JTextField - jButtonEliminar: JButton - jTextFieldTituloLibro: JTextField - jTextFieldPrecio: JTextField + controlLibro: ControlTablaInventarioLibro = new ControlTabl... - jButtonSali: JButton - jTextFieldTomo: JTextField - jTextFieldSubtitulo: JTextField - jButtonBuscar: JButton - jButtonUpdate: JButton + libroSelectedWork: Libro = null - jTextFieldTitulo: JTextField - jButtonCancelar: JButton - jComboBoxTipoBusqueda: JComboBox + modelo: ModeloTablaLibro = new ModeloTabla... - jTextFieldTituloLibro: JTextField - jButtonImprimir: JButton - jLabel1: JLabel - oyente: ActionListeningUpdateBook = new ActionListe... - jTextFieldTomo: JTextField - jComboBoxTipoBusqueda: JComboBox - jPanelCenter: JPanel + posContenidosModificados: Vector = null + modelo: ModeloTablaLibro = new ModeloTabla... - jLabel1: JLabel - jPanelEsteCenter: JPanel - jPanelCenter: JPanel - jPanelN1: JPanel + getJButtonAddRegistro() : JButton + getJButtonAddRegistro() : JButton - jPanelCentroTabla: JPanel - jPanelNorte: JPanel + getJButtonCancelar() : JButton + getJButtonCancelar() : JButton - jPanelNort1: JPanel - jPanelOeste: JPanel + getJButtonCancelarCurso() : JButton + getJButtonCancelarCurso() : JButton - jPanelNorte: JPanel - jPanelSouth: JPanel + getJButtonCaneclarMateria() : JButton + getJButtonCaneclarMateria() : JButton - jPanelSur: JPanel - jScrollPaneContainTable: JScrollPane + getJButtonnewCurso() : JButton + getJButtonnewCurso() : JButton - jScrollPaneTabla: JScrollPane - jTableLibros: JTable + getJButtonnewMateria() : JButton + getJButtonnewMateria() : JButton - jTableInventario: JTable - jTextFieldDatBunsqueda: JTextField + getJButtonSave() : JButton + getJButtonSave() : JButton - jTextFieldDatoBusqueda: JTextField + modelo: ModeloTablaBuscarLibro = new ModeloTabla... + getJComboBoxCUrsos() : ComboxPersonalizado + getJComboBoxCUrsos() : ComboxPersonalizado + modelo: ModeloTablaInventarioLibro = new ModeloTabla... ~ oyente: ActionListeningUpdateDeleteLibros = new ActionListe... + getJComboBoxMateria() : ComboxPersonalizado + getJComboBoxMateria() : ComboxPersonalizado ~ oyente: ActionListeningInventarioBook = new ActionListe... + getJComboBoxPais() : JComboBox + getJComboBoxPais() : JComboBox + getJButtonBuscarLibro() : JButton + getJComboBoxQty() : JComboBox + getJComboBoxQty() : JComboBox + getJButtonBuscar() : JButton + getJButtonDetalles() : JButton + getJComboBoxStock() : JComboBox + getJComboBoxStock() : JComboBox + getJButtonCancelar() : JButton + getJButtonEliminar() : JButton + getJComboBoxYearPublication() : JComboBox + getJComboBoxYearPublication() : JComboBox + getJButtonImprimir() : JButton + getJButtonSali() : JButton + getJComboBoxYearTranscription() : JComboBox + getJComboBoxYearTranscription() : JComboBox + getJComboBoxTipoBusqueda() : JComboBox + getJButtonUpdate() : JButton + getJLabel19() : JLabel + getJLabel19() : JLabel + getJPanelCenter() : JPanel + getJComboBoxTipoBusqueda() : JComboBox + getJPanelCenterContenido() : JPanel + getJPanelCenterContenido() : JPanel + getJPanelCentroTabla() : JPanel + getJPanelCenter() : JPanel + getJPanelContenidos() : JPanel + getJPanelcontieneCurso() : JPanel + getJPanelNort1() : JPanel + getJPanelEsteCenter() : JPanel + getJPanelcontieneCurso() : JPanel + getJPanelNorte() : JPanel + getJPanelNorte() : JPanel + getJPanelN1() : JPanel + getJPanelNorte() : JPanel + getJPanelSouth() : JPanel + getJPanelSur() : JPanel + getJPanelNorte() : JPanel + getJPanelSouth() : JPanel + getJTableContenido() : JTable + getJScrollPaneTabla() : JScrollPane + getJTextFieldAutor() : JTextField + getJPanelOeste() : JPanel + getJTableContenido() : JTable + getJTableInventario() : JTable + getJPanelSouth() : JPanel + getJTextFieldAutor() : JTextField + getJTextFieldCapitulo() : JTextField + getJTextFieldDatoBusqueda() : JTextField + getJScrollPaneContainTable() : JScrollPane + getJTextFieldCapitulo() : JTextField + getJTextFieldEditorial() : JTextField - initGUI() : void + getJTableLibros() : JTable + getJTextFieldEditorial() : JTextField + getJTextFieldNewCurso() : JTextField + JPanel_inventario() + getJTextFieldNewMateria() : JTextField + getJTextFieldDatBunsqueda() : JTextField + getJTextFieldNewCurso() : JTextField + main(String[]) : void - initGUI() : void + getJTextFieldNewMateria() : JTextField + getJTextFieldNumeroPagina() : JTextField + JPanel_Drop_update_Libro() + getJTextFieldNumeroPagina() : JTextField + getJTextFieldNumeroPaginas() : JTextField + main(String[]) : void + getJTextFieldNumeroPaginas() : JTextField + getJTextFieldPrecio() : JTextField + getJTextFieldSubtitulo() : JTextField + getJTextFieldPrecio() : JTextField + getJTextFieldSubtitulo() : JTextField + getJTextFieldTitulo() : JTextField + getJTextFieldTitulo() : JTextField + getJTextFieldTituloLibro() : JTextField + getJTextFieldTituloLibro() : JTextField + getJTextFieldTomo() : JTextField javax.swing.JPanel + getQtyMaximo() : Vector + getJTextFieldTomo() : JTextField JPanel_Eliminar + getLibroSelectedWork() : Libro + Getyears() : Vector + getPosContenidosModificados() : Vector - initGUI() : void javax.swing.JPanel - jButtonFinf: JButton + getQtyMaximo() : Vector + JPanel_insertLibro() JPanel_ReportA - jComboBoxCriterioBusqueda: JComboBox + Getyears() : Vector + main(String[]) : void - jComboBoxMaterias: JComboBox - initGUI() : void + setJButtonAddRegistro(JButton) : void ~ dataset: DefaultCategoryDataset = new DefaultCate... - jLabel1: JLabel + JPanel_UpdateLibro() + setJTextFieldCapitulo(JTextField) : void - jButton1Generar: JButton - jList1: JList + LoadDatosInterfaz(Libro) : void + setJTextFieldNewCurso(JTextField) : void - jButtonCancelar: JButton - jPanelCenter: JPanel + main(String[]) : void + setJTextFieldNewMateria(JTextField) : void - jComboBoxMeses: JComboBox - jTextFieldNombre: JTextField + onlyReadDatos() : void + setJTextFieldNumeroPagina(JTextField) : void - jComboBoxtDateReporte: JComboBox + setJButtonAddRegistro(JButton) : void + setJTextFieldSubtitulo(JTextField) : void - jComboBoxTipoReporte: JComboBox + getJButtonFinf() : JButton + setJPanelContenidos(JPanel) : void + setJTextFieldTitulo(JTextField) : void - jComboBoxYears: JComboBox + getJComboBoxMaterias() : JComboBox + setJTextFieldCapitulo(JTextField) : void - jLabel1: JLabel + getJPanelCenter() : JPanel + setJTextFieldNewCurso(JTextField) : void - jLabel2: JLabel + getJTextFieldNombre() : JTextField + setJTextFieldNewMateria(JTextField) : void - jLabelMes: JLabel - initGUI() : void + setJTextFieldNumeroPagina(JTextField) : void - jLabelYear: JLabel + JPanel_Eliminar() + setJTextFieldSubtitulo(JTextField) : void - jPanelCenter: JPanel + main(String[]) : void + setJTextFieldTitulo(JTextField) : void - jPanelNorte: JPanel + setLibroSelectedWork(Libro) : void - jPanelSur: JPanel + setPosContenidosModificados(Vector) : void ~ oyente: ActionListeningReporte = new ActionListe...

+ addDatos(int, String, String) : void + getJButton1Generar() : JButton + getJButtonCancelar() : JButton + getJComboBoxMeses() : JComboBox + getJComboBoxtDateReporte() : JComboBox + getJComboBoxTipoReporte() : JComboBox + getJComboBoxYears() : JComboBox + getJLabel1() : JLabel + getJLabelMes() : JLabel + getJLabelYear() : JLabel + getJPanelCenter() : JPanel + getJPanelNorte() : JPanel + getJPanelSur() : JPanel - initGUI() : void + JPanel_ReportA() + main(String[]) : void

49. Ilustración: Diagrama de Clases del Paquete Sintetizador

203

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Paquete unl.sis_dialog.Vistas.Utilidades

pkg Utilidades

TableModel ModeloTablaLibro

- datos: LinkedList = new LinkedList() - listeners: LinkedList = new LinkedList()

+ addContenidos(LinkedList) : void + addTableModelListener(TableModelListener) : void ControlTablaLibro + anhadePersona(Contenido) : void - modelo: ModeloTablaLibro = null - avisaSuscriptores(TableModelEvent) : void -modelo - numero: int = 0 + borraPersona(int) : void + encerarAllTable() : void + addContenidos(LinkedList) : void + getColumnClass(int) : Class + anhadeFila() : void + getColumnCount() : int + anhadeFila(Contenido) : void + getColumnName(int) : String + borraFila() : void + getContenidos() : LinkedList + ControlTablaLibro(ModeloTablaLibro) + getRowCount() : int + getValueAt(int, int) : Object + isCellEditable(int, int) : boolean + removeTableModelListener(TableModelListener) : void + setValueAt(Object, int, int) : void ControlTablaBuscarLibro

- modelo: ModeloTablaBuscarLibro = null - numero: int = 0 ControlTablaInv entarioLibro + addLibros(LinkedList) : void - modelo: ModeloTablaInventarioLibro = null + anhadeFila() : void - numero: int = 0 + anhadeFila(Libro) : void + borraFila() : void + addLibros(LinkedList) : void + ControlTablaBuscarLibro(ModeloTablaBuscarLibro) + anhadeFila() : void + anhadeFila(Libro) : void + borraFila() : void + ControlTablaInventarioLibro(ModeloTablaInventarioLibro)

-modelo

TableModel -modelo ModeloTablaInv entarioLibro TableModel - datos: LinkedList = new LinkedList() ModeloTablaBuscarLibro - listeners: LinkedList = new LinkedList() - datos: LinkedList = new LinkedList() + addLibros(LinkedList) : void - listeners: LinkedList = new LinkedList() + addTableModelListener(TableModelListener) : void + anhadeLibro(Libro) : void + addLibros(LinkedList) : void - avisaSuscriptores(TableModelEvent) : void + addTableModelListener(TableModelListener) : void + borraLibro(int) : void + anhadeLibro(Libro) : void + encerarAllTable() : void - avisaSuscriptores(TableModelEvent) : void + getColumnClass(int) : Class + borraLibro(int) : void + getColumnCount() : int + encerarAllTable() : void + getColumnName(int) : String + getColumnClass(int) : Class + getContenidos() : LinkedList + getColumnCount() : int + getRowCount() : int + getColumnName(int) : String + getValueAt(int, int) : Object + getContenidos() : LinkedList + isCellEditable(int, int) : boolean + getRowCount() : int + removeTableModelListener(TableModelListener) : void + getValueAt(int, int) : Object + setValueAt(Object, int, int) : void + isCellEditable(int, int) : boolean + removeTableModelListener(TableModelListener) : void + setValueAt(Object, int, int) : void

50. Ilustración: Diagrama de Clases del Paquete Sintetizador

204

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Paquete unl.sis_dialog.Negocio.Beans

pkg Beans

SyntetisadorPropiedades

java.io.Serializable ~ NombreSysnteisador: String = "" Frame_infolibro Prestamo ~ nombreVoz: String = "" Frame_consulta java.io.Serializable ~ NumberSysntetiser: int = 0 ~ id_libro_selected: int = -1 - fechaDevolucion: Date - autor: String = null Contenido ~ NumberVoz: int = 0 + opcion: String = null - fechaMaxDevolucion: Date - contenido: String = null - coompleto: boolean = false - capitulo: String + titulo: String = "(SELECION)" - fechaSalida: Date + getNombreVoz() : String - materia: String = null - id: ContenidoId + valor: String = null - id: PrestamoId + setNombreVoz(String) : void - nombre_libro: String = null - id_contenido: int = -1 «property get» - valorAutor: boolean = false - numeroPagina: int = -1 + Frame_infolibro() + getFechaDevolucion() : Date + getNombreSysnteisador() : String - valorContenido: boolean = false - subtitulo: String + getId_libro_selected() : int + getFechaMaxDevolucion() : Date + getNumberSysntetiser() : int - valorMateria: boolean = false - titulo: String + getOpcion() : String + getFechaSalida() : Date + getTitulo() : String + getId() : PrestamoId + getNumberVoz() : int - valorNombre_libro: boolean = false + Contenido() + getValor() : String + Prestamo() «property set» + Frame_consulta() + Contenido(String, String, String, int) + setId_libro_selected(int) : void + Prestamo(PrestamoId, Date, Date, Date) + setNombreSysnteisador(String) : void + getAutor() : String + getCapitulo() : String + setOpcion(String) : void + setFechaDevolucion(Date) : void + setNumberSysntetiser(int) : void + getContenido() : String + getId() : ContenidoId + setTitulo(String) : void + setFechaMaxDevolucion(Date) : void + setNumberVoz(int) : void + getMateria() : String + getId_contenido() : int + setValor(String) : void + setFechaSalida(Date) : void + getNombre_libro() : String + getNumeroPagina() : int + setId(PrestamoId) : void + isCoompleto() : boolean + getSubtitulo() : String + isValorAutor() : boolean + getTitulo() : String Recepcion_libro + isValorContenido() : boolean + setCapitulo(String) : void + isValorMateria() : boolean + setId(ContenidoId) : void ~ estado: String = null + isValorNombre_libro() : boolean + setId_contenido(int) : void ~ estado_prestamo: String + setAutor(String) : void + setNumeroPagina(int) : void ~ id_libro: int = -1 + setContenido(String) : void + setSubtitulo(String) : void ~ id_tarea: int = -1 + setCoompleto(boolean) : void + setTitulo(String) : void ~ nombre_libro: String = null Frame_prestamo ~ nombre_user: String = null + setMateria(String) : void ~ NumeroLibro: int = -1 + setNombre_libro(String) : void ~ apellido: String = null + setValorAutor(boolean) : void ~ cedula: String = null + getEstado() : String + setValorContenido(boolean) : void ~ direccion: String = null + getEstado_prestamo() : String + setValorMateria(boolean) : void ~ id_contenido: int = 0 + getId_libro() : int + setValorNombre_libro(boolean) : void TareaPendiente ~ id_libro_solicitado: int = 0 java.io.Serializable + getId_tarea() : int ~ id_user: int = 0 + getNombre_libro() : String ~ contenido_tema: String = null Libro ~ N_dias_presta: int = 0 ~ curso: String = null + getNombre_user() : String ~ nombre: String = null - autor: String + Recepcion_libro() ~ estado: String = null ~ telefono: String = null ~ fechaTarea: String = null - curso: String + setEstado(String) : void ~ tipo: String = null Frame_no_Entendido ~ id_contenido: int = 0 - editorial: String + setEstado_prestamo(String) : void ~ id_libro: int = 0 - idLibro: int + setId_libro(int) : void + IdnumeroEstado: int = -1 + Frame_prestamo() - materia: String + setId_tarea(int) : void + titulo: String = "(NO_ENTENDIDO)" ~ id_persona: int = 0 + getApellido() : String - nombreLibro: String + setNombre_libro(String) : void + valor: String = null ~ id_tarea: int = 0 + getCedula() : String - numeroPaginas: int + setNombre_user(String) : void ~ nombre_libro: String = null + getDireccion() : String - precio: double + Frame_no_Entendido() ~ nombre_user: String = null + getId_contenido() : int «property get» - qty: int + getTitulo() : String ~ numero_pagina: int = 0 + getId_libro_solicitado() : int + getNumeroLibro() : int ~ numeroTarea: int = 0 - stock: int = 0 + getValor() : String + getId_user() : int «property set» - tomo: int + setTitulo(String) : void + getNombre() : String + setNumeroLibro(int) : void - yearEdition: int = 0 + setValor(String) : void + getContenido_tema() : String + getTelefono() : String - yearTranscripcion: int = 0 + getCurso() : String + getTipo() : String «property get» + getEstado() : String + setApellido(String) : void + getIdnumeroEstado() : int + getFechaTarea() : String + getAutor() : String + setCedula(String) : void «property set» + getId_contenido() : int + getCurso() : String + setDireccion(String) : void + setIdnumeroEstado(int) : void + getEditorial() : String java.io.Serializable + getId_libro() : int + setId_contenido(int) : void + getIdLibro() : int Persona + getId_persona() : int + setId_libro_solicitado(int) : void + getId_tarea() : int + getMateria() : String + setId_user(int) : void - apellido: String + getNombre_libro() : String + getNombreLibro() : String + setNombre(String) : void - cedula: String + getNombre_user() : String + getNumeroPaginas() : int + setTelefono(String) : void - direccion: String + getNumero_pagina() : int + getPrecio() : double + setTipo(String) : void - idPersona: int + getNumeroTarea() : int + getQty() : int - nombre: String + setContenido_tema(String) : void + getStock() : int «property get» + setCurso(String) : void + getTomo() : int + getN_dias_presta() : int + getApellido() : String FrameCanonico + setEstado(String) : void + getYearEdition() : int «property set» + getCedula() : String + setFechaTarea(String) : void + getYearTranscripcion() : int + setN_dias_presta(int) : void + getDireccion() : String - atributos: Vector + setId_contenido(int) : void + Libro() + getIdPersona() : int + setId_libro(int) : void + Libro(int, String, String, String, String, int, int, int, double, String, int) + getNombre() : String + FrameCanonico() + setId_persona(int) : void + setAutor(String) : void + Persona() + getAtributos() : Vector + setId_tarea(int) : void + setCurso(String) : void + Persona(int, String, String, String, String) + insertarAtributo(String, String) : void + setNombre_libro(String) : void + setEditorial(String) : void Frame_confirmacion + setApellido(String) : void + setAtributos(Vector) : void + setNombre_user(String) : void + setIdLibro(int) : void + setCedula(String) : void + setNumero_pagina(int) : void + setMateria(String) : void + titulo: String = "(CONFIRMACION)" + setDireccion(String) : void + setNumeroTarea(int) : void + setNombreLibro(String) : void + valor: String = null + setIdPersona(int) : void + TareaPendiente() + setNumeroPaginas(int) : void + setNombre(String) : void + setPrecio(double) : void + Frame_confirmacion() + setQty(int) : void + getTitulo() : String + setStock(int) : void + getValor() : String + setTomo(int) : void + setTitulo(String) : void + setYearEdition(int) : void + setValor(String) : void + setYearTranscripcion(int) : void

51. Ilustración: Diagrama de Clases del Paquete Sintetizador

205

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Paquete unl.sis_dialog.Utils

pkg Utils

Configuracion Serializable CreaFile ~ Config_DBCorreto: boolean = false ~ ip_servidor: String = null + CreaFile(boolean, HashMap) ~ maximo_dias_prestamo: int = 30 + CreaFile(HashMap) ~ pass_db: String = null + CreaFile(String, String) ~ puerto: String = null + CreaFile(String) ~ qtyMaximoLibros: int = 0 + CreaFile(String, String, String) ~ reconocedor: String + main(String[]) : void ~ syntetisador: int = -1 ~ SystetisadorCorrect: boolean = false ~ tipoEquipo: String = null ~ tipoTarea: String = "ND" ~ user_db: String = null Ejecutable ~ voz: int = -1 + main(String[]) : void + Configuracion() + ValidarSistemaOperativo() : boolean + getIp_servidor() : String + getMaximo_dias_prestamo() : int + getPass_db() : String + getPuerto() : String ListEngineTest + getQtyMaximoLibros() : int + getReconocedor() : String + getSintetisador(int, int) : Synthesizer + getSyntetisador() : int + getSystetizadores() : Vector + getTipoEquipo() : String + main(String[]) : void + getTipoTarea() : String + getUser_db() : String + getVoz() : int + isConfig_DBCorreto() : boolean + isSystetisadorCorrect() : boolean + main(String[]) : void generarGramatica + setIp_servidor(String) : void + setMaximo_dias_prestamo(int) : void + generarGramatica(boolean) + setPass_db(String) : void + generarGramatica() + setPuerto(String) : void + generarGramaticaAutores() : void + setQtyMaximoLibros(int) : void + generarGramaticaContinidos() : void + setReconocedor(String) : void + generarGramaticaMateria() : void + setSyntetisador(int) : void + generarGramaticaNombreLibros() : void + setTipoEquipo(String) : void + GetDatosforGrammar(String, String, String) : Vector + setTipoTarea(String) : void + GetDatosforGrammar(String) : Vector + setUser_db(String) : void + main(String[]) : void + setVoz(int) : void «property set» + setConfig_DBCorreto(boolean) : void + setSystetisadorCorrect(boolean) : void

ReturnDir JFrame TestInterfaces ~ FICHERO_CONFIGURACION: String = null - propiedades: HashMap - addRemoveWordButton: javax.swing.JButton - audioPropsButton: javax.swing.JButton + gerConfiguracion(String) : HashMap - audioVolumeButton: javax.swing.JButton + gerDir(String, String) : String - micTrainingButton: javax.swing.JButton - rec: Recognizer - recoProfileButton: javax.swing.JButton - recoPropsButton: javax.swing.JButton - recProps: CGEngineProperties - speakerManager: SpeakerManager - synth: Synthesizer - synthProps: CGEngineProperties - synthPropsButton: javax.swing.JButton - userTrainingButton: javax.swing.JButton Util

- addRemoveWordButtonActionPerformed(java.awt.event.ActionEvent) : void + CrearFile(String, String) : void - audioPropsButtonActionPerformed(java.awt.event.ActionEvent) : void + getFecha_Now__time() : String - audioVolumeButtonActionPerformed(java.awt.event.ActionEvent) : void + getFecha_Siguiente_time(int, boolean) : String - exitForm(java.awt.event.WindowEvent) : void + getYearsSystem() : Vector + init() : void + openFile() : void - initComponents() : void + setAnchoColumnas(JTable, int[]) : void + main(String[]) : void + SpeakText(String) : void - micTrainingButtonActionPerformed(java.awt.event.ActionEvent) : void + Util() - recoProfileButtonActionPerformed(java.awt.event.ActionEvent) : void + ValidarCedula(String) : boolean - recoPropsButtonActionPerformed(java.awt.event.ActionEvent) : void + writeFileGrammar(String, String, boolean) : void - synthPropsButtonActionPerformed(java.awt.event.ActionEvent) : void + TestInterfaces() - userTrainingButtonActionPerformed(java.awt.event.ActionEvent) : void

52. Ilustración: Diagrama de Clases del Paquete Sintetizador 206

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.8.4. Diagrama de clases por cada caso de uso 5.8.4.1. Diagrama de clases para el caso de uso Dialogo con el sistema.

53. Ilustración: DC Dialogo con el sistema 207

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.8.4.2. Diagrama de clases para el caso de uso Comprensión del habla.

54. Ilustración: DC Comprensión del Habla 208

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.8.4.3. Diagrama de clases para el caso de uso Tareas Pendientes.

class DIAGRAM DE CLASES TAREAS PENDIENTES

Control_Dialogo:: Red_TP_automata Utils::serv idor Thread ~ estado_siguiente: int = 0 + ACCION_ADMINISTRARLIBROS: int = -1 Control_Dialogo::Administrar_TP ~red + actionlistening: ActionListeningCrearLibro = null + Red_TP_automata() + AD_LIBROS_INGRESAR: int = 0 + estado: int = 0 + Transicion_a(String, int) : int + AD_LIBROS_MODIFICAR: int = 1 + genera_respuesta: Generar_Respuesta = new Generar_Res... + BASE_DATOS: String = "sistemabiblioteca" {readOnly} ~ keyPressed: String = "" + CAPITULO_VALOR: String = "SIN CAPITULO" + keys: Vector = null + configuraciion: Configuracion = null ~ listenning: boolean = false + configuracion: Configuracion = null ~ red: Red_TP_automata = new Red_TP_auto... + DATO_NO_DEFINIFO: String = "no definido" {readOnly} ~ speak: Syntetizador = null + dominio: boolean = false ~ SQL: String = "" + EQUIPO: String = "administrador" + EQUIPO_CLIENTE: String = "Cliente" {readOnly} + accederBaseDatos() : boolean + EQUIPO_SERVIDOR: String = "Servidor" {readOnly} + Administrar_TP() Sintetizador::Syntetizador + escucha: Escucha = null + ejecutarSql() : int ~speak ~ sinAdap: SynthesizerAdapter = null + FILE_NAME_BASE_DATOS_RESTAURE: String = "DB_BRAILLE.sql" {readOnly} + getKeysPermitidas() : Vector + synth: Synthesizer = null + FILE_NAME_CONFIGURACION: String = "Configuracion" {readOnly} + getSpeak() : Syntetizador + FILE_NAME_GRAMMAR_AUTOR: String = "grammarAutores" {readOnly} + isKeyPermitida(String) : boolean + cleanupSynthesizer() : void + FILE_NAME_GRAMMAR_COMANDOS: String = "grammarComandos" {readOnly} + run() : void + main(String[]) : void + FILE_NAME_GRAMMAR_CONTENIDO: String = "grammarContenidos" {readOnly} + setSpeak(Syntetizador) : void + sayTexto(String) : void + FILE_NAME_GRAMMAR_DIRECCIONES: String = "grammarDirecciones" {readOnly} + userKeyPressed() : boolean + Syntetizador(String) + FILE_NAME_GRAMMAR_MATERIA: String = "grammarMaterias" {readOnly} +tareas_pendientes + Syntetizador() + FILE_NAME_GRAMMAR_NOMBRE_LIBRO: String = "grammarNombreL... {readOnly} + Syntetizador(Boolean) + FILE_NAME_GRAMMAR_NOMBRES: String = "grammarNombres" {readOnly} + SyntetizadorTest() : void + FILE_NAME_GRAMMAR_NUMEROS: String = "grammarNumeros" {readOnly} + frame: JFrame = null + frameconfirma: Frame_confirmacion = null +genera_respuesta + frameinfolibro: Frame_infolibro = null + frameprestamo: Frame_prestamo = null Genera_Respuesta::Generar_Respuesta + frames_out: Vector = null + frase_valida_automata: boolean = false ~ N_libro_read: int = 0 + frmeconsulta: Frame_consulta = null ~ N_tarea_read: int = 0 + gestordialogo: GestordelDialogo = null ~ plantillasDR_LIBROS: HashMap = null + GRAMMAR_ALL_CONTENIDOS: String = "grammars.allCo... {readOnly} ~ plantillasTP: HashMap = null + GRAMMAR_AUTORES: String = "grammars.autores" {readOnly} + GRAMMAR_COMANDOS: String = "grammars.comandos" {readOnly} + determinar_respuesta(String) : String + GRAMMAR_DIRECCIONES: String = "grammars.direccion" {readOnly} + Generar_Respuesta() + GRAMMAR_MATERIAS: String = "grammars.materias" {readOnly} + GetInstruccionesdeUso() : String + GRAMMAR_NOMBRE_LIBROS: String = "grammars.nombr... {readOnly} + getPlantillasRD_Libros() : HashMap + GRAMMAR_NOMBRES: String = "grammars.nombres" {readOnly} + getPlantillasTP() : HashMap + GRAMMAR_NUMEROS: String = "grammars.numeros" {readOnly} + getRespuestaDR_Libros() : String + IniciativaConsulta: boolean = true + getRespuestaTP() : String + jframe: NewJFrame = null + plantillas() : HashMap + jpanelConfiguracion: JPanel_Configuracion = null + jpanelCrearLibro: JPanel_insertLibro = null + jpanelInventario: JPanel_inventario = null + jpanelReporte: JPanel_ReportA = null + jpanelUpdateDropLibro: JPanel_Drop_update_Libro = null + jpanelUpdateLibro: JPanel_UpdateLibro = null + key_text_pressed: String = null + LIBRO_ESTADO_DADO_BAJA: String = "E" {readOnly} + LIBRO_ESTADO_DISPONIBLE: String = "D" {readOnly} KeyListener + libro_receptar: Recepcion_libro = null Control::keyListenig + Libros_receptar: Vector = null + listenig_completo: boolean = false + keyListenig() + listenig_Key: boolean = true + keyPressed(KeyEvent) : void + MAXIMO_NO_ENTENDIDO_RECONOCEDOR: int = 3 {readOnly} + keyReleased(KeyEvent) : void javax.swing.JFrame + N_DIAS_MAXIMO_PRESTAMO_LIBRO: int = 30 {readOnly} -keyListening + keyTyped(KeyEvent) : void GUI::NewJFrame + NE_QUIERO_CONSULTAR_AQUI: String = "quiero consult... {readOnly} + NE_QUIERO_LLEVAR_CASA: String = "quiero llevar ... {readOnly} - jMenu1BackupDB: JMenu + Nivel_del_dialogo: byte = 1 - jMenuAdmin: JMenu + NO_TENGO: String = "no tengo" {readOnly} - jMenuAyuda: JMenu + NumeroLibros: Vector = null - jMenuBarPrincipal: JMenuBar + pausa: boolean = false - jMenuConfiguracion: JMenu + PRESTAMO_ESTADO_LIBRO_ENTREGADO: String = "entregado" {readOnly} Control_Dialogo::v alor_estados - jMenuItemAcercaDe: JMenuItem + PRESTAMO_ESTADO_LIBRO_RECEPTADO: String = "receptado" {readOnly} - jMenuItemBackup: JMenuItem + ADMINISTRAR: int = 2 {readOnly} + PRESTAMO_TIPO_BIBLIOTECA: String = "biblioteca" {readOnly} - jMenuItemCrear: JMenuItem + CONFIRMACION: int = 3 {readOnly} + PRESTAMO_TIPO_CASA: String = "domicilio" {readOnly} - jMenuItemDelete: JMenuItem + CONSULTA: int = 1 {readOnly} + propiedadesSysntetizador: SyntetisadorPropiedades = null - jMenuItemEliminarLibro: JMenuItem + convert_values: HashMap = null + QTY_MAXIMO_LIBROS: int = 10 {readOnly} +valorEstados - jMenuItemGuia: JMenuItem + Frame_del_dialogo: HashMap = null + recepcion_libros: Administrar_RL = null - jMenuItemInventario: JMenuItem + Frames_RL: HashMap = null + recognizer: Recognizer = null - jMenuItemPresentarReportes: JMenuItem + Frames_TP: HashMap = null + resultadoLibros: Vector = null - jMenuItemPropiedaes: JMenuItem + Gramatica_for_Frame_del_dialogo: HashMap = null + semantica_generada_automata: String = null - jMenuItemRestaurarDB: JMenuItem + inicio: int = 0 {readOnly} + stado: String = null - jMenuReport: JMenu + nodos: HashMap = null + TABLA_CONTENIDO: String = "contenido" {readOnly} - jPanelPrincipal: JPanel + SALIR: int = 4 {readOnly} + TABLA_CURSO: String = "curso" {readOnly} - jSeparator1Administar: JSeparator + TABLA_LIBRO: String = "libro" {readOnly} + get_avanzarA() : HashMap - jSeparator2: JSeparator + TABLA_MATERIA: String = "materia" {readOnly} + get_convert_values() : HashMap - keyListening: keyListenig = null + TABLA_PERSONA: String = "persona" {readOnly} + get_Frame_del_dialogo() : HashMap + TABLA_PRESTAMO: String = "prestamo" {readOnly} + get_Gramatica_for_Frame_del_dialogo() : HashMap + getJMenu1BackupDB() : JMenu + TABLA_TAREAS_PENDIENTES: String = "tareas_pendientes" {readOnly} + main(String[]) : void + getJMenuAdmin() : JMenu + tareaPendiente: TareaPendiente = null +jframe + getJMenuAyuda() : JMenu «property get» + tareas_pendientes: Administrar_TP = null + getJMenuBarPrincipal() : JMenuBar + getFrames_RL() : HashMap + tareasPendientes: Vector = null + getJMenuConfiguracion() : JMenu + getFrames_TP() : HashMap + TITULO_VALOR: String = "SIN TITULO" + getJMenuItemAcercaDe() : JMenuItem + TokensRecognizer: String = null «property set» + getJMenuItemBackup() : JMenuItem + TP_ESTADO_COMPLETO: String = "COMPLETO" {readOnly} + setFrames_RL(HashMap) : void + getJMenuItemCrear() : JMenuItem + TP_ESTADO_PENDIENTE: String = "PENDIENTE" {readOnly} + setFrames_TP(HashMap) : void + getJMenuItemDelete() : JMenuItem + userAlreadyExist: boolean = false + getJMenuItemEliminarLibro() : JMenuItem + util: Util = null + getJMenuItemGuia() : JMenuItem + valorEstados: valor_estados = null + getJMenuItemInventario() : JMenuItem + VIEW_LIBROS_CONTENIDOS: String = "view_libros_co... {readOnly} + getJMenuItemPresentarReportes() : JMenuItem + VIEW_LIBROS_MATERIA_CURSO: String = "view_libros_ma... {readOnly} + getJMenuItemPropiedaes() : JMenuItem + VIEW_PRESTAMO: String = "view_prestamo" {readOnly} + getJMenuItemRestaurarDB() : JMenuItem + VIEW_REPORTE: String = "view_reporte" {readOnly} + getJMenuReport() : JMenu + VIEW_TAREAS_PENDIENTES: String = "view_tareas_pe... {readOnly} + getJPanelPrincipal() : JPanel + WORK_RECEPCION_LIBROS: String = "RL" {readOnly} + getJSeparator1Administar() : JSeparator + WORK_SISTEMA_DIALOGO: String = "SD" {readOnly} - initGUI() : void + WORK_SLEEP: String = "ND" {readOnly} DB::operacionesDB - jMenuItemRestaurarDBActionPerformed(ActionEvent) : void + WORK_TAREAS_PENDIENTES: String = "TP" {readOnly} + main(String[]) : void - accion: Statement = null + YEAR_ACTUAL: int = Integer.parseIn... {readOnly} + NewJFrame() ~ clave: int = -1 + YEAR_INICIO_SISTEMA: int = 2011 {readOnly} - thisKeyPressed(KeyEvent) : void - conexion: Connection = null + YEAR_START_COUNT: int = 1990 {readOnly} - thisWindowClosed(WindowEvent) : void ~ password: String = null ~ puerto: String = null + AvisoInformativo(String, String, int) : void - resultado: ResultSet = null + AvisoInformativo(Component, String, String, int) : void + tamaño: int = -1 + crearFile(String, Vector) : void ~ usuario: String = null + Decoder_Frame() : Object + Decoder_Frame(String) : Object + CargarClave(String) : int + Encoder_Frame(Object) : void + CargarDriver() : boolean + Encoder_Frame(Object, String) : void + ConectarBase(String) : boolean + getActionlistening() : ActionListeningCrearLibro + consultaEspecializada(String, String) : ResultSet + getConfiguraciion() : Configuracion + consultaEspecializadaCampos(String, String, String) : ResultSet + getConfiguracion() : Configuracion + ConsultaGeneral(String) : ResultSet + getEscucha() : Escucha + consultaSQLcompleto(String) : ResultSet + getFrame() : JFrame + CraerDatabase(String) : int + getFrameconfirma() : Frame_confirmacion + crearTablaHecho(String) : void + getFrameinfolibro() : Frame_infolibro + CrearTablaRegla(String) : void + getFrameprestamo() : Frame_prestamo + Desconectar() : void + getFrames_out() : Vector + EliminaRegistro(String, String) : int + getFrmeconsulta() : Frame_consulta + ElinaTabla(String) : void + getGestordialogo() : GestordelDialogo + ElinraDB(String) : void + getJframe() : NewJFrame + getPassword() : String + getJpanelConfiguracion() : JPanel_Configuracion + getPuerto() : String + getJpanelCrearLibro() : JPanel_insertLibro + getUsuario() : String + getJpanelInventario() : JPanel_inventario + ingresarAll(String, String) : int + getJpanelReporte() : JPanel_ReportA + main(String[]) : void + getJpanelUpdateDropLibro() : JPanel_Drop_update_Libro - muestraSalidaDeError(InputStream) : void + getJpanelUpdateLibro() : JPanel_UpdateLibro + operacionesDB() + getKey_text_pressed() : String + operacionesDB(String) + getLibro_receptar() : Recepcion_libro + RespaldarDB(String) : boolean + getPropiedadesSysntetizador() : SyntetisadorPropiedades + RestaurarBaseDatos(String) : boolean + getRecepcion_libros() : Administrar_RL + setPassword(String) : void + getRecognizer() : Recognizer + setPuerto(String) : void + getResultadoLibros() : Vector + setUsuario(String) : void + getSemantica_generada_automata() : String + updateEspecializado(String, String) : int + getStado() : String + getTareaPendiente() : TareaPendiente + getTareas_pendientes() : Administrar_TP + getTareasPendientes() : Vector + getUtil() : Util + getValorEstados() : valor_estados + isDominio() : boolean + isFrase_valida_automata() : boolean + isIniciativaConsulta() : boolean + isListenig_completo() : boolean + isListenig_Key() : boolean + isPausa() : boolean + isUserAlreadyExist() : boolean + rotular(String) : void + setActionlistening(ActionListeningCrearLibro) : void + setConfiguraciion(Configuracion) : void + setConfiguracion(Configuracion) : void + setDominio(boolean) : void + setEscucha(Escucha) : void + setFrame(JFrame) : void + setFrameconfirma(Frame_confirmacion) : void + setFrameinfolibro(Frame_infolibro) : void + setFrameprestamo(Frame_prestamo) : void + setFrames_out(Vector) : void + setFrase_valida_automata(boolean) : void + setFrmeconsulta(Frame_consulta) : void + setGestordialogo(GestordelDialogo) : void + setJframe(NewJFrame) : void + setJpanelConfiguracion(JPanel_Configuracion) : void + setJpanelCrearLibro(JPanel_insertLibro) : void + setJpanelInventario(JPanel_inventario) : void + setJpanelReporte(JPanel_ReportA) : void + setJpanelUpdateDropLibro(JPanel_Drop_update_Libro) : void + setJpanelUpdateLibro(JPanel_UpdateLibro) : void + setKey_text_pressed(String) : void + setLibro_receptar(Recepcion_libro) : void + setListenig_completo(boolean) : void + setListenig_Key(boolean) : void + setPausa(boolean) : void + setPropiedadesSysntetizador(SyntetisadorPropiedades) : void + setRecepcion_libros(Administrar_RL) : void + setRecognizer(Recognizer) : void + setResultadoLibros(Vector) : void + setSemantica_generada_automata(String) : void + setStado(String) : void + setTareaPendiente(TareaPendiente) : void + setTareas_pendientes(Administrar_TP) : void + setTareasPendientes(Vector) : void + setUserAlreadyExist(boolean) : void + setUtil(Util) : void + setValorEstados(valor_estados) : void «property get» + getACCION_ADMINISTRARLIBROS() : int + getLibros_receptar() : Vector + getNivel_del_dialogo() : byte + getNumeroLibros() : Vector + getTokensRecognizer() : String «property set» + setACCION_ADMINISTRARLIBROS(int) : void + setIniciativaConsulta(boolean) : void + setLibros_receptar(Vector) : void + setNivel_del_dialogo(byte) : void + setNumeroLibros(Vector) : void + setTokensRecognizer(String) : void

55. Ilustración: DC Tareas pendientes 209

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.8.4.4. Diagrama de clases para el caso de uso Recepción de Libros Braille.

class DIAGRAM DE CLASES RECEPCION DE LIBROS BRAILLE

Control_Dialogo:: Red_RD_Libros_automata

~ estado_siguiente: int = 0 Utils::serv idor Genera_Respuesta::Generar_Respuesta + Red_RD_Libros_automata() + ACCION_ADMINISTRARLIBROS: int = -1 + Transicion_a(String, int) : int ~ N_libro_read: int = 0 + actionlistening: ActionListeningCrearLibro = null ~ N_tarea_read: int = 0 + AD_LIBROS_INGRESAR: int = 0 ~red ~ plantillasDR_LIBROS: HashMap = null ~ plantillasTP: HashMap = null + AD_LIBROS_MODIFICAR: int = 1 + BASE_DATOS: String = "sistemabiblioteca" {readOnly} + CAPITULO_VALOR: String = "SIN CAPITULO" + determinar_respuesta(String) : String + configuraciion: Configuracion = null + Generar_Respuesta() + configuracion: Configuracion = null + GetInstruccionesdeUso() : String Thread + getPlantillasRD_Libros() : HashMap + DATO_NO_DEFINIFO: String = "no definido" {readOnly} +genera_respuesta + dominio: boolean = false Control_Dialogo::Administrar_RL + getPlantillasTP() : HashMap + EQUIPO: String = "administrador" + getRespuestaDR_Libros() : String + estado: int = 0 + EQUIPO_CLIENTE: String = "Cliente" {readOnly} + getRespuestaTP() : String + genera_respuesta: Generar_Respuesta = new Generar_Res... + EQUIPO_SERVIDOR: String = "Servidor" {readOnly} + plantillas() : HashMap ~ keyPressed: String = "" + escucha: Escucha = null + keys: Vector = null + FILE_NAME_BASE_DATOS_RESTAURE: String = "DB_BRAILLE.sql" {readOnly} ~ listenning: boolean = false + FILE_NAME_CONFIGURACION: String = "Configuracion" {readOnly} ~ red: Red_RD_Libros_automata = new Red_RD_Libr... + FILE_NAME_GRAMMAR_AUTOR: String = "grammarAutores" {readOnly} ~ speak: Syntetizador = null + FILE_NAME_GRAMMAR_COMANDOS: String = "grammarComandos" {readOnly} ~ SQL: String = "" + FILE_NAME_GRAMMAR_CONTENIDO: String = "grammarContenidos" {readOnly} + FILE_NAME_GRAMMAR_DIRECCIONES: String = "grammarDirecciones" {readOnly} + accederBaseDatos() : boolean + FILE_NAME_GRAMMAR_MATERIA: String = "grammarMaterias" {readOnly} + Administrar_RL() + FILE_NAME_GRAMMAR_NOMBRE_LIBRO: String = "grammarNombreL... {readOnly} + ejecutarSql() : int + FILE_NAME_GRAMMAR_NOMBRES: String = "grammarNombres" {readOnly} Sintetizador::Syntetizador + getKeysPermitidas() : Vector + FILE_NAME_GRAMMAR_NUMEROS: String = "grammarNumeros" {readOnly} + getSpeak() : Syntetizador + frame: JFrame = null ~speak ~ sinAdap: SynthesizerAdapter = null + isKeyPermitida(String) : boolean + frameconfirma: Frame_confirmacion = null + synth: Synthesizer = null + run() : void + frameinfolibro: Frame_infolibro = null + setSpeak(Syntetizador) : void + frameprestamo: Frame_prestamo = null + cleanupSynthesizer() : void + userKeyPressed() : boolean + frames_out: Vector = null + main(String[]) : void + sayTexto(String) : void + frase_valida_automata: boolean = false +recepcion_libros + frmeconsulta: Frame_consulta = null + Syntetizador(String) + gestordialogo: GestordelDialogo = null + Syntetizador() + GRAMMAR_ALL_CONTENIDOS: String = "grammars.allCo... {readOnly} + Syntetizador(Boolean) + GRAMMAR_AUTORES: String = "grammars.autores" {readOnly} + SyntetizadorTest() : void + GRAMMAR_COMANDOS: String = "grammars.comandos" {readOnly} + GRAMMAR_DIRECCIONES: String = "grammars.direccion" {readOnly} + GRAMMAR_MATERIAS: String = "grammars.materias" {readOnly} + GRAMMAR_NOMBRE_LIBROS: String = "grammars.nombr... {readOnly} + GRAMMAR_NOMBRES: String = "grammars.nombres" {readOnly} + GRAMMAR_NUMEROS: String = "grammars.numeros" {readOnly} + IniciativaConsulta: boolean = true + jframe: NewJFrame = null + jpanelConfiguracion: JPanel_Configuracion = null + jpanelCrearLibro: JPanel_insertLibro = null KeyListener + jpanelInventario: JPanel_inventario = null + jpanelReporte: JPanel_ReportA = null Control::keyListenig + jpanelUpdateDropLibro: JPanel_Drop_update_Libro = null + jpanelUpdateLibro: JPanel_UpdateLibro = null + keyListenig() + key_text_pressed: String = null + keyPressed(KeyEvent) : void + LIBRO_ESTADO_DADO_BAJA: String = "E" {readOnly} + keyReleased(KeyEvent) : void + LIBRO_ESTADO_DISPONIBLE: String = "D" {readOnly} + keyTyped(KeyEvent) : void + libro_receptar: Recepcion_libro = null -keyListening DB::operacionesDB + Libros_receptar: Vector = null + listenig_completo: boolean = false - accion: Statement = null + listenig_Key: boolean = true ~ clave: int = -1 + MAXIMO_NO_ENTENDIDO_RECONOCEDOR: int = 3 {readOnly} - conexion: Connection = null + N_DIAS_MAXIMO_PRESTAMO_LIBRO: int = 30 {readOnly} ~ password: String = null javax.swing.JFrame + NE_QUIERO_CONSULTAR_AQUI: String = "quiero consult... {readOnly} ~ puerto: String = null + NE_QUIERO_LLEVAR_CASA: String = "quiero llevar ... {readOnly} GUI::NewJFrame - resultado: ResultSet = null + Nivel_del_dialogo: byte = 1 + tamaño: int = -1 - jMenu1BackupDB: JMenu + NO_TENGO: String = "no tengo" {readOnly} ~ usuario: String = null + NumeroLibros: Vector = null - jMenuAdmin: JMenu - jMenuAyuda: JMenu + pausa: boolean = false + CargarClave(String) : int - jMenuBarPrincipal: JMenuBar + PRESTAMO_ESTADO_LIBRO_ENTREGADO: String = "entregado" {readOnly} + CargarDriver() : boolean - jMenuConfiguracion: JMenu + PRESTAMO_ESTADO_LIBRO_RECEPTADO: String = "receptado" {readOnly} + ConectarBase(String) : boolean - jMenuItemAcercaDe: JMenuItem + PRESTAMO_TIPO_BIBLIOTECA: String = "biblioteca" {readOnly} + consultaEspecializada(String, String) : ResultSet - jMenuItemBackup: JMenuItem + PRESTAMO_TIPO_CASA: String = "domicilio" {readOnly} + consultaEspecializadaCampos(String, String, String) : ResultSet - jMenuItemCrear: JMenuItem + propiedadesSysntetizador: SyntetisadorPropiedades = null + ConsultaGeneral(String) : ResultSet - jMenuItemDelete: JMenuItem + QTY_MAXIMO_LIBROS: int = 10 {readOnly} + consultaSQLcompleto(String) : ResultSet - jMenuItemEliminarLibro: JMenuItem + recepcion_libros: Administrar_RL = null + CraerDatabase(String) : int - jMenuItemGuia: JMenuItem + recognizer: Recognizer = null + crearTablaHecho(String) : void - jMenuItemInventario: JMenuItem + resultadoLibros: Vector = null + CrearTablaRegla(String) : void - jMenuItemPresentarReportes: JMenuItem + semantica_generada_automata: String = null + Desconectar() : void - jMenuItemPropiedaes: JMenuItem + stado: String = null + EliminaRegistro(String, String) : int - jMenuItemRestaurarDB: JMenuItem + TABLA_CONTENIDO: String = "contenido" {readOnly} + ElinaTabla(String) : void - jMenuReport: JMenu + TABLA_CURSO: String = "curso" {readOnly} + ElinraDB(String) : void - jPanelPrincipal: JPanel + TABLA_LIBRO: String = "libro" {readOnly} + getPassword() : String - jSeparator1Administar: JSeparator + TABLA_MATERIA: String = "materia" {readOnly} + getPuerto() : String - jSeparator2: JSeparator + TABLA_PERSONA: String = "persona" {readOnly} + getUsuario() : String - keyListening: keyListenig = null + TABLA_PRESTAMO: String = "prestamo" {readOnly} + ingresarAll(String, String) : int + TABLA_TAREAS_PENDIENTES: String = "tareas_pendientes" {readOnly} + main(String[]) : void + getJMenu1BackupDB() : JMenu + tareaPendiente: TareaPendiente = null - muestraSalidaDeError(InputStream) : void + getJMenuAdmin() : JMenu + tareas_pendientes: Administrar_TP = null + operacionesDB() + getJMenuAyuda() : JMenu + tareasPendientes: Vector = null + operacionesDB(String) + getJMenuBarPrincipal() : JMenuBar + TITULO_VALOR: String = "SIN TITULO" + RespaldarDB(String) : boolean + getJMenuConfiguracion() : JMenu + TokensRecognizer: String = null +jframe + RestaurarBaseDatos(String) : boolean + getJMenuItemAcercaDe() : JMenuItem + TP_ESTADO_COMPLETO: String = "COMPLETO" {readOnly} + setPassword(String) : void + getJMenuItemBackup() : JMenuItem + TP_ESTADO_PENDIENTE: String = "PENDIENTE" {readOnly} + setPuerto(String) : void + getJMenuItemCrear() : JMenuItem + userAlreadyExist: boolean = false + setUsuario(String) : void + getJMenuItemDelete() : JMenuItem + util: Util = null + updateEspecializado(String, String) : int + valorEstados: valor_estados = null + getJMenuItemEliminarLibro() : JMenuItem + VIEW_LIBROS_CONTENIDOS: String = "view_libros_co... {readOnly} + getJMenuItemGuia() : JMenuItem + VIEW_LIBROS_MATERIA_CURSO: String = "view_libros_ma... {readOnly} + getJMenuItemInventario() : JMenuItem + VIEW_PRESTAMO: String = "view_prestamo" {readOnly} + getJMenuItemPresentarReportes() : JMenuItem + VIEW_REPORTE: String = "view_reporte" {readOnly} + getJMenuItemPropiedaes() : JMenuItem + VIEW_TAREAS_PENDIENTES: String = "view_tareas_pe... {readOnly} + getJMenuItemRestaurarDB() : JMenuItem + WORK_RECEPCION_LIBROS: String = "RL" {readOnly} + getJMenuReport() : JMenu + WORK_SISTEMA_DIALOGO: String = "SD" {readOnly} + getJPanelPrincipal() : JPanel + WORK_SLEEP: String = "ND" {readOnly} + getJSeparator1Administar() : JSeparator + WORK_TAREAS_PENDIENTES: String = "TP" {readOnly} - initGUI() : void + YEAR_ACTUAL: int = Integer.parseIn... {readOnly} - jMenuItemRestaurarDBActionPerformed(ActionEvent) : void + YEAR_INICIO_SISTEMA: int = 2011 {readOnly} + main(String[]) : void + YEAR_START_COUNT: int = 1990 {readOnly} + NewJFrame() - thisKeyPressed(KeyEvent) : void + AvisoInformativo(String, String, int) : void - thisWindowClosed(WindowEvent) : void + AvisoInformativo(Component, String, String, int) : void + crearFile(String, Vector) : void + Decoder_Frame() : Object + Decoder_Frame(String) : Object + Encoder_Frame(Object) : void + Encoder_Frame(Object, String) : void + getActionlistening() : ActionListeningCrearLibro + getConfiguraciion() : Configuracion + getConfiguracion() : Configuracion + getEscucha() : Escucha + getFrame() : JFrame + getFrameconfirma() : Frame_confirmacion + getFrameinfolibro() : Frame_infolibro +valorEstados Control_Dialogo::v alor_estados + getFrameprestamo() : Frame_prestamo + getFrames_out() : Vector + ADMINISTRAR: int = 2 {readOnly} + getFrmeconsulta() : Frame_consulta + CONFIRMACION: int = 3 {readOnly} + getGestordialogo() : GestordelDialogo + CONSULTA: int = 1 {readOnly} + getJframe() : NewJFrame + convert_values: HashMap = null + getJpanelConfiguracion() : JPanel_Configuracion + Frame_del_dialogo: HashMap = null + getJpanelCrearLibro() : JPanel_insertLibro + Frames_RL: HashMap = null + getJpanelInventario() : JPanel_inventario + Frames_TP: HashMap = null + getJpanelReporte() : JPanel_ReportA + Gramatica_for_Frame_del_dialogo: HashMap = null + getJpanelUpdateDropLibro() : JPanel_Drop_update_Libro + inicio: int = 0 {readOnly} + getJpanelUpdateLibro() : JPanel_UpdateLibro + nodos: HashMap = null + getKey_text_pressed() : String + SALIR: int = 4 {readOnly} + getLibro_receptar() : Recepcion_libro + getPropiedadesSysntetizador() : SyntetisadorPropiedades + get_avanzarA() : HashMap + getRecepcion_libros() : Administrar_RL + get_convert_values() : HashMap + getRecognizer() : Recognizer + get_Frame_del_dialogo() : HashMap + getResultadoLibros() : Vector + get_Gramatica_for_Frame_del_dialogo() : HashMap + getSemantica_generada_automata() : String + main(String[]) : void + getStado() : String «property get» + getTareaPendiente() : TareaPendiente + getFrames_RL() : HashMap + getTareas_pendientes() : Administrar_TP + getFrames_TP() : HashMap + getTareasPendientes() : Vector «property set» + getUtil() : Util + setFrames_RL(HashMap) : void + getValorEstados() : valor_estados + setFrames_TP(HashMap) : void + isDominio() : boolean + isFrase_valida_automata() : boolean + isIniciativaConsulta() : boolean + isListenig_completo() : boolean + isListenig_Key() : boolean + isPausa() : boolean + isUserAlreadyExist() : boolean + rotular(String) : void + setActionlistening(ActionListeningCrearLibro) : void + setConfiguraciion(Configuracion) : void + setConfiguracion(Configuracion) : void + setDominio(boolean) : void + setEscucha(Escucha) : void + setFrame(JFrame) : void + setFrameconfirma(Frame_confirmacion) : void + setFrameinfolibro(Frame_infolibro) : void + setFrameprestamo(Frame_prestamo) : void + setFrames_out(Vector) : void + setFrase_valida_automata(boolean) : void + setFrmeconsulta(Frame_consulta) : void + setGestordialogo(GestordelDialogo) : void + setJframe(NewJFrame) : void + setJpanelConfiguracion(JPanel_Configuracion) : void + setJpanelCrearLibro(JPanel_insertLibro) : void + setJpanelInventario(JPanel_inventario) : void + setJpanelReporte(JPanel_ReportA) : void + setJpanelUpdateDropLibro(JPanel_Drop_update_Libro) : void + setJpanelUpdateLibro(JPanel_UpdateLibro) : void + setKey_text_pressed(String) : void + setLibro_receptar(Recepcion_libro) : void + setListenig_completo(boolean) : void + setListenig_Key(boolean) : void + setPausa(boolean) : void + setPropiedadesSysntetizador(SyntetisadorPropiedades) : void + setRecepcion_libros(Administrar_RL) : void + setRecognizer(Recognizer) : void + setResultadoLibros(Vector) : void + setSemantica_generada_automata(String) : void + setStado(String) : void + setTareaPendiente(TareaPendiente) : void + setTareas_pendientes(Administrar_TP) : void + setTareasPendientes(Vector) : void + setUserAlreadyExist(boolean) : void + setUtil(Util) : void + setValorEstados(valor_estados) : void «property get» + getACCION_ADMINISTRARLIBROS() : int + getLibros_receptar() : Vector + getNivel_del_dialogo() : byte + getNumeroLibros() : Vector + getTokensRecognizer() : String «property set» + setACCION_ADMINISTRARLIBROS(int) : void + setIniciativaConsulta(boolean) : void + setLibros_receptar(Vector) : void + setNivel_del_dialogo(byte) : void + setNumeroLibros(Vector) : void + setTokensRecognizer(String) : void

56. Ilustración: DC Recepción de libros Braille 210

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.8.4.5. Diagrama de clases para el caso de uso Ingresar Libro Braille.

class DIAGRAM DE CLASES INGRESAR LIBRO BRAILLE

JFormattedTextField java.io.Serializable Utils::generarGramatica GUI::jFormatTextField Beans::Libro DB::operacionesDB + generarGramatica(boolean) + LEERDOUBLE: int = 2 {readOnly} - autor: String + generarGramatica() - accion: Statement = null + LEERENTERO: int = 1 {readOnly} - curso: String + generarGramaticaAutores() : void ~ clave: int = -1 + LERRCADENA: int = 3 {readOnly} - editorial: String + generarGramaticaContinidos() : void - conexion: Connection = null - longitud: int - idLibro: int + generarGramaticaMateria() : void ~ password: String = null - tipolectura: int - materia: String + generarGramaticaNombreLibros() : void ~ puerto: String = null - nombreLibro: String + GetDatosforGrammar(String, String, String) : Vector - resultado: ResultSet = null + jFormatTextField(int, int) - numeroPaginas: int + GetDatosforGrammar(String) : Vector + tamaño: int = -1 - precio: double + main(String[]) : void ~ usuario: String = null - qty: int - stock: int = 0 + CargarClave(String) : int - tomo: int + CargarDriver() : boolean - yearEdition: int = 0 + ConectarBase(String) : boolean Utils::serv idor - yearTranscripcion: int = 0 + consultaEspecializada(String, String) : ResultSet + consultaEspecializadaCampos(String, String, String) : ResultSet + ACCION_ADMINISTRARLIBROS: int = -1 + getAutor() : String + ConsultaGeneral(String) : ResultSet + actionlistening: ActionListeningCrearLibro = null + getCurso() : String + consultaSQLcompleto(String) : ResultSet + AD_LIBROS_INGRESAR: int = 0 + getEditorial() : String + CraerDatabase(String) : int + AD_LIBROS_MODIFICAR: int = 1 + getIdLibro() : int + crearTablaHecho(String) : void + BASE_DATOS: String = "sistemabiblioteca" {readOnly} + getMateria() : String + CrearTablaRegla(String) : void + CAPITULO_VALOR: String = "SIN CAPITULO" + getNombreLibro() : String + Desconectar() : void + configuraciion: Configuracion = null + getNumeroPaginas() : int + EliminaRegistro(String, String) : int + configuracion: Configuracion = null + getPrecio() : double + ElinaTabla(String) : void + DATO_NO_DEFINIFO: String = "no definido" {readOnly} + getQty() : int + ElinraDB(String) : void + dominio: boolean = false + getStock() : int + getPassword() : String + EQUIPO: String = "administrador" + getTomo() : int + getPuerto() : String + EQUIPO_CLIENTE: String = "Cliente" {readOnly} -opd + getYearEdition() : int + getUsuario() : String + EQUIPO_SERVIDOR: String = "Servidor" {readOnly} + getYearTranscripcion() : int + ingresarAll(String, String) : int + escucha: Escucha = null + Libro() + main(String[]) : void + FILE_NAME_BASE_DATOS_RESTAURE: String = "DB_BRAILLE.sql" {readOnly} + Libro(int, String, String, String, String, int, int, int, double, String, int) - muestraSalidaDeError(InputStream) : void + FILE_NAME_CONFIGURACION: String = "Configuracion" {readOnly} + setAutor(String) : void + operacionesDB() + FILE_NAME_GRAMMAR_AUTOR: String = "grammarAutores" {readOnly} + setCurso(String) : void + operacionesDB(String) + FILE_NAME_GRAMMAR_COMANDOS: String = "grammarComandos" {readOnly} + setEditorial(String) : void + RespaldarDB(String) : boolean + FILE_NAME_GRAMMAR_CONTENIDO: String = "grammarContenidos" {readOnly} + setIdLibro(int) : void + RestaurarBaseDatos(String) : boolean + FILE_NAME_GRAMMAR_DIRECCIONES: String = "grammarDirecciones" {readOnly} + setMateria(String) : void + setPassword(String) : void + FILE_NAME_GRAMMAR_MATERIA: String = "grammarMaterias" {readOnly} + setNombreLibro(String) : void + setPuerto(String) : void + FILE_NAME_GRAMMAR_NOMBRE_LIBRO: String = "grammarNombreL... {readOnly} + setNumeroPaginas(int) : void + setUsuario(String) : void + FILE_NAME_GRAMMAR_NOMBRES: String = "grammarNombres" {readOnly} + setPrecio(double) : void + updateEspecializado(String, String) : int + FILE_NAME_GRAMMAR_NUMEROS: String = "grammarNumeros" {readOnly} + setQty(int) : void + frame: JFrame = null ~opd + setStock(int) : void + frameconfirma: Frame_confirmacion = null + setTomo(int) : void + frameinfolibro: Frame_infolibro = null + setYearEdition(int) : void + frameprestamo: Frame_prestamo = null + setYearTranscripcion(int) : void + frames_out: Vector = null + frase_valida_automata: boolean = false + frmeconsulta: Frame_consulta = null JComboBox + gestordialogo: GestordelDialogo = null GUI::ComboxPersonalizado + GRAMMAR_ALL_CONTENIDOS: String = "grammars.allCo... {readOnly} ActionListener + GRAMMAR_AUTORES: String = "grammars.autores" {readOnly} ~ opd: operacionesDB = null Control::ActionListeningCrearLibro + GRAMMAR_COMANDOS: String = "grammars.comandos" {readOnly} ~ tabla: String = null + GRAMMAR_DIRECCIONES: String = "grammars.direccion" {readOnly} + componentsMessages: HashMap = null + GRAMMAR_MATERIAS: String = "grammars.materias" {readOnly} + ComboxPersonalizado(String) - id_libro: int = -1 + GRAMMAR_NOMBRE_LIBROS: String = "grammars.nombr... {readOnly} + UpdateComponent() : void - opd: operacionesDB = null + GRAMMAR_NOMBRES: String = "grammars.nombres" {readOnly} -jComboBoxMateria-jComboBoxCUrsos - result: ResultSet = null + GRAMMAR_NUMEROS: String = "grammars.numeros" {readOnly} - SQL: String = "" + IniciativaConsulta: boolean = true + jframe: NewJFrame = null javax.swing.JPanel + actionPerformed(ActionEvent) : void + jpanelConfiguracion: JPanel_Configuracion = null GUI::JPanel_insertLibro + encerarBox(Vector) : void + jpanelCrearLibro: JPanel_insertLibro = null + encerarComponentes(Vector) : void + jpanelInventario: JPanel_inventario = null + control: ControlTablaLibro = new ControlTabl... + getComponentMessages() : HashMap + jpanelReporte: JPanel_ReportA = null - jButtonAddRegistro: JButton + validarCombobox(Vector) : boolean + jpanelUpdateDropLibro: JPanel_Drop_update_Libro = null - jButtonCancelar: JButton + verSihayDatos(Vector) : boolean + jpanelUpdateLibro: JPanel_UpdateLibro = null - jButtonCancelarCurso: JButton + key_text_pressed: String = null - jButtonCaneclarMateria: JButton +actionlistening + LIBRO_ESTADO_DADO_BAJA: String = "E" {readOnly} - jButtonnewCurso: JButton + LIBRO_ESTADO_DISPONIBLE: String = "D" {readOnly} - jButtonnewMateria: JButton Utilidades::ControlTablaLibro + libro_receptar: Recepcion_libro = null - jButtonSave: JButton + Libros_receptar: Vector = null - modelo: ModeloTablaLibro = null - jComboBoxCUrsos: ComboxPersonalizado + listenig_completo: boolean = false - numero: int = 0 - jComboBoxMateria: ComboxPersonalizado + listenig_Key: boolean = true - jComboBoxPais: JComboBox + MAXIMO_NO_ENTENDIDO_RECONOCEDOR: int = 3 {readOnly} + addContenidos(LinkedList) : void - jComboBoxQty: JComboBox + N_DIAS_MAXIMO_PRESTAMO_LIBRO: int = 30 {readOnly} + anhadeFila() : void - jComboBoxStock: JComboBox + NE_QUIERO_CONSULTAR_AQUI: String = "quiero consult... {readOnly} + anhadeFila(Contenido) : void - jComboBoxYearPublication: JComboBox + NE_QUIERO_LLEVAR_CASA: String = "quiero llevar ... {readOnly} + borraFila() : void - jComboBoxYearTranscription: JComboBox + Nivel_del_dialogo: byte = 1 + ControlTablaLibro(ModeloTablaLibro) - jLabel1: JLabel + NO_TENGO: String = "no tengo" {readOnly} - jLabel10: JLabel +control + NumeroLibros: Vector = null - jLabel11: JLabel + pausa: boolean = false - jLabel12: JLabel + PRESTAMO_ESTADO_LIBRO_ENTREGADO: String = "entregado" {readOnly} - jLabel13: JLabel java.io.Serializable + PRESTAMO_ESTADO_LIBRO_RECEPTADO: String = "receptado" {readOnly} - jLabel14: JLabel Beans::Contenido + PRESTAMO_TIPO_BIBLIOTECA: String = "biblioteca" {readOnly} - jLabel15: JLabel + PRESTAMO_TIPO_CASA: String = "domicilio" {readOnly} - jLabel16: JLabel - capitulo: String + propiedadesSysntetizador: SyntetisadorPropiedades = null - jLabel17: JLabel - id: ContenidoId + QTY_MAXIMO_LIBROS: int = 10 {readOnly} - jLabel18: JLabel - id_contenido: int = -1 + recepcion_libros: Administrar_RL = null - jLabel19: JLabel - numeroPagina: int = -1 + recognizer: Recognizer = null - jLabel2: JLabel - subtitulo: String + resultadoLibros: Vector = null - jLabel3: JLabel - titulo: String + semantica_generada_automata: String = null - jLabel4: JLabel + stado: String = null - jLabel5: JLabel + Contenido() + TABLA_CONTENIDO: String = "contenido" {readOnly} - jLabel6: JLabel + Contenido(String, String, String, int) + TABLA_CURSO: String = "curso" {readOnly} - jLabel7: JLabel + getCapitulo() : String + TABLA_LIBRO: String = "libro" {readOnly} - jLabel8: JLabel + getId() : ContenidoId + TABLA_MATERIA: String = "materia" {readOnly} - jLabel9: JLabel + getId_contenido() : int + TABLA_PERSONA: String = "persona" {readOnly} - jPanelCenter: JPanel + getNumeroPagina() : int + TABLA_PRESTAMO: String = "prestamo" {readOnly} - jPanelCenterContenido: JPanel + getSubtitulo() : String + TABLA_TAREAS_PENDIENTES: String = "tareas_pendientes" {readOnly} - jPanelContenidos: JPanel + getTitulo() : String + tareaPendiente: TareaPendiente = null - jPanelcontieneCurso: JPanel + setCapitulo(String) : void + tareas_pendientes: Administrar_TP = null -modelo - jPanelcontieneMateria: JPanel + setId(ContenidoId) : void + tareasPendientes: Vector = null - jPanelNorte: JPanel + setId_contenido(int) : void TableModel + TITULO_VALOR: String = "SIN TITULO" - jPanelSouth: JPanel + setNumeroPagina(int) : void + TokensRecognizer: String = null Utilidades::ModeloTablaLibro - jScrollPaneTabla: JScrollPane + setSubtitulo(String) : void + TP_ESTADO_COMPLETO: String = "COMPLETO" {readOnly} - jTableContenido: JTable + setTitulo(String) : void - datos: LinkedList = new LinkedList() + TP_ESTADO_PENDIENTE: String = "PENDIENTE" {readOnly} - jTextFieldAutor: JTextField - listeners: LinkedList = new LinkedList() + userAlreadyExist: boolean = false - jTextFieldCapitulo: JTextField + util: Util = null - jTextFieldEditorial: JTextField + addContenidos(LinkedList) : void + valorEstados: valor_estados = null - jTextFieldNewCurso: JTextField + addTableModelListener(TableModelListener) : void + VIEW_LIBROS_CONTENIDOS: String = "view_libros_co... {readOnly} - jTextFieldNewMateria: JTextField + anhadePersona(Contenido) : void + VIEW_LIBROS_MATERIA_CURSO: String = "view_libros_ma... {readOnly} +modelo - jTextFieldNumeroPagina: JTextField - avisaSuscriptores(TableModelEvent) : void +jpanelCrearLibro + VIEW_PRESTAMO: String = "view_prestamo" {readOnly} - jTextFieldNumeroPaginas: JTextField + borraPersona(int) : void + VIEW_REPORTE: String = "view_reporte" {readOnly} - jTextFieldPrecio: JTextField + encerarAllTable() : void + VIEW_TAREAS_PENDIENTES: String = "view_tareas_pe... {readOnly} - jTextFieldSubtitulo: JTextField + getColumnClass(int) : Class + WORK_RECEPCION_LIBROS: String = "RL" {readOnly} - jTextFieldTitulo: JTextField + getColumnCount() : int + WORK_SISTEMA_DIALOGO: String = "SD" {readOnly} - jTextFieldTituloLibro: JTextField + getColumnName(int) : String + WORK_SLEEP: String = "ND" {readOnly} - jTextFieldTomo: JTextField + getContenidos() : LinkedList + WORK_TAREAS_PENDIENTES: String = "TP" {readOnly} + modelo: ModeloTablaLibro = new ModeloTabla... + getRowCount() : int + YEAR_ACTUAL: int = Integer.parseIn... {readOnly} + getValueAt(int, int) : Object + YEAR_INICIO_SISTEMA: int = 2011 {readOnly} + getJButtonAddRegistro() : JButton + isCellEditable(int, int) : boolean + YEAR_START_COUNT: int = 1990 {readOnly} + removeTableModelListener(TableModelListener) : void + getJButtonCancelar() : JButton + getJButtonCancelarCurso() : JButton + setValueAt(Object, int, int) : void + AvisoInformativo(String, String, int) : void + getJButtonCaneclarMateria() : JButton + AvisoInformativo(Component, String, String, int) : void + getJButtonnewCurso() : JButton + crearFile(String, Vector) : void + getJButtonnewMateria() : JButton + Decoder_Frame() : Object + getJButtonSave() : JButton + Decoder_Frame(String) : Object + getJComboBoxCUrsos() : ComboxPersonalizado + Encoder_Frame(Object) : void + getJComboBoxMateria() : ComboxPersonalizado + Encoder_Frame(Object, String) : void + getJComboBoxPais() : JComboBox + getActionlistening() : ActionListeningCrearLibro + getJComboBoxQty() : JComboBox + getConfiguraciion() : Configuracion + getJComboBoxStock() : JComboBox + getConfiguracion() : Configuracion + getJComboBoxYearPublication() : JComboBox + getEscucha() : Escucha + getJComboBoxYearTranscription() : JComboBox + getFrame() : JFrame + getJLabel19() : JLabel + getFrameconfirma() : Frame_confirmacion + getJPanelCenterContenido() : JPanel + getFrameinfolibro() : Frame_infolibro + getJPanelcontieneCurso() : JPanel + getFrameprestamo() : Frame_prestamo + getJPanelNorte() : JPanel + getFrames_out() : Vector + getJPanelSouth() : JPanel + getFrmeconsulta() : Frame_consulta + getJTableContenido() : JTable + getGestordialogo() : GestordelDialogo + getJTextFieldAutor() : JTextField + getJframe() : NewJFrame + getJTextFieldCapitulo() : JTextField + getJpanelConfiguracion() : JPanel_Configuracion javax.swing.JFrame + getJTextFieldEditorial() : JTextField + getJpanelCrearLibro() : JPanel_insertLibro GUI::NewJFrame + getJTextFieldNewCurso() : JTextField + getJpanelInventario() : JPanel_inventario + getJTextFieldNewMateria() : JTextField + getJpanelReporte() : JPanel_ReportA - jMenu1BackupDB: JMenu + getJTextFieldNumeroPagina() : JTextField + getJpanelUpdateDropLibro() : JPanel_Drop_update_Libro - jMenuAdmin: JMenu + getJTextFieldNumeroPaginas() : JTextField + getJpanelUpdateLibro() : JPanel_UpdateLibro - jMenuAyuda: JMenu + getJTextFieldPrecio() : JTextField + getKey_text_pressed() : String - jMenuBarPrincipal: JMenuBar + getJTextFieldSubtitulo() : JTextField + getLibro_receptar() : Recepcion_libro - jMenuConfiguracion: JMenu + getJTextFieldTitulo() : JTextField + getPropiedadesSysntetizador() : SyntetisadorPropiedades - jMenuItemAcercaDe: JMenuItem + getJTextFieldTituloLibro() : JTextField + getRecepcion_libros() : Administrar_RL - jMenuItemBackup: JMenuItem + getJTextFieldTomo() : JTextField + getRecognizer() : Recognizer - jMenuItemCrear: JMenuItem + getQtyMaximo() : Vector + getResultadoLibros() : Vector - jMenuItemDelete: JMenuItem + Getyears() : Vector + getSemantica_generada_automata() : String - jMenuItemEliminarLibro: JMenuItem - initGUI() : void + getStado() : String - jMenuItemGuia: JMenuItem + JPanel_insertLibro() + getTareaPendiente() : TareaPendiente - jMenuItemInventario: JMenuItem + main(String[]) : void + getTareas_pendientes() : Administrar_TP - jMenuItemPresentarReportes: JMenuItem + setJButtonAddRegistro(JButton) : void + getTareasPendientes() : Vector - jMenuItemPropiedaes: JMenuItem +jframe + setJTextFieldCapitulo(JTextField) : void + getUtil() : Util - jMenuItemRestaurarDB: JMenuItem + setJTextFieldNewCurso(JTextField) : void + getValorEstados() : valor_estados - jMenuReport: JMenu + setJTextFieldNewMateria(JTextField) : void + isDominio() : boolean - jPanelPrincipal: JPanel + setJTextFieldNumeroPagina(JTextField) : void + isFrase_valida_automata() : boolean - jSeparator1Administar: JSeparator + setJTextFieldSubtitulo(JTextField) : void + isIniciativaConsulta() : boolean - jSeparator2: JSeparator + setJTextFieldTitulo(JTextField) : void - keyListening: keyListenig = null + isListenig_completo() : boolean + isListenig_Key() : boolean + getJMenu1BackupDB() : JMenu + isPausa() : boolean + getJMenuAdmin() : JMenu + isUserAlreadyExist() : boolean + getJMenuAyuda() : JMenu + rotular(String) : void + getJMenuBarPrincipal() : JMenuBar + setActionlistening(ActionListeningCrearLibro) : void + getJMenuConfiguracion() : JMenu + setConfiguraciion(Configuracion) : void + getJMenuItemAcercaDe() : JMenuItem + setConfiguracion(Configuracion) : void + getJMenuItemBackup() : JMenuItem + setDominio(boolean) : void + getJMenuItemCrear() : JMenuItem + setEscucha(Escucha) : void + getJMenuItemDelete() : JMenuItem + setFrame(JFrame) : void + getJMenuItemEliminarLibro() : JMenuItem + setFrameconfirma(Frame_confirmacion) : void + getJMenuItemGuia() : JMenuItem +util + setFrameinfolibro(Frame_infolibro) : void + getJMenuItemInventario() : JMenuItem + setFrameprestamo(Frame_prestamo) : void + getJMenuItemPresentarReportes() : JMenuItem Utils::Util + setFrames_out(Vector) : void + getJMenuItemPropiedaes() : JMenuItem + setFrase_valida_automata(boolean) : void + getJMenuItemRestaurarDB() : JMenuItem + CrearFile(String, String) : void + setFrmeconsulta(Frame_consulta) : void + getJMenuReport() : JMenu + getFecha_Now__time() : String + setGestordialogo(GestordelDialogo) : void + getJPanelPrincipal() : JPanel + getFecha_Siguiente_time(int, boolean) : String + setJframe(NewJFrame) : void + getJSeparator1Administar() : JSeparator + getYearsSystem() : Vector + setJpanelConfiguracion(JPanel_Configuracion) : void - initGUI() : void + openFile() : void + setJpanelCrearLibro(JPanel_insertLibro) : void - jMenuItemRestaurarDBActionPerformed(ActionEvent) : void + setAnchoColumnas(JTable, int[]) : void + setJpanelInventario(JPanel_inventario) : void + main(String[]) : void + SpeakText(String) : void + setJpanelReporte(JPanel_ReportA) : void + NewJFrame() + Util() + setJpanelUpdateDropLibro(JPanel_Drop_update_Libro) : void - thisKeyPressed(KeyEvent) : void + ValidarCedula(String) : boolean + setJpanelUpdateLibro(JPanel_UpdateLibro) : void - thisWindowClosed(WindowEvent) : void + writeFileGrammar(String, String, boolean) : void + setKey_text_pressed(String) : void + setLibro_receptar(Recepcion_libro) : void + setListenig_completo(boolean) : void + setListenig_Key(boolean) : void + setPausa(boolean) : void + setPropiedadesSysntetizador(SyntetisadorPropiedades) : void + setRecepcion_libros(Administrar_RL) : void + setRecognizer(Recognizer) : void + setResultadoLibros(Vector) : void + setSemantica_generada_automata(String) : void + setStado(String) : void + setTareaPendiente(TareaPendiente) : void + setTareas_pendientes(Administrar_TP) : void + setTareasPendientes(Vector) : void + setUserAlreadyExist(boolean) : void + setUtil(Util) : void + setValorEstados(valor_estados) : void «property get» + getACCION_ADMINISTRARLIBROS() : int + getLibros_receptar() : Vector + getNivel_del_dialogo() : byte + getNumeroLibros() : Vector + getTokensRecognizer() : String «property set» + setACCION_ADMINISTRARLIBROS(int) : void + setIniciativaConsulta(boolean) : void + setLibros_receptar(Vector) : void + setNivel_del_dialogo(byte) : void + setNumeroLibros(Vector) : void + setTokensRecognizer(String) : void

57. Ilustración: DC Ingresar Libro Braille 211

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.8.4.6. Diagrama de clases para el caso de uso Modoficar Libro Braille.

class DIAGRAM DE CLASES INGRESAR LIBRO BRAILLE

JFormattedTextField java.io.Serializable Utils::generarGramatica GUI::jFormatTextField Beans::Libro DB::operacionesDB + generarGramatica(boolean) + LEERDOUBLE: int = 2 {readOnly} - autor: String + generarGramatica() - accion: Statement = null + LEERENTERO: int = 1 {readOnly} - curso: String + generarGramaticaAutores() : void ~ clave: int = -1 + LERRCADENA: int = 3 {readOnly} - editorial: String + generarGramaticaContinidos() : void - conexion: Connection = null - longitud: int - idLibro: int + generarGramaticaMateria() : void ~ password: String = null - tipolectura: int - materia: String + generarGramaticaNombreLibros() : void ~ puerto: String = null - nombreLibro: String + GetDatosforGrammar(String, String, String) : Vector - resultado: ResultSet = null + jFormatTextField(int, int) - numeroPaginas: int + GetDatosforGrammar(String) : Vector + tamaño: int = -1 - precio: double + main(String[]) : void ~ usuario: String = null - qty: int - stock: int = 0 + CargarClave(String) : int - tomo: int + CargarDriver() : boolean - yearEdition: int = 0 + ConectarBase(String) : boolean Utils::serv idor - yearTranscripcion: int = 0 + consultaEspecializada(String, String) : ResultSet + consultaEspecializadaCampos(String, String, String) : ResultSet + ACCION_ADMINISTRARLIBROS: int = -1 + getAutor() : String + ConsultaGeneral(String) : ResultSet + actionlistening: ActionListeningCrearLibro = null + getCurso() : String + consultaSQLcompleto(String) : ResultSet + AD_LIBROS_INGRESAR: int = 0 + getEditorial() : String + CraerDatabase(String) : int + AD_LIBROS_MODIFICAR: int = 1 + getIdLibro() : int + crearTablaHecho(String) : void + BASE_DATOS: String = "sistemabiblioteca" {readOnly} + getMateria() : String + CrearTablaRegla(String) : void + CAPITULO_VALOR: String = "SIN CAPITULO" + getNombreLibro() : String + Desconectar() : void + configuraciion: Configuracion = null + getNumeroPaginas() : int + EliminaRegistro(String, String) : int + configuracion: Configuracion = null + getPrecio() : double + ElinaTabla(String) : void + DATO_NO_DEFINIFO: String = "no definido" {readOnly} + getQty() : int + ElinraDB(String) : void + dominio: boolean = false + getStock() : int + getPassword() : String + EQUIPO: String = "administrador" + getTomo() : int + getPuerto() : String + EQUIPO_CLIENTE: String = "Cliente" {readOnly} -opd + getYearEdition() : int + getUsuario() : String + EQUIPO_SERVIDOR: String = "Servidor" {readOnly} + getYearTranscripcion() : int + ingresarAll(String, String) : int + escucha: Escucha = null + Libro() + main(String[]) : void + FILE_NAME_BASE_DATOS_RESTAURE: String = "DB_BRAILLE.sql" {readOnly} + Libro(int, String, String, String, String, int, int, int, double, String, int) - muestraSalidaDeError(InputStream) : void + FILE_NAME_CONFIGURACION: String = "Configuracion" {readOnly} + setAutor(String) : void + operacionesDB() + FILE_NAME_GRAMMAR_AUTOR: String = "grammarAutores" {readOnly} + setCurso(String) : void + operacionesDB(String) + FILE_NAME_GRAMMAR_COMANDOS: String = "grammarComandos" {readOnly} + setEditorial(String) : void + RespaldarDB(String) : boolean + FILE_NAME_GRAMMAR_CONTENIDO: String = "grammarContenidos" {readOnly} + setIdLibro(int) : void + RestaurarBaseDatos(String) : boolean + FILE_NAME_GRAMMAR_DIRECCIONES: String = "grammarDirecciones" {readOnly} + setMateria(String) : void + setPassword(String) : void + FILE_NAME_GRAMMAR_MATERIA: String = "grammarMaterias" {readOnly} + setNombreLibro(String) : void + setPuerto(String) : void + FILE_NAME_GRAMMAR_NOMBRE_LIBRO: String = "grammarNombreL... {readOnly} + setNumeroPaginas(int) : void + setUsuario(String) : void + FILE_NAME_GRAMMAR_NOMBRES: String = "grammarNombres" {readOnly} + setPrecio(double) : void + updateEspecializado(String, String) : int + FILE_NAME_GRAMMAR_NUMEROS: String = "grammarNumeros" {readOnly} + setQty(int) : void + frame: JFrame = null ~opd + setStock(int) : void + frameconfirma: Frame_confirmacion = null + setTomo(int) : void + frameinfolibro: Frame_infolibro = null + setYearEdition(int) : void + frameprestamo: Frame_prestamo = null + setYearTranscripcion(int) : void + frames_out: Vector = null + frase_valida_automata: boolean = false + frmeconsulta: Frame_consulta = null JComboBox + gestordialogo: GestordelDialogo = null GUI::ComboxPersonalizado + GRAMMAR_ALL_CONTENIDOS: String = "grammars.allCo... {readOnly} ActionListener + GRAMMAR_AUTORES: String = "grammars.autores" {readOnly} ~ opd: operacionesDB = null Control::ActionListeningCrearLibro + GRAMMAR_COMANDOS: String = "grammars.comandos" {readOnly} ~ tabla: String = null + GRAMMAR_DIRECCIONES: String = "grammars.direccion" {readOnly} + componentsMessages: HashMap = null + GRAMMAR_MATERIAS: String = "grammars.materias" {readOnly} + ComboxPersonalizado(String) - id_libro: int = -1 + GRAMMAR_NOMBRE_LIBROS: String = "grammars.nombr... {readOnly} + UpdateComponent() : void - opd: operacionesDB = null + GRAMMAR_NOMBRES: String = "grammars.nombres" {readOnly} -jComboBoxMateria-jComboBoxCUrsos - result: ResultSet = null + GRAMMAR_NUMEROS: String = "grammars.numeros" {readOnly} - SQL: String = "" + IniciativaConsulta: boolean = true + jframe: NewJFrame = null javax.swing.JPanel + actionPerformed(ActionEvent) : void + jpanelConfiguracion: JPanel_Configuracion = null GUI::JPanel_insertLibro + encerarBox(Vector) : void + jpanelCrearLibro: JPanel_insertLibro = null + encerarComponentes(Vector) : void + jpanelInventario: JPanel_inventario = null + control: ControlTablaLibro = new ControlTabl... + getComponentMessages() : HashMap + jpanelReporte: JPanel_ReportA = null - jButtonAddRegistro: JButton + validarCombobox(Vector) : boolean + jpanelUpdateDropLibro: JPanel_Drop_update_Libro = null - jButtonCancelar: JButton + verSihayDatos(Vector) : boolean + jpanelUpdateLibro: JPanel_UpdateLibro = null - jButtonCancelarCurso: JButton + key_text_pressed: String = null - jButtonCaneclarMateria: JButton +actionlistening + LIBRO_ESTADO_DADO_BAJA: String = "E" {readOnly} - jButtonnewCurso: JButton + LIBRO_ESTADO_DISPONIBLE: String = "D" {readOnly} - jButtonnewMateria: JButton Utilidades::ControlTablaLibro + libro_receptar: Recepcion_libro = null - jButtonSave: JButton + Libros_receptar: Vector = null - modelo: ModeloTablaLibro = null - jComboBoxCUrsos: ComboxPersonalizado + listenig_completo: boolean = false - numero: int = 0 - jComboBoxMateria: ComboxPersonalizado + listenig_Key: boolean = true - jComboBoxPais: JComboBox + MAXIMO_NO_ENTENDIDO_RECONOCEDOR: int = 3 {readOnly} + addContenidos(LinkedList) : void - jComboBoxQty: JComboBox + N_DIAS_MAXIMO_PRESTAMO_LIBRO: int = 30 {readOnly} + anhadeFila() : void - jComboBoxStock: JComboBox + NE_QUIERO_CONSULTAR_AQUI: String = "quiero consult... {readOnly} + anhadeFila(Contenido) : void - jComboBoxYearPublication: JComboBox + NE_QUIERO_LLEVAR_CASA: String = "quiero llevar ... {readOnly} + borraFila() : void - jComboBoxYearTranscription: JComboBox + Nivel_del_dialogo: byte = 1 + ControlTablaLibro(ModeloTablaLibro) - jLabel1: JLabel + NO_TENGO: String = "no tengo" {readOnly} - jLabel10: JLabel +control + NumeroLibros: Vector = null - jLabel11: JLabel + pausa: boolean = false - jLabel12: JLabel + PRESTAMO_ESTADO_LIBRO_ENTREGADO: String = "entregado" {readOnly} - jLabel13: JLabel java.io.Serializable + PRESTAMO_ESTADO_LIBRO_RECEPTADO: String = "receptado" {readOnly} - jLabel14: JLabel Beans::Contenido + PRESTAMO_TIPO_BIBLIOTECA: String = "biblioteca" {readOnly} - jLabel15: JLabel + PRESTAMO_TIPO_CASA: String = "domicilio" {readOnly} - jLabel16: JLabel - capitulo: String + propiedadesSysntetizador: SyntetisadorPropiedades = null - jLabel17: JLabel - id: ContenidoId + QTY_MAXIMO_LIBROS: int = 10 {readOnly} - jLabel18: JLabel - id_contenido: int = -1 + recepcion_libros: Administrar_RL = null - jLabel19: JLabel - numeroPagina: int = -1 + recognizer: Recognizer = null - jLabel2: JLabel - subtitulo: String + resultadoLibros: Vector = null - jLabel3: JLabel - titulo: String + semantica_generada_automata: String = null - jLabel4: JLabel + stado: String = null - jLabel5: JLabel + Contenido() + TABLA_CONTENIDO: String = "contenido" {readOnly} - jLabel6: JLabel + Contenido(String, String, String, int) + TABLA_CURSO: String = "curso" {readOnly} - jLabel7: JLabel + getCapitulo() : String + TABLA_LIBRO: String = "libro" {readOnly} - jLabel8: JLabel + getId() : ContenidoId + TABLA_MATERIA: String = "materia" {readOnly} - jLabel9: JLabel + getId_contenido() : int + TABLA_PERSONA: String = "persona" {readOnly} - jPanelCenter: JPanel + getNumeroPagina() : int + TABLA_PRESTAMO: String = "prestamo" {readOnly} - jPanelCenterContenido: JPanel + getSubtitulo() : String + TABLA_TAREAS_PENDIENTES: String = "tareas_pendientes" {readOnly} - jPanelContenidos: JPanel + getTitulo() : String + tareaPendiente: TareaPendiente = null - jPanelcontieneCurso: JPanel + setCapitulo(String) : void + tareas_pendientes: Administrar_TP = null -modelo - jPanelcontieneMateria: JPanel + setId(ContenidoId) : void + tareasPendientes: Vector = null - jPanelNorte: JPanel + setId_contenido(int) : void TableModel + TITULO_VALOR: String = "SIN TITULO" - jPanelSouth: JPanel + setNumeroPagina(int) : void + TokensRecognizer: String = null Utilidades::ModeloTablaLibro - jScrollPaneTabla: JScrollPane + setSubtitulo(String) : void + TP_ESTADO_COMPLETO: String = "COMPLETO" {readOnly} - jTableContenido: JTable + setTitulo(String) : void - datos: LinkedList = new LinkedList() + TP_ESTADO_PENDIENTE: String = "PENDIENTE" {readOnly} - jTextFieldAutor: JTextField - listeners: LinkedList = new LinkedList() + userAlreadyExist: boolean = false - jTextFieldCapitulo: JTextField + util: Util = null - jTextFieldEditorial: JTextField + addContenidos(LinkedList) : void + valorEstados: valor_estados = null - jTextFieldNewCurso: JTextField + addTableModelListener(TableModelListener) : void + VIEW_LIBROS_CONTENIDOS: String = "view_libros_co... {readOnly} - jTextFieldNewMateria: JTextField + anhadePersona(Contenido) : void + VIEW_LIBROS_MATERIA_CURSO: String = "view_libros_ma... {readOnly} +modelo - jTextFieldNumeroPagina: JTextField - avisaSuscriptores(TableModelEvent) : void +jpanelCrearLibro + VIEW_PRESTAMO: String = "view_prestamo" {readOnly} - jTextFieldNumeroPaginas: JTextField + borraPersona(int) : void + VIEW_REPORTE: String = "view_reporte" {readOnly} - jTextFieldPrecio: JTextField + encerarAllTable() : void + VIEW_TAREAS_PENDIENTES: String = "view_tareas_pe... {readOnly} - jTextFieldSubtitulo: JTextField + getColumnClass(int) : Class + WORK_RECEPCION_LIBROS: String = "RL" {readOnly} - jTextFieldTitulo: JTextField + getColumnCount() : int + WORK_SISTEMA_DIALOGO: String = "SD" {readOnly} - jTextFieldTituloLibro: JTextField + getColumnName(int) : String + WORK_SLEEP: String = "ND" {readOnly} - jTextFieldTomo: JTextField + getContenidos() : LinkedList + WORK_TAREAS_PENDIENTES: String = "TP" {readOnly} + modelo: ModeloTablaLibro = new ModeloTabla... + getRowCount() : int + YEAR_ACTUAL: int = Integer.parseIn... {readOnly} + getValueAt(int, int) : Object + YEAR_INICIO_SISTEMA: int = 2011 {readOnly} + getJButtonAddRegistro() : JButton + isCellEditable(int, int) : boolean + YEAR_START_COUNT: int = 1990 {readOnly} + removeTableModelListener(TableModelListener) : void + getJButtonCancelar() : JButton + getJButtonCancelarCurso() : JButton + setValueAt(Object, int, int) : void + AvisoInformativo(String, String, int) : void + getJButtonCaneclarMateria() : JButton + AvisoInformativo(Component, String, String, int) : void + getJButtonnewCurso() : JButton + crearFile(String, Vector) : void + getJButtonnewMateria() : JButton + Decoder_Frame() : Object + getJButtonSave() : JButton + Decoder_Frame(String) : Object + getJComboBoxCUrsos() : ComboxPersonalizado + Encoder_Frame(Object) : void + getJComboBoxMateria() : ComboxPersonalizado + Encoder_Frame(Object, String) : void + getJComboBoxPais() : JComboBox + getActionlistening() : ActionListeningCrearLibro + getJComboBoxQty() : JComboBox + getConfiguraciion() : Configuracion + getJComboBoxStock() : JComboBox + getConfiguracion() : Configuracion + getJComboBoxYearPublication() : JComboBox + getEscucha() : Escucha + getJComboBoxYearTranscription() : JComboBox + getFrame() : JFrame + getJLabel19() : JLabel + getFrameconfirma() : Frame_confirmacion + getJPanelCenterContenido() : JPanel + getFrameinfolibro() : Frame_infolibro + getJPanelcontieneCurso() : JPanel + getFrameprestamo() : Frame_prestamo + getJPanelNorte() : JPanel + getFrames_out() : Vector + getJPanelSouth() : JPanel + getFrmeconsulta() : Frame_consulta + getJTableContenido() : JTable + getGestordialogo() : GestordelDialogo + getJTextFieldAutor() : JTextField + getJframe() : NewJFrame + getJTextFieldCapitulo() : JTextField + getJpanelConfiguracion() : JPanel_Configuracion javax.swing.JFrame + getJTextFieldEditorial() : JTextField + getJpanelCrearLibro() : JPanel_insertLibro GUI::NewJFrame + getJTextFieldNewCurso() : JTextField + getJpanelInventario() : JPanel_inventario + getJTextFieldNewMateria() : JTextField + getJpanelReporte() : JPanel_ReportA - jMenu1BackupDB: JMenu + getJTextFieldNumeroPagina() : JTextField + getJpanelUpdateDropLibro() : JPanel_Drop_update_Libro - jMenuAdmin: JMenu + getJTextFieldNumeroPaginas() : JTextField + getJpanelUpdateLibro() : JPanel_UpdateLibro - jMenuAyuda: JMenu + getJTextFieldPrecio() : JTextField + getKey_text_pressed() : String - jMenuBarPrincipal: JMenuBar + getJTextFieldSubtitulo() : JTextField + getLibro_receptar() : Recepcion_libro - jMenuConfiguracion: JMenu + getJTextFieldTitulo() : JTextField + getPropiedadesSysntetizador() : SyntetisadorPropiedades - jMenuItemAcercaDe: JMenuItem + getJTextFieldTituloLibro() : JTextField + getRecepcion_libros() : Administrar_RL - jMenuItemBackup: JMenuItem + getJTextFieldTomo() : JTextField + getRecognizer() : Recognizer - jMenuItemCrear: JMenuItem + getQtyMaximo() : Vector + getResultadoLibros() : Vector - jMenuItemDelete: JMenuItem + Getyears() : Vector + getSemantica_generada_automata() : String - jMenuItemEliminarLibro: JMenuItem - initGUI() : void + getStado() : String - jMenuItemGuia: JMenuItem + JPanel_insertLibro() + getTareaPendiente() : TareaPendiente - jMenuItemInventario: JMenuItem + main(String[]) : void + getTareas_pendientes() : Administrar_TP - jMenuItemPresentarReportes: JMenuItem + setJButtonAddRegistro(JButton) : void + getTareasPendientes() : Vector - jMenuItemPropiedaes: JMenuItem +jframe + setJTextFieldCapitulo(JTextField) : void + getUtil() : Util - jMenuItemRestaurarDB: JMenuItem + setJTextFieldNewCurso(JTextField) : void + getValorEstados() : valor_estados - jMenuReport: JMenu + setJTextFieldNewMateria(JTextField) : void + isDominio() : boolean - jPanelPrincipal: JPanel + setJTextFieldNumeroPagina(JTextField) : void + isFrase_valida_automata() : boolean - jSeparator1Administar: JSeparator + setJTextFieldSubtitulo(JTextField) : void + isIniciativaConsulta() : boolean - jSeparator2: JSeparator + setJTextFieldTitulo(JTextField) : void - keyListening: keyListenig = null + isListenig_completo() : boolean + isListenig_Key() : boolean + getJMenu1BackupDB() : JMenu + isPausa() : boolean + getJMenuAdmin() : JMenu + isUserAlreadyExist() : boolean + getJMenuAyuda() : JMenu + rotular(String) : void + getJMenuBarPrincipal() : JMenuBar + setActionlistening(ActionListeningCrearLibro) : void + getJMenuConfiguracion() : JMenu + setConfiguraciion(Configuracion) : void + getJMenuItemAcercaDe() : JMenuItem + setConfiguracion(Configuracion) : void + getJMenuItemBackup() : JMenuItem + setDominio(boolean) : void + getJMenuItemCrear() : JMenuItem + setEscucha(Escucha) : void + getJMenuItemDelete() : JMenuItem + setFrame(JFrame) : void + getJMenuItemEliminarLibro() : JMenuItem + setFrameconfirma(Frame_confirmacion) : void + getJMenuItemGuia() : JMenuItem +util + setFrameinfolibro(Frame_infolibro) : void + getJMenuItemInventario() : JMenuItem + setFrameprestamo(Frame_prestamo) : void + getJMenuItemPresentarReportes() : JMenuItem Utils::Util + setFrames_out(Vector) : void + getJMenuItemPropiedaes() : JMenuItem + setFrase_valida_automata(boolean) : void + getJMenuItemRestaurarDB() : JMenuItem + CrearFile(String, String) : void + setFrmeconsulta(Frame_consulta) : void + getJMenuReport() : JMenu + getFecha_Now__time() : String + setGestordialogo(GestordelDialogo) : void + getJPanelPrincipal() : JPanel + getFecha_Siguiente_time(int, boolean) : String + setJframe(NewJFrame) : void + getJSeparator1Administar() : JSeparator + getYearsSystem() : Vector + setJpanelConfiguracion(JPanel_Configuracion) : void - initGUI() : void + openFile() : void + setJpanelCrearLibro(JPanel_insertLibro) : void - jMenuItemRestaurarDBActionPerformed(ActionEvent) : void + setAnchoColumnas(JTable, int[]) : void + setJpanelInventario(JPanel_inventario) : void + main(String[]) : void + SpeakText(String) : void + setJpanelReporte(JPanel_ReportA) : void + NewJFrame() + Util() + setJpanelUpdateDropLibro(JPanel_Drop_update_Libro) : void - thisKeyPressed(KeyEvent) : void + ValidarCedula(String) : boolean + setJpanelUpdateLibro(JPanel_UpdateLibro) : void - thisWindowClosed(WindowEvent) : void + writeFileGrammar(String, String, boolean) : void + setKey_text_pressed(String) : void + setLibro_receptar(Recepcion_libro) : void + setListenig_completo(boolean) : void + setListenig_Key(boolean) : void + setPausa(boolean) : void + setPropiedadesSysntetizador(SyntetisadorPropiedades) : void + setRecepcion_libros(Administrar_RL) : void + setRecognizer(Recognizer) : void + setResultadoLibros(Vector) : void + setSemantica_generada_automata(String) : void + setStado(String) : void + setTareaPendiente(TareaPendiente) : void + setTareas_pendientes(Administrar_TP) : void + setTareasPendientes(Vector) : void + setUserAlreadyExist(boolean) : void + setUtil(Util) : void + setValorEstados(valor_estados) : void «property get» + getACCION_ADMINISTRARLIBROS() : int + getLibros_receptar() : Vector + getNivel_del_dialogo() : byte + getNumeroLibros() : Vector + getTokensRecognizer() : String «property set» + setACCION_ADMINISTRARLIBROS(int) : void + setIniciativaConsulta(boolean) : void + setLibros_receptar(Vector) : void + setNivel_del_dialogo(byte) : void + setNumeroLibros(Vector) : void + setTokensRecognizer(String) : void

58. Ilustración: DC Modificar Libro Braille 212

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.8.4.7. Diagrama de clases para el caso de uso Modificar Libro Braille.

class DIAGRAM DE CLASES MODIFICAR LIBRO BRAILLE

JComboBox JFormattedTextField GUI::ComboxPersonalizado Name: Modifica Libro Braille GUI::jFormatTextField ~ opd: operacionesDB = null Versión: 1.0 javax.swing.JPanel + LEERDOUBLE: int = 2 {readOnly} Autor: José Ubertini Jaramillo Zhingre ~ tabla: String = null GUI::JPanel_Drop_update_Libro + LEERENTERO: int = 1 {readOnly} javax.swing.JPanel + LERRCADENA: int = 3 {readOnly} + controlLibro: ControlTablaBuscarLibro = new ControlTabl... + ComboxPersonalizado(String) GUI::JPanel_UpdateLibro + UpdateComponent() : void - longitud: int - jButtonBuscarLibro: JButton - tipolectura: int - jButtonDetalles: JButton + control: ControlTablaLibro = new ControlTabl... -jComboBoxMateria-jComboBoxCUrsos - jButtonEliminar: JButton - jButtonAddRegistro: JButton + jFormatTextField(int, int) - jButtonSali: JButton - jButtonCancelar: JButton - jButtonUpdate: JButton - jButtonCancelarCurso: JButton - jComboBoxTipoBusqueda: JComboBox - jButtonCaneclarMateria: JButton - jLabel1: JLabel - jButtonnewCurso: JButton ~opd - jPanelCenter: JPanel - jButtonnewMateria: JButton - jPanelEsteCenter: JPanel - jButtonSave: JButton DB::operacionesDB javax.swing.JFrame - jPanelN1: JPanel - jComboBoxCUrsos: ComboxPersonalizado GUI::NewJFrame - jPanelNorte: JPanel - jComboBoxMateria: ComboxPersonalizado - accion: Statement = null - jPanelOeste: JPanel - jComboBoxPais: JComboBox ~ clave: int = -1 - jMenu1BackupDB: JMenu - jPanelSouth: JPanel - jComboBoxQty: JComboBox - conexion: Connection = null - jMenuAdmin: JMenu - jScrollPaneContainTable: JScrollPane - jComboBoxStock: JComboBox ~ password: String = null - jMenuAyuda: JMenu - jTableLibros: JTable - jComboBoxYearPublication: JComboBox ~ puerto: String = null - jMenuBarPrincipal: JMenuBar - jTextFieldDatBunsqueda: JTextField - jComboBoxYearTranscription: JComboBox - resultado: ResultSet = null - jMenuConfiguracion: JMenu + modelo: ModeloTablaBuscarLibro = new ModeloTabla... - jLabel1: JLabel + tamaño: int = -1 - jMenuItemAcercaDe: JMenuItem ~ oyente: ActionListeningUpdateDeleteLibros = new ActionListe... - jLabel10: JLabel ~ usuario: String = null - jMenuItemBackup: JMenuItem - jLabel11: JLabel - jMenuItemCrear: JMenuItem + getJButtonBuscarLibro() : JButton - jLabel12: JLabel + CargarClave(String) : int - jMenuItemDelete: JMenuItem + getJButtonDetalles() : JButton - jLabel13: JLabel + CargarDriver() : boolean - jMenuItemEliminarLibro: JMenuItem + getJButtonEliminar() : JButton - jLabel14: JLabel + ConectarBase(String) : boolean - jMenuItemGuia: JMenuItem + getJButtonSali() : JButton - jLabel15: JLabel + consultaEspecializada(String, String) : ResultSet - jMenuItemInventario: JMenuItem + getJButtonUpdate() : JButton - jLabel16: JLabel + consultaEspecializadaCampos(String, String, String) : ResultSet - jMenuItemPresentarReportes: JMenuItem + getJComboBoxTipoBusqueda() : JComboBox - jLabel17: JLabel + ConsultaGeneral(String) : ResultSet - jMenuItemPropiedaes: JMenuItem + getJPanelCenter() : JPanel - jLabel18: JLabel + consultaSQLcompleto(String) : ResultSet - jMenuItemRestaurarDB: JMenuItem + getJPanelEsteCenter() : JPanel - jLabel19: JLabel + CraerDatabase(String) : int - jMenuReport: JMenu + getJPanelN1() : JPanel - jLabel2: JLabel + crearTablaHecho(String) : void - jPanelPrincipal: JPanel + getJPanelNorte() : JPanel - jLabel3: JLabel + CrearTablaRegla(String) : void - jSeparator1Administar: JSeparator + getJPanelOeste() : JPanel - jLabel4: JLabel + Desconectar() : void - jSeparator2: JSeparator + getJPanelSouth() : JPanel - jLabel5: JLabel + EliminaRegistro(String, String) : int - keyListening: keyListenig = null + getJScrollPaneContainTable() : JScrollPane - jLabel6: JLabel + ElinaTabla(String) : void + getJTableLibros() : JTable - jLabel7: JLabel + ElinraDB(String) : void + getJMenu1BackupDB() : JMenu + getJTextFieldDatBunsqueda() : JTextField - jLabel8: JLabel + getPassword() : String + getJMenuAdmin() : JMenu - initGUI() : void - jLabel9: JLabel + getPuerto() : String + getJMenuAyuda() : JMenu + JPanel_Drop_update_Libro() - jPanelCenter: JPanel + getUsuario() : String + getJMenuBarPrincipal() : JMenuBar + main(String[]) : void - jPanelCenterContenido: JPanel + ingresarAll(String, String) : int + getJMenuConfiguracion() : JMenu - jPanelContenidos: JPanel + main(String[]) : void + getJMenuItemAcercaDe() : JMenuItem +jpanelUpdateDropLibro - jPanelcontieneCurso: JPanel - muestraSalidaDeError(InputStream) : void + getJMenuItemBackup() : JMenuItem - jPanelcontieneMateria: JPanel + operacionesDB() + getJMenuItemCrear() : JMenuItem - jPanelNorte: JPanel + operacionesDB(String) + getJMenuItemDelete() : JMenuItem - jPanelSouth: JPanel + RespaldarDB(String) : boolean + getJMenuItemEliminarLibro() : JMenuItem - jScrollPaneTabla: JScrollPane + RestaurarBaseDatos(String) : boolean + getJMenuItemGuia() : JMenuItem - jTableContenido: JTable + setPassword(String) : void + getJMenuItemInventario() : JMenuItem +controlLibro - jTextFieldAutor: JTextField + setPuerto(String) : void + getJMenuItemPresentarReportes() : JMenuItem - jTextFieldCapitulo: JTextField + setUsuario(String) : void + getJMenuItemPropiedaes() : JMenuItem Utilidades::ControlTablaBuscarLibro - jTextFieldEditorial: JTextField + updateEspecializado(String, String) : int + getJMenuItemRestaurarDB() : JMenuItem - jTextFieldNewCurso: JTextField + getJMenuReport() : JMenu - modelo: ModeloTablaBuscarLibro = null - jTextFieldNewMateria: JTextField + getJPanelPrincipal() : JPanel - numero: int = 0 - jTextFieldNumeroPagina: JTextField + getJSeparator1Administar() : JSeparator - jTextFieldNumeroPaginas: JTextField - initGUI() : void + addLibros(LinkedList) : void - jTextFieldPrecio: JTextField java.io.Serializable - jMenuItemRestaurarDBActionPerformed(ActionEvent) : void + anhadeFila() : void - jTextFieldSubtitulo: JTextField Beans::Libro + main(String[]) : void + anhadeFila(Libro) : void - jTextFieldTitulo: JTextField + NewJFrame() + borraFila() : void - jTextFieldTituloLibro: JTextField - autor: String - thisKeyPressed(KeyEvent) : void + ControlTablaBuscarLibro(ModeloTablaBuscarLibro) - jTextFieldTomo: JTextField - curso: String - thisWindowClosed(WindowEvent) : void + libroSelectedWork: Libro = null - editorial: String +jframe + modelo: ModeloTablaLibro = new ModeloTabla... - idLibro: int - oyente: ActionListeningUpdateBook = new ActionListe... - materia: String +modelo + posContenidosModificados: Vector = null - nombreLibro: String - numeroPaginas: int TableModel + getJButtonAddRegistro() : JButton - precio: double + getJButtonCancelar() : JButton - qty: int Utilidades::ModeloTablaBuscarLibro -modelo + getJButtonCancelarCurso() : JButton - stock: int = 0 - datos: LinkedList = new LinkedList() + getJButtonCaneclarMateria() : JButton - tomo: int - listeners: LinkedList = new LinkedList() + getJButtonnewCurso() : JButton +libroSelectedWork - yearEdition: int = 0 + getJButtonnewMateria() : JButton - yearTranscripcion: int = 0 + addLibros(LinkedList) : void + getJButtonSave() : JButton + addTableModelListener(TableModelListener) : void + getJComboBoxCUrsos() : ComboxPersonalizado + getAutor() : String + anhadeLibro(Libro) : void + getJComboBoxMateria() : ComboxPersonalizado + getCurso() : String - avisaSuscriptores(TableModelEvent) : void + getJComboBoxPais() : JComboBox + getEditorial() : String + borraLibro(int) : void + getJComboBoxQty() : JComboBox + getIdLibro() : int + encerarAllTable() : void + getJComboBoxStock() : JComboBox + getMateria() : String + getColumnClass(int) : Class + getJComboBoxYearPublication() : JComboBox + getNombreLibro() : String + getColumnCount() : int + getJComboBoxYearTranscription() : JComboBox + getNumeroPaginas() : int + getColumnName(int) : String + getJLabel19() : JLabel + getPrecio() : double + getContenidos() : LinkedList + getJPanelCenterContenido() : JPanel + getQty() : int + getRowCount() : int + getJPanelContenidos() : JPanel + getStock() : int + getValueAt(int, int) : Object + getJPanelcontieneCurso() : JPanel + getTomo() : int + isCellEditable(int, int) : boolean +control + getJPanelNorte() : JPanel + getYearEdition() : int + removeTableModelListener(TableModelListener) : void + getJPanelSouth() : JPanel + getYearTranscripcion() : int + setValueAt(Object, int, int) : void Utilidades::ControlTablaLibro +jpanelUpdateLibro + getJTableContenido() : JTable + Libro() + getJTextFieldAutor() : JTextField + Libro(int, String, String, String, String, int, int, int, double, String, int) - modelo: ModeloTablaLibro = null + getJTextFieldCapitulo() : JTextField + setAutor(String) : void - numero: int = 0 + getJTextFieldEditorial() : JTextField + setCurso(String) : void + getJTextFieldNewCurso() : JTextField + setEditorial(String) : void Utils::serv idor + addContenidos(LinkedList) : void + getJTextFieldNewMateria() : JTextField + setIdLibro(int) : void + anhadeFila() : void + getJTextFieldNumeroPagina() : JTextField + setMateria(String) : void + ACCION_ADMINISTRARLIBROS: int = -1 + anhadeFila(Contenido) : void + getJTextFieldNumeroPaginas() : JTextField + setNombreLibro(String) : void + actionlistening: ActionListeningCrearLibro = null + borraFila() : void + getJTextFieldPrecio() : JTextField + setNumeroPaginas(int) : void + AD_LIBROS_INGRESAR: int = 0 + ControlTablaLibro(ModeloTablaLibro) + AD_LIBROS_MODIFICAR: int = 1 + getJTextFieldSubtitulo() : JTextField + setPrecio(double) : void + BASE_DATOS: String = "sistemabiblioteca" {readOnly} + getJTextFieldTitulo() : JTextField + setQty(int) : void + CAPITULO_VALOR: String = "SIN CAPITULO" + getJTextFieldTituloLibro() : JTextField + setStock(int) : void + configuraciion: Configuracion = null + getJTextFieldTomo() : JTextField + setTomo(int) : void + configuracion: Configuracion = null + getLibroSelectedWork() : Libro + setYearEdition(int) : void + DATO_NO_DEFINIFO: String = "no definido" {readOnly} + getPosContenidosModificados() : Vector + setYearTranscripcion(int) : void + dominio: boolean = false + getQtyMaximo() : Vector + EQUIPO: String = "administrador" + Getyears() : Vector + EQUIPO_CLIENTE: String = "Cliente" {readOnly} - initGUI() : void + EQUIPO_SERVIDOR: String = "Servidor" {readOnly} + JPanel_UpdateLibro() java.io.Serializable + escucha: Escucha = null + LoadDatosInterfaz(Libro) : void Beans::Contenido + main(String[]) : void + FILE_NAME_BASE_DATOS_RESTAURE: String = "DB_BRAILLE.sql" {readOnly} -modelo +modelo + FILE_NAME_CONFIGURACION: String = "Configuracion" {readOnly} + onlyReadDatos() : void - capitulo: String + FILE_NAME_GRAMMAR_AUTOR: String = "grammarAutores" {readOnly} TableModel + setJButtonAddRegistro(JButton) : void - id: ContenidoId + FILE_NAME_GRAMMAR_COMANDOS: String = "grammarComandos" {readOnly} Utilidades::ModeloTablaLibro + setJPanelContenidos(JPanel) : void - id_contenido: int = -1 + FILE_NAME_GRAMMAR_CONTENIDO: String = "grammarContenidos" {readOnly} + setJTextFieldCapitulo(JTextField) : void - numeroPagina: int = -1 + FILE_NAME_GRAMMAR_DIRECCIONES: String = "grammarDirecciones" {readOnly} - datos: LinkedList = new LinkedList() + setJTextFieldNewCurso(JTextField) : void - subtitulo: String + FILE_NAME_GRAMMAR_MATERIA: String = "grammarMaterias" {readOnly} - listeners: LinkedList = new LinkedList() + setJTextFieldNewMateria(JTextField) : void - titulo: String + FILE_NAME_GRAMMAR_NOMBRE_LIBRO: String = "grammarNombreL... {readOnly} + setJTextFieldNumeroPagina(JTextField) : void + FILE_NAME_GRAMMAR_NOMBRES: String = "grammarNombres" {readOnly} + addContenidos(LinkedList) : void + setJTextFieldSubtitulo(JTextField) : void + Contenido() + FILE_NAME_GRAMMAR_NUMEROS: String = "grammarNumeros" {readOnly} + addTableModelListener(TableModelListener) : void + setJTextFieldTitulo(JTextField) : void + Contenido(String, String, String, int) + frame: JFrame = null + anhadePersona(Contenido) : void + setLibroSelectedWork(Libro) : void + getCapitulo() : String + frameconfirma: Frame_confirmacion = null - avisaSuscriptores(TableModelEvent) : void + setPosContenidosModificados(Vector) : void + getId() : ContenidoId + frameinfolibro: Frame_infolibro = null + borraPersona(int) : void + getId_contenido() : int + frameprestamo: Frame_prestamo = null + encerarAllTable() : void + getNumeroPagina() : int + frames_out: Vector = null + getColumnClass(int) : Class + getSubtitulo() : String + frase_valida_automata: boolean = false + getColumnCount() : int + getTitulo() : String + frmeconsulta: Frame_consulta = null + getColumnName(int) : String + setCapitulo(String) : void + gestordialogo: GestordelDialogo = null + getContenidos() : LinkedList + setId(ContenidoId) : void + GRAMMAR_ALL_CONTENIDOS: String = "grammars.allCo... {readOnly} + getRowCount() : int + setId_contenido(int) : void + GRAMMAR_AUTORES: String = "grammars.autores" {readOnly} + getValueAt(int, int) : Object + setNumeroPagina(int) : void + GRAMMAR_COMANDOS: String = "grammars.comandos" {readOnly} + isCellEditable(int, int) : boolean + setSubtitulo(String) : void + GRAMMAR_DIRECCIONES: String = "grammars.direccion" {readOnly} + removeTableModelListener(TableModelListener) : void + setTitulo(String) : void + GRAMMAR_MATERIAS: String = "grammars.materias" {readOnly} + setValueAt(Object, int, int) : void + GRAMMAR_NOMBRE_LIBROS: String = "grammars.nombr... {readOnly} + GRAMMAR_NOMBRES: String = "grammars.nombres" {readOnly} + GRAMMAR_NUMEROS: String = "grammars.numeros" {readOnly} + IniciativaConsulta: boolean = true + jframe: NewJFrame = null + jpanelConfiguracion: JPanel_Configuracion = null + jpanelCrearLibro: JPanel_insertLibro = null + jpanelInventario: JPanel_inventario = null + jpanelReporte: JPanel_ReportA = null + jpanelUpdateDropLibro: JPanel_Drop_update_Libro = null + jpanelUpdateLibro: JPanel_UpdateLibro = null + key_text_pressed: String = null + LIBRO_ESTADO_DADO_BAJA: String = "E" {readOnly} + LIBRO_ESTADO_DISPONIBLE: String = "D" {readOnly} + libro_receptar: Recepcion_libro = null + Libros_receptar: Vector = null + listenig_completo: boolean = false + listenig_Key: boolean = true + MAXIMO_NO_ENTENDIDO_RECONOCEDOR: int = 3 {readOnly} + N_DIAS_MAXIMO_PRESTAMO_LIBRO: int = 30 {readOnly} + NE_QUIERO_CONSULTAR_AQUI: String = "quiero consult... {readOnly} + NE_QUIERO_LLEVAR_CASA: String = "quiero llevar ... {readOnly} + Nivel_del_dialogo: byte = 1 + NO_TENGO: String = "no tengo" {readOnly} + NumeroLibros: Vector = null + pausa: boolean = false + PRESTAMO_ESTADO_LIBRO_ENTREGADO: String = "entregado" {readOnly} + PRESTAMO_ESTADO_LIBRO_RECEPTADO: String = "receptado" {readOnly} + PRESTAMO_TIPO_BIBLIOTECA: String = "biblioteca" {readOnly} + PRESTAMO_TIPO_CASA: String = "domicilio" {readOnly} + propiedadesSysntetizador: SyntetisadorPropiedades = null + QTY_MAXIMO_LIBROS: int = 10 {readOnly} + recepcion_libros: Administrar_RL = null + recognizer: Recognizer = null + resultadoLibros: Vector = null + semantica_generada_automata: String = null + stado: String = null + TABLA_CONTENIDO: String = "contenido" {readOnly} + TABLA_CURSO: String = "curso" {readOnly} + TABLA_LIBRO: String = "libro" {readOnly} + TABLA_MATERIA: String = "materia" {readOnly} + TABLA_PERSONA: String = "persona" {readOnly} + TABLA_PRESTAMO: String = "prestamo" {readOnly} + TABLA_TAREAS_PENDIENTES: String = "tareas_pendientes" {readOnly} + tareaPendiente: TareaPendiente = null + tareas_pendientes: Administrar_TP = null + tareasPendientes: Vector = null + TITULO_VALOR: String = "SIN TITULO" + TokensRecognizer: String = null + TP_ESTADO_COMPLETO: String = "COMPLETO" {readOnly} + TP_ESTADO_PENDIENTE: String = "PENDIENTE" {readOnly} + userAlreadyExist: boolean = false + util: Util = null + valorEstados: valor_estados = null + VIEW_LIBROS_CONTENIDOS: String = "view_libros_co... {readOnly} + VIEW_LIBROS_MATERIA_CURSO: String = "view_libros_ma... {readOnly} + VIEW_PRESTAMO: String = "view_prestamo" {readOnly} + VIEW_REPORTE: String = "view_reporte" {readOnly} + VIEW_TAREAS_PENDIENTES: String = "view_tareas_pe... {readOnly} + WORK_RECEPCION_LIBROS: String = "RL" {readOnly} + WORK_SISTEMA_DIALOGO: String = "SD" {readOnly} + WORK_SLEEP: String = "ND" {readOnly} + WORK_TAREAS_PENDIENTES: String = "TP" {readOnly} + YEAR_ACTUAL: int = Integer.parseIn... {readOnly} + YEAR_INICIO_SISTEMA: int = 2011 {readOnly} + YEAR_START_COUNT: int = 1990 {readOnly}

+ AvisoInformativo(String, String, int) : void + AvisoInformativo(Component, String, String, int) : void + crearFile(String, Vector) : void + Decoder_Frame() : Object + Decoder_Frame(String) : Object + Encoder_Frame(Object) : void + Encoder_Frame(Object, String) : void + getActionlistening() : ActionListeningCrearLibro + getConfiguraciion() : Configuracion + getConfiguracion() : Configuracion + getEscucha() : Escucha + getFrame() : JFrame + getFrameconfirma() : Frame_confirmacion + getFrameinfolibro() : Frame_infolibro + getFrameprestamo() : Frame_prestamo + getFrames_out() : Vector + getFrmeconsulta() : Frame_consulta + getGestordialogo() : GestordelDialogo + getJframe() : NewJFrame + getJpanelConfiguracion() : JPanel_Configuracion + getJpanelCrearLibro() : JPanel_insertLibro + getJpanelInventario() : JPanel_inventario + getJpanelReporte() : JPanel_ReportA + getJpanelUpdateDropLibro() : JPanel_Drop_update_Libro + getJpanelUpdateLibro() : JPanel_UpdateLibro + getKey_text_pressed() : String + getLibro_receptar() : Recepcion_libro + getPropiedadesSysntetizador() : SyntetisadorPropiedades + getRecepcion_libros() : Administrar_RL + getRecognizer() : Recognizer + getResultadoLibros() : Vector + getSemantica_generada_automata() : String + getStado() : String + getTareaPendiente() : TareaPendiente + getTareas_pendientes() : Administrar_TP + getTareasPendientes() : Vector + getUtil() : Util + getValorEstados() : valor_estados + isDominio() : boolean + isFrase_valida_automata() : boolean + isIniciativaConsulta() : boolean + isListenig_completo() : boolean + isListenig_Key() : boolean + isPausa() : boolean + isUserAlreadyExist() : boolean + rotular(String) : void + setActionlistening(ActionListeningCrearLibro) : void + setConfiguraciion(Configuracion) : void + setConfiguracion(Configuracion) : void + setDominio(boolean) : void + setEscucha(Escucha) : void + setFrame(JFrame) : void + setFrameconfirma(Frame_confirmacion) : void + setFrameinfolibro(Frame_infolibro) : void + setFrameprestamo(Frame_prestamo) : void + setFrames_out(Vector) : void + setFrase_valida_automata(boolean) : void + setFrmeconsulta(Frame_consulta) : void + setGestordialogo(GestordelDialogo) : void + setJframe(NewJFrame) : void + setJpanelConfiguracion(JPanel_Configuracion) : void + setJpanelCrearLibro(JPanel_insertLibro) : void + setJpanelInventario(JPanel_inventario) : void + setJpanelReporte(JPanel_ReportA) : void + setJpanelUpdateDropLibro(JPanel_Drop_update_Libro) : void + setJpanelUpdateLibro(JPanel_UpdateLibro) : void + setKey_text_pressed(String) : void + setLibro_receptar(Recepcion_libro) : void + setListenig_completo(boolean) : void + setListenig_Key(boolean) : void + setPausa(boolean) : void + setPropiedadesSysntetizador(SyntetisadorPropiedades) : void + setRecepcion_libros(Administrar_RL) : void + setRecognizer(Recognizer) : void + setResultadoLibros(Vector) : void + setSemantica_generada_automata(String) : void + setStado(String) : void + setTareaPendiente(TareaPendiente) : void + setTareas_pendientes(Administrar_TP) : void + setTareasPendientes(Vector) : void + setUserAlreadyExist(boolean) : void + setUtil(Util) : void + setValorEstados(valor_estados) : void «property get» + getACCION_ADMINISTRARLIBROS() : int + getLibros_receptar() : Vector + getNivel_del_dialogo() : byte + getNumeroLibros() : Vector + getTokensRecognizer() : String «property set» + setACCION_ADMINISTRARLIBROS(int) : void + setIniciativaConsulta(boolean) : void + setLibros_receptar(Vector) : void + setNivel_del_dialogo(byte) : void + setNumeroLibros(Vector) : void + setTokensRecognizer(String) : void

59. Ilustración: DC Modificar Libro Braille 213

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.8.4.8. Diagrama de clases para el caso de uso Eliminar Libro Braille.

class DIAGRAM DE CLASES ELIMINAR LIBRO BRAILLE

javax.swing.JPanel GUI::JPanel_Eliminar

Name: Eliminar Libro Braille - jButtonFinf: JButton Versión: 1.0 - jComboBoxCriterioBusqueda: JComboBox Autor: José Ubertino Jaramillo Zhingre - jComboBoxMaterias: JComboBox - jLabel1: JLabel - jList1: JList - jPanelCenter: JPanel - jTextFieldNombre: JTextField

+ getJButtonFinf() : JButton + getJComboBoxMaterias() : JComboBox + getJPanelCenter() : JPanel Utils::serv idor javax.swing.JPanel + getJTextFieldNombre() : JTextField - initGUI() : void GUI::JPanel_Drop_update_Libro + ACCION_ADMINISTRARLIBROS: int = -1 + JPanel_Eliminar() + actionlistening: ActionListeningCrearLibro = null + controlLibro: ControlTablaBuscarLibro = new ControlTabl... + main(String[]) : void + AD_LIBROS_INGRESAR: int = 0 - jButtonBuscarLibro: JButton + AD_LIBROS_MODIFICAR: int = 1 - jButtonDetalles: JButton DB::operacionesDB + BASE_DATOS: String = "sistemabiblioteca" {readOnly} - jButtonEliminar: JButton - accion: Statement = null + CAPITULO_VALOR: String = "SIN CAPITULO" - jButtonSali: JButton ~ clave: int = -1 + configuraciion: Configuracion = null ActionListener - jButtonUpdate: JButton - conexion: Connection = null + configuracion: Configuracion = null - jComboBoxTipoBusqueda: JComboBox Control:: ~ password: String = null + DATO_NO_DEFINIFO: String = "no definido" {readOnly} - jLabel1: JLabel ActionListeningUpdateDeleteLibros ~ puerto: String = null + dominio: boolean = false - jPanelCenter: JPanel - resultado: ResultSet = null + EQUIPO: String = "administrador" - idlibro: int = -1 - jPanelEsteCenter: JPanel + tamaño: int = -1 + EQUIPO_CLIENTE: String = "Cliente" {readOnly} - libros: LinkedList = null - jPanelN1: JPanel ~ usuario: String = null + EQUIPO_SERVIDOR: String = "Servidor" {readOnly} - jPanelNorte: JPanel - libroSelected: Libro = null + escucha: Escucha = null ~oyente - opd: operacionesDB = null - jPanelOeste: JPanel + CargarClave(String) : int + FILE_NAME_BASE_DATOS_RESTAURE: String = "DB_BRAILLE.sql" {readOnly} - result: ResultSet = null - jPanelSouth: JPanel + CargarDriver() : boolean + FILE_NAME_CONFIGURACION: String = "Configuracion" {readOnly} - SQL: String = "" - jScrollPaneContainTable: JScrollPane + ConectarBase(String) : boolean + FILE_NAME_GRAMMAR_AUTOR: String = "grammarAutores" {readOnly} -opd - jTableLibros: JTable + consultaEspecializada(String, String) : ResultSet + FILE_NAME_GRAMMAR_COMANDOS: String = "grammarComandos" {readOnly} + actionPerformed(ActionEvent) : void - jTextFieldDatBunsqueda: JTextField + consultaEspecializadaCampos(String, String, String) : ResultSet + FILE_NAME_GRAMMAR_CONTENIDO: String = "grammarContenidos" {readOnly} + solicitarIdlibro(String) : int + modelo: ModeloTablaBuscarLibro = new ModeloTabla... + ConsultaGeneral(String) : ResultSet + FILE_NAME_GRAMMAR_DIRECCIONES: String = "grammarDirecciones" {readOnly} + ValidarId_libroRecibido(int) : boolean ~ oyente: ActionListeningUpdateDeleteLibros = new ActionListe... + consultaSQLcompleto(String) : ResultSet + FILE_NAME_GRAMMAR_MATERIA: String = "grammarMaterias" {readOnly} + CraerDatabase(String) : int + FILE_NAME_GRAMMAR_NOMBRE_LIBRO: String = "grammarNombreL... {readOnly} + getJButtonBuscarLibro() : JButton + crearTablaHecho(String) : void + FILE_NAME_GRAMMAR_NOMBRES: String = "grammarNombres" {readOnly} + getJButtonDetalles() : JButton + CrearTablaRegla(String) : void + FILE_NAME_GRAMMAR_NUMEROS: String = "grammarNumeros" {readOnly} + getJButtonEliminar() : JButton + Desconectar() : void + frame: JFrame = null +controlLibro + getJButtonSali() : JButton Utilidades::ControlTablaBuscarLibro + EliminaRegistro(String, String) : int + frameconfirma: Frame_confirmacion = null + getJButtonUpdate() : JButton + ElinaTabla(String) : void + frameinfolibro: Frame_infolibro = null + getJComboBoxTipoBusqueda() : JComboBox - modelo: ModeloTablaBuscarLibro = null + ElinraDB(String) : void + frameprestamo: Frame_prestamo = null + getJPanelCenter() : JPanel - numero: int = 0 + getPassword() : String + frames_out: Vector = null + getJPanelEsteCenter() : JPanel + getPuerto() : String + frase_valida_automata: boolean = false + getJPanelN1() : JPanel + addLibros(LinkedList) : void + getUsuario() : String + frmeconsulta: Frame_consulta = null + getJPanelNorte() : JPanel + anhadeFila() : void + ingresarAll(String, String) : int + gestordialogo: GestordelDialogo = null + getJPanelOeste() : JPanel + anhadeFila(Libro) : void + main(String[]) : void + GRAMMAR_ALL_CONTENIDOS: String = "grammars.allCo... {readOnly} + getJPanelSouth() : JPanel + borraFila() : void - muestraSalidaDeError(InputStream) : void + GRAMMAR_AUTORES: String = "grammars.autores" {readOnly} + getJScrollPaneContainTable() : JScrollPane + ControlTablaBuscarLibro(ModeloTablaBuscarLibro) + operacionesDB() + GRAMMAR_COMANDOS: String = "grammars.comandos" {readOnly} + getJTableLibros() : JTable + operacionesDB(String) + GRAMMAR_DIRECCIONES: String = "grammars.direccion" {readOnly} + getJTextFieldDatBunsqueda() : JTextField + RespaldarDB(String) : boolean + GRAMMAR_MATERIAS: String = "grammars.materias" {readOnly} - initGUI() : void + RestaurarBaseDatos(String) : boolean + GRAMMAR_NOMBRE_LIBROS: String = "grammars.nombr... {readOnly} + JPanel_Drop_update_Libro() + setPassword(String) : void + GRAMMAR_NOMBRES: String = "grammars.nombres" {readOnly} + main(String[]) : void + setPuerto(String) : void + GRAMMAR_NUMEROS: String = "grammars.numeros" {readOnly} + setUsuario(String) : void + IniciativaConsulta: boolean = true +jpanelUpdateDropLibro + updateEspecializado(String, String) : int + jframe: NewJFrame = null + jpanelConfiguracion: JPanel_Configuracion = null + jpanelCrearLibro: JPanel_insertLibro = null + jpanelInventario: JPanel_inventario = null + jpanelReporte: JPanel_ReportA = null + jpanelUpdateDropLibro: JPanel_Drop_update_Libro = null + jpanelUpdateLibro: JPanel_UpdateLibro = null + key_text_pressed: String = null + LIBRO_ESTADO_DADO_BAJA: String = "E" {readOnly} + LIBRO_ESTADO_DISPONIBLE: String = "D" {readOnly} + libro_receptar: Recepcion_libro = null + Libros_receptar: Vector = null + listenig_completo: boolean = false + listenig_Key: boolean = true +modelo -modelo + MAXIMO_NO_ENTENDIDO_RECONOCEDOR: int = 3 {readOnly} + N_DIAS_MAXIMO_PRESTAMO_LIBRO: int = 30 {readOnly} TableModel + NE_QUIERO_CONSULTAR_AQUI: String = "quiero consult... {readOnly} Utilidades::ModeloTablaBuscarLibro + NE_QUIERO_LLEVAR_CASA: String = "quiero llevar ... {readOnly} + Nivel_del_dialogo: byte = 1 - datos: LinkedList = new LinkedList() + NO_TENGO: String = "no tengo" {readOnly} - listeners: LinkedList = new LinkedList() -libroSelected + NumeroLibros: Vector = null + pausa: boolean = false + addLibros(LinkedList) : void java.io.Serializable + PRESTAMO_ESTADO_LIBRO_ENTREGADO: String = "entregado" {readOnly} + addTableModelListener(TableModelListener) : void Beans::Libro + PRESTAMO_ESTADO_LIBRO_RECEPTADO: String = "receptado" {readOnly} + anhadeLibro(Libro) : void + PRESTAMO_TIPO_BIBLIOTECA: String = "biblioteca" {readOnly} - avisaSuscriptores(TableModelEvent) : void - autor: String + PRESTAMO_TIPO_CASA: String = "domicilio" {readOnly} + borraLibro(int) : void - curso: String + propiedadesSysntetizador: SyntetisadorPropiedades = null + encerarAllTable() : void - editorial: String + QTY_MAXIMO_LIBROS: int = 10 {readOnly} + getColumnClass(int) : Class - idLibro: int + recepcion_libros: Administrar_RL = null + getColumnCount() : int - materia: String - nombreLibro: String + recognizer: Recognizer = null + getColumnName(int) : String + resultadoLibros: Vector = null + getContenidos() : LinkedList - numeroPaginas: int + semantica_generada_automata: String = null + getRowCount() : int - precio: double + stado: String = null + getValueAt(int, int) : Object - qty: int + TABLA_CONTENIDO: String = "contenido" {readOnly} + isCellEditable(int, int) : boolean - stock: int = 0 + TABLA_CURSO: String = "curso" {readOnly} + removeTableModelListener(TableModelListener) : void - tomo: int + TABLA_LIBRO: String = "libro" {readOnly} + setValueAt(Object, int, int) : void - yearEdition: int = 0 + TABLA_MATERIA: String = "materia" {readOnly} - yearTranscripcion: int = 0 + TABLA_PERSONA: String = "persona" {readOnly} + TABLA_PRESTAMO: String = "prestamo" {readOnly} + getAutor() : String + TABLA_TAREAS_PENDIENTES: String = "tareas_pendientes" {readOnly} + getCurso() : String + getEditorial() : String + tareaPendiente: TareaPendiente = null + tareas_pendientes: Administrar_TP = null + getIdLibro() : int + tareasPendientes: Vector = null + getMateria() : String + TITULO_VALOR: String = "SIN TITULO" + getNombreLibro() : String + TokensRecognizer: String = null + getNumeroPaginas() : int + TP_ESTADO_COMPLETO: String = "COMPLETO" {readOnly} + getPrecio() : double + TP_ESTADO_PENDIENTE: String = "PENDIENTE" {readOnly} + getQty() : int + userAlreadyExist: boolean = false + getStock() : int + util: Util = null + getTomo() : int + valorEstados: valor_estados = null + getYearEdition() : int + VIEW_LIBROS_CONTENIDOS: String = "view_libros_co... {readOnly} + getYearTranscripcion() : int + Libro() + VIEW_LIBROS_MATERIA_CURSO: String = "view_libros_ma... {readOnly} + VIEW_PRESTAMO: String = "view_prestamo" {readOnly} + Libro(int, String, String, String, String, int, int, int, double, String, int) + VIEW_REPORTE: String = "view_reporte" {readOnly} + setAutor(String) : void + VIEW_TAREAS_PENDIENTES: String = "view_tareas_pe... {readOnly} + setCurso(String) : void + WORK_RECEPCION_LIBROS: String = "RL" {readOnly} + setEditorial(String) : void + WORK_SISTEMA_DIALOGO: String = "SD" {readOnly} + setIdLibro(int) : void + WORK_SLEEP: String = "ND" {readOnly} + setMateria(String) : void + WORK_TAREAS_PENDIENTES: String = "TP" {readOnly} + setNombreLibro(String) : void + YEAR_ACTUAL: int = Integer.parseIn... {readOnly} + setNumeroPaginas(int) : void + YEAR_INICIO_SISTEMA: int = 2011 {readOnly} + setPrecio(double) : void + YEAR_START_COUNT: int = 1990 {readOnly} + setQty(int) : void + setStock(int) : void + AvisoInformativo(String, String, int) : void + setTomo(int) : void + AvisoInformativo(Component, String, String, int) : void + setYearEdition(int) : void + crearFile(String, Vector) : void + setYearTranscripcion(int) : void + Decoder_Frame() : Object javax.swing.JFrame + Decoder_Frame(String) : Object GUI::NewJFrame + Encoder_Frame(Object) : void + Encoder_Frame(Object, String) : void - jMenu1BackupDB: JMenu + getActionlistening() : ActionListeningCrearLibro - jMenuAdmin: JMenu + getConfiguraciion() : Configuracion - jMenuAyuda: JMenu + getConfiguracion() : Configuracion - jMenuBarPrincipal: JMenuBar + getEscucha() : Escucha - jMenuConfiguracion: JMenu + getFrame() : JFrame - jMenuItemAcercaDe: JMenuItem + getFrameconfirma() : Frame_confirmacion - jMenuItemBackup: JMenuItem + getFrameinfolibro() : Frame_infolibro - jMenuItemCrear: JMenuItem + getFrameprestamo() : Frame_prestamo - jMenuItemDelete: JMenuItem +jframe + getFrames_out() : Vector - jMenuItemEliminarLibro: JMenuItem + getFrmeconsulta() : Frame_consulta - jMenuItemGuia: JMenuItem + getGestordialogo() : GestordelDialogo - jMenuItemInventario: JMenuItem + getJframe() : NewJFrame - jMenuItemPresentarReportes: JMenuItem + getJpanelConfiguracion() : JPanel_Configuracion - jMenuItemPropiedaes: JMenuItem + getJpanelCrearLibro() : JPanel_insertLibro - jMenuItemRestaurarDB: JMenuItem + getJpanelInventario() : JPanel_inventario - jMenuReport: JMenu + getJpanelReporte() : JPanel_ReportA - jPanelPrincipal: JPanel + getJpanelUpdateDropLibro() : JPanel_Drop_update_Libro - jSeparator1Administar: JSeparator + getJpanelUpdateLibro() : JPanel_UpdateLibro - jSeparator2: JSeparator + getKey_text_pressed() : String - keyListening: keyListenig = null + getLibro_receptar() : Recepcion_libro + getPropiedadesSysntetizador() : SyntetisadorPropiedades + getJMenu1BackupDB() : JMenu + getRecepcion_libros() : Administrar_RL + getJMenuAdmin() : JMenu + getRecognizer() : Recognizer + getJMenuAyuda() : JMenu + getResultadoLibros() : Vector + getJMenuBarPrincipal() : JMenuBar + getSemantica_generada_automata() : String + getJMenuConfiguracion() : JMenu + getStado() : String + getJMenuItemAcercaDe() : JMenuItem + getTareaPendiente() : TareaPendiente + getJMenuItemBackup() : JMenuItem + getTareas_pendientes() : Administrar_TP + getJMenuItemCrear() : JMenuItem + getTareasPendientes() : Vector + getJMenuItemDelete() : JMenuItem + getUtil() : Util + getJMenuItemEliminarLibro() : JMenuItem + getValorEstados() : valor_estados + getJMenuItemGuia() : JMenuItem + isDominio() : boolean + getJMenuItemInventario() : JMenuItem + isFrase_valida_automata() : boolean + getJMenuItemPresentarReportes() : JMenuItem + isIniciativaConsulta() : boolean + getJMenuItemPropiedaes() : JMenuItem + isListenig_completo() : boolean + getJMenuItemRestaurarDB() : JMenuItem + isListenig_Key() : boolean + getJMenuReport() : JMenu + isPausa() : boolean + getJPanelPrincipal() : JPanel + isUserAlreadyExist() : boolean + getJSeparator1Administar() : JSeparator + rotular(String) : void - initGUI() : void + setActionlistening(ActionListeningCrearLibro) : void - jMenuItemRestaurarDBActionPerformed(ActionEvent) : void + setConfiguraciion(Configuracion) : void + main(String[]) : void + setConfiguracion(Configuracion) : void + NewJFrame() + setDominio(boolean) : void - thisKeyPressed(KeyEvent) : void + setEscucha(Escucha) : void - thisWindowClosed(WindowEvent) : void + setFrame(JFrame) : void + setFrameconfirma(Frame_confirmacion) : void + setFrameinfolibro(Frame_infolibro) : void + setFrameprestamo(Frame_prestamo) : void + setFrames_out(Vector) : void + setFrase_valida_automata(boolean) : void + setFrmeconsulta(Frame_consulta) : void + setGestordialogo(GestordelDialogo) : void + setJframe(NewJFrame) : void + setJpanelConfiguracion(JPanel_Configuracion) : void + setJpanelCrearLibro(JPanel_insertLibro) : void + setJpanelInventario(JPanel_inventario) : void + setJpanelReporte(JPanel_ReportA) : void + setJpanelUpdateDropLibro(JPanel_Drop_update_Libro) : void + setJpanelUpdateLibro(JPanel_UpdateLibro) : void + setKey_text_pressed(String) : void + setLibro_receptar(Recepcion_libro) : void + setListenig_completo(boolean) : void + setListenig_Key(boolean) : void + setPausa(boolean) : void + setPropiedadesSysntetizador(SyntetisadorPropiedades) : void + setRecepcion_libros(Administrar_RL) : void + setRecognizer(Recognizer) : void + setResultadoLibros(Vector) : void + setSemantica_generada_automata(String) : void + setStado(String) : void + setTareaPendiente(TareaPendiente) : void + setTareas_pendientes(Administrar_TP) : void + setTareasPendientes(Vector) : void + setUserAlreadyExist(boolean) : void + setUtil(Util) : void + setValorEstados(valor_estados) : void «property get» + getACCION_ADMINISTRARLIBROS() : int + getLibros_receptar() : Vector + getNivel_del_dialogo() : byte + getNumeroLibros() : Vector + getTokensRecognizer() : String «property set» + setACCION_ADMINISTRARLIBROS(int) : void + setIniciativaConsulta(boolean) : void + setLibros_receptar(Vector) : void + setNivel_del_dialogo(byte) : void + setNumeroLibros(Vector) : void + setTokensRecognizer(String) : void

60. Ilustración: DC Eliminar Libro Braille 214

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.8.4.9. Diagrama de clases para el caso de uso Estadística.

class DIAGRAM DE CLASES ESTADISTICA

ActionListener Control::ActionListeningReporte Name: Elstadística Versión: 1.0 - opd: operacionesDB = null Autor: José Ubertino Jaramillo Zhingre ~ panelGrafico: ChartPanel = null - result: ResultSet = null - SQL: String = ""

+ actionPerformed(ActionEvent) : void - createChart(PieDataset, String) : JFreeChart + getMes(int) : String ~oyente

Utils::serv idor

+ ACCION_ADMINISTRARLIBROS: int = -1 + actionlistening: ActionListeningCrearLibro = null javax.swing.JPanel + AD_LIBROS_INGRESAR: int = 0 -opd + AD_LIBROS_MODIFICAR: int = 1 GUI::JPanel_ReportA + BASE_DATOS: String = "sistemabiblioteca" {readOnly} ~ dataset: DefaultCategoryDataset = new DefaultCate... DB::operacionesDB + CAPITULO_VALOR: String = "SIN CAPITULO" - jButton1Generar: JButton + configuraciion: Configuracion = null - jButtonCancelar: JButton - accion: Statement = null + configuracion: Configuracion = null - jComboBoxMeses: JComboBox ~ clave: int = -1 + DATO_NO_DEFINIFO: String = "no definido" {readOnly} - jComboBoxtDateReporte: JComboBox - conexion: Connection = null + dominio: boolean = false - jComboBoxTipoReporte: JComboBox ~ password: String = null + EQUIPO: String = "administrador" - jComboBoxYears: JComboBox ~ puerto: String = null + EQUIPO_CLIENTE: String = "Cliente" {readOnly} - jLabel1: JLabel - resultado: ResultSet = null + EQUIPO_SERVIDOR: String = "Servidor" {readOnly} - jLabel2: JLabel + tamaño: int = -1 + escucha: Escucha = null - jLabelMes: JLabel ~ usuario: String = null + FILE_NAME_BASE_DATOS_RESTAURE: String = "DB_BRAILLE.sql" {readOnly} - jLabelYear: JLabel + FILE_NAME_CONFIGURACION: String = "Configuracion" {readOnly} - jPanelCenter: JPanel + CargarClave(String) : int + FILE_NAME_GRAMMAR_AUTOR: String = "grammarAutores" {readOnly} + CargarDriver() : boolean - jPanelNorte: JPanel + FILE_NAME_GRAMMAR_COMANDOS: String = "grammarComandos" {readOnly} - jPanelSur: JPanel + ConectarBase(String) : boolean + FILE_NAME_GRAMMAR_CONTENIDO: String = "grammarContenidos" {readOnly} ~ oyente: ActionListeningReporte = new ActionListe... + consultaEspecializada(String, String) : ResultSet + FILE_NAME_GRAMMAR_DIRECCIONES: String = "grammarDirecciones" {readOnly} + consultaEspecializadaCampos(String, String, String) : ResultSet + FILE_NAME_GRAMMAR_MATERIA: String = "grammarMaterias" {readOnly} + addDatos(int, String, String) : void + ConsultaGeneral(String) : ResultSet + FILE_NAME_GRAMMAR_NOMBRE_LIBRO: String = "grammarNombreL... {readOnly} + getJButton1Generar() : JButton + consultaSQLcompleto(String) : ResultSet + FILE_NAME_GRAMMAR_NOMBRES: String = "grammarNombres" {readOnly} + getJButtonCancelar() : JButton + CraerDatabase(String) : int + FILE_NAME_GRAMMAR_NUMEROS: String = "grammarNumeros" {readOnly} + getJComboBoxMeses() : JComboBox + crearTablaHecho(String) : void + frame: JFrame = null + getJComboBoxtDateReporte() : JComboBox + CrearTablaRegla(String) : void + frameconfirma: Frame_confirmacion = null + getJComboBoxTipoReporte() : JComboBox + Desconectar() : void + frameinfolibro: Frame_infolibro = null + getJComboBoxYears() : JComboBox + EliminaRegistro(String, String) : int + frameprestamo: Frame_prestamo = null + ElinaTabla(String) : void + getJLabel1() : JLabel + frames_out: Vector = null + getJLabelMes() : JLabel + ElinraDB(String) : void + frase_valida_automata: boolean = false + getJLabelYear() : JLabel + getPassword() : String + frmeconsulta: Frame_consulta = null + getJPanelCenter() : JPanel + getPuerto() : String + gestordialogo: GestordelDialogo = null + getJPanelNorte() : JPanel + getUsuario() : String + GRAMMAR_ALL_CONTENIDOS: String = "grammars.allCo... {readOnly} + getJPanelSur() : JPanel + ingresarAll(String, String) : int + GRAMMAR_AUTORES: String = "grammars.autores" {readOnly} - initGUI() : void + main(String[]) : void + GRAMMAR_COMANDOS: String = "grammars.comandos" {readOnly} + JPanel_ReportA() - muestraSalidaDeError(InputStream) : void + GRAMMAR_DIRECCIONES: String = "grammars.direccion" {readOnly} + main(String[]) : void + operacionesDB() + GRAMMAR_MATERIAS: String = "grammars.materias" {readOnly} + operacionesDB(String) + GRAMMAR_NOMBRE_LIBROS: String = "grammars.nombr... {readOnly} +jpanelReporte + RespaldarDB(String) : boolean + GRAMMAR_NOMBRES: String = "grammars.nombres" {readOnly} + RestaurarBaseDatos(String) : boolean + GRAMMAR_NUMEROS: String = "grammars.numeros" {readOnly} + setPassword(String) : void + IniciativaConsulta: boolean = true + setPuerto(String) : void + jframe: NewJFrame = null + setUsuario(String) : void + jpanelConfiguracion: JPanel_Configuracion = null + updateEspecializado(String, String) : int + jpanelCrearLibro: JPanel_insertLibro = null + jpanelInventario: JPanel_inventario = null + jpanelReporte: JPanel_ReportA = null + jpanelUpdateDropLibro: JPanel_Drop_update_Libro = null + jpanelUpdateLibro: JPanel_UpdateLibro = null + key_text_pressed: String = null + LIBRO_ESTADO_DADO_BAJA: String = "E" {readOnly} java.io.Serializable + LIBRO_ESTADO_DISPONIBLE: String = "D" {readOnly} + libro_receptar: Recepcion_libro = null Beans::Contenido + Libros_receptar: Vector = null - capitulo: String + listenig_completo: boolean = false java.io.Serializable - id: ContenidoId + listenig_Key: boolean = true Beans::Libro - id_contenido: int = -1 + MAXIMO_NO_ENTENDIDO_RECONOCEDOR: int = 3 {readOnly} - numeroPagina: int = -1 + N_DIAS_MAXIMO_PRESTAMO_LIBRO: int = 30 {readOnly} - autor: String - subtitulo: String + NE_QUIERO_CONSULTAR_AQUI: String = "quiero consult... {readOnly} - curso: String - titulo: String + NE_QUIERO_LLEVAR_CASA: String = "quiero llevar ... {readOnly} - editorial: String + Nivel_del_dialogo: byte = 1 - idLibro: int + Contenido() + NO_TENGO: String = "no tengo" {readOnly} - materia: String + Contenido(String, String, String, int) + NumeroLibros: Vector = null - nombreLibro: String + getCapitulo() : String + pausa: boolean = false - numeroPaginas: int + getId() : ContenidoId + PRESTAMO_ESTADO_LIBRO_ENTREGADO: String = "entregado" {readOnly} - precio: double + getId_contenido() : int + PRESTAMO_ESTADO_LIBRO_RECEPTADO: String = "receptado" {readOnly} - qty: int - stock: int = 0 + getNumeroPagina() : int + PRESTAMO_TIPO_BIBLIOTECA: String = "biblioteca" {readOnly} + getSubtitulo() : String + PRESTAMO_TIPO_CASA: String = "domicilio" {readOnly} - tomo: int + getTitulo() : String + propiedadesSysntetizador: SyntetisadorPropiedades = null - yearEdition: int = 0 + setCapitulo(String) : void + QTY_MAXIMO_LIBROS: int = 10 {readOnly} - yearTranscripcion: int = 0 + setId(ContenidoId) : void + recepcion_libros: Administrar_RL = null + setId_contenido(int) : void + recognizer: Recognizer = null + getAutor() : String + setNumeroPagina(int) : void + resultadoLibros: Vector = null + getCurso() : String + setSubtitulo(String) : void + semantica_generada_automata: String = null + getEditorial() : String + setTitulo(String) : void + stado: String = null + getIdLibro() : int + TABLA_CONTENIDO: String = "contenido" {readOnly} + getMateria() : String + TABLA_CURSO: String = "curso" {readOnly} + getNombreLibro() : String + getNumeroPaginas() : int + TABLA_LIBRO: String = "libro" {readOnly} + TABLA_MATERIA: String = "materia" {readOnly} + getPrecio() : double + TABLA_PERSONA: String = "persona" {readOnly} + getQty() : int + TABLA_PRESTAMO: String = "prestamo" {readOnly} + getStock() : int + TABLA_TAREAS_PENDIENTES: String = "tareas_pendientes" {readOnly} + getTomo() : int + tareaPendiente: TareaPendiente = null + getYearEdition() : int + tareas_pendientes: Administrar_TP = null + getYearTranscripcion() : int + tareasPendientes: Vector = null + Libro() + TITULO_VALOR: String = "SIN TITULO" + Libro(int, String, String, String, String, int, int, int, double, String, int) + TokensRecognizer: String = null + setAutor(String) : void + TP_ESTADO_COMPLETO: String = "COMPLETO" {readOnly} + setCurso(String) : void + TP_ESTADO_PENDIENTE: String = "PENDIENTE" {readOnly} + setEditorial(String) : void + userAlreadyExist: boolean = false + setIdLibro(int) : void + util: Util = null + setMateria(String) : void + valorEstados: valor_estados = null + setNombreLibro(String) : void + VIEW_LIBROS_CONTENIDOS: String = "view_libros_co... {readOnly} + setNumeroPaginas(int) : void + setPrecio(double) : void + VIEW_LIBROS_MATERIA_CURSO: String = "view_libros_ma... {readOnly} + VIEW_PRESTAMO: String = "view_prestamo" {readOnly} + setQty(int) : void + VIEW_REPORTE: String = "view_reporte" {readOnly} + setStock(int) : void + VIEW_TAREAS_PENDIENTES: String = "view_tareas_pe... {readOnly} + setTomo(int) : void + WORK_RECEPCION_LIBROS: String = "RL" {readOnly} + setYearEdition(int) : void + WORK_SISTEMA_DIALOGO: String = "SD" {readOnly} + setYearTranscripcion(int) : void + WORK_SLEEP: String = "ND" {readOnly} + WORK_TAREAS_PENDIENTES: String = "TP" {readOnly} + YEAR_ACTUAL: int = Integer.parseIn... {readOnly} + YEAR_INICIO_SISTEMA: int = 2011 {readOnly} + YEAR_START_COUNT: int = 1990 {readOnly}

+ AvisoInformativo(String, String, int) : void + AvisoInformativo(Component, String, String, int) : void + crearFile(String, Vector) : void + Decoder_Frame() : Object + Decoder_Frame(String) : Object + Encoder_Frame(Object) : void + Encoder_Frame(Object, String) : void + getActionlistening() : ActionListeningCrearLibro + getConfiguraciion() : Configuracion + getConfiguracion() : Configuracion + getEscucha() : Escucha + getFrame() : JFrame javax.swing.JFrame + getFrameconfirma() : Frame_confirmacion GUI::NewJFrame + getFrameinfolibro() : Frame_infolibro + getFrameprestamo() : Frame_prestamo - jMenu1BackupDB: JMenu + getFrames_out() : Vector - jMenuAdmin: JMenu + getFrmeconsulta() : Frame_consulta - jMenuAyuda: JMenu + getGestordialogo() : GestordelDialogo - jMenuBarPrincipal: JMenuBar + getJframe() : NewJFrame - jMenuConfiguracion: JMenu + getJpanelConfiguracion() : JPanel_Configuracion - jMenuItemAcercaDe: JMenuItem + getJpanelCrearLibro() : JPanel_insertLibro - jMenuItemBackup: JMenuItem + getJpanelInventario() : JPanel_inventario - jMenuItemCrear: JMenuItem + getJpanelReporte() : JPanel_ReportA - jMenuItemDelete: JMenuItem + getJpanelUpdateDropLibro() : JPanel_Drop_update_Libro +jframe - jMenuItemEliminarLibro: JMenuItem + getJpanelUpdateLibro() : JPanel_UpdateLibro - jMenuItemGuia: JMenuItem + getKey_text_pressed() : String - jMenuItemInventario: JMenuItem + getLibro_receptar() : Recepcion_libro - jMenuItemPresentarReportes: JMenuItem + getPropiedadesSysntetizador() : SyntetisadorPropiedades - jMenuItemPropiedaes: JMenuItem + getRecepcion_libros() : Administrar_RL - jMenuItemRestaurarDB: JMenuItem + getRecognizer() : Recognizer - jMenuReport: JMenu + getResultadoLibros() : Vector - jPanelPrincipal: JPanel + getSemantica_generada_automata() : String - jSeparator1Administar: JSeparator + getStado() : String - jSeparator2: JSeparator + getTareaPendiente() : TareaPendiente - keyListening: keyListenig = null + getTareas_pendientes() : Administrar_TP + getTareasPendientes() : Vector + getJMenu1BackupDB() : JMenu + getUtil() : Util + getJMenuAdmin() : JMenu + getValorEstados() : valor_estados + getJMenuAyuda() : JMenu + isDominio() : boolean + getJMenuBarPrincipal() : JMenuBar + isFrase_valida_automata() : boolean + getJMenuConfiguracion() : JMenu + isIniciativaConsulta() : boolean + getJMenuItemAcercaDe() : JMenuItem + isListenig_completo() : boolean + getJMenuItemBackup() : JMenuItem + isListenig_Key() : boolean + getJMenuItemCrear() : JMenuItem + isPausa() : boolean + getJMenuItemDelete() : JMenuItem + isUserAlreadyExist() : boolean + getJMenuItemEliminarLibro() : JMenuItem + rotular(String) : void + getJMenuItemGuia() : JMenuItem + setActionlistening(ActionListeningCrearLibro) : void + getJMenuItemInventario() : JMenuItem + setConfiguraciion(Configuracion) : void + getJMenuItemPresentarReportes() : JMenuItem + setConfiguracion(Configuracion) : void + getJMenuItemPropiedaes() : JMenuItem + setDominio(boolean) : void + getJMenuItemRestaurarDB() : JMenuItem + setEscucha(Escucha) : void + getJMenuReport() : JMenu + setFrame(JFrame) : void + getJPanelPrincipal() : JPanel + setFrameconfirma(Frame_confirmacion) : void + getJSeparator1Administar() : JSeparator + setFrameinfolibro(Frame_infolibro) : void - initGUI() : void + setFrameprestamo(Frame_prestamo) : void - jMenuItemRestaurarDBActionPerformed(ActionEvent) : void + setFrames_out(Vector) : void + main(String[]) : void + setFrase_valida_automata(boolean) : void + NewJFrame() + setFrmeconsulta(Frame_consulta) : void - thisKeyPressed(KeyEvent) : void + setGestordialogo(GestordelDialogo) : void - thisWindowClosed(WindowEvent) : void + setJframe(NewJFrame) : void + setJpanelConfiguracion(JPanel_Configuracion) : void + setJpanelCrearLibro(JPanel_insertLibro) : void + setJpanelInventario(JPanel_inventario) : void + setJpanelReporte(JPanel_ReportA) : void + setJpanelUpdateDropLibro(JPanel_Drop_update_Libro) : void + setJpanelUpdateLibro(JPanel_UpdateLibro) : void + setKey_text_pressed(String) : void + setLibro_receptar(Recepcion_libro) : void + setListenig_completo(boolean) : void + setListenig_Key(boolean) : void + setPausa(boolean) : void + setPropiedadesSysntetizador(SyntetisadorPropiedades) : void + setRecepcion_libros(Administrar_RL) : void + setRecognizer(Recognizer) : void + setResultadoLibros(Vector) : void + setSemantica_generada_automata(String) : void + setStado(String) : void + setTareaPendiente(TareaPendiente) : void + setTareas_pendientes(Administrar_TP) : void + setTareasPendientes(Vector) : void + setUserAlreadyExist(boolean) : void + setUtil(Util) : void + setValorEstados(valor_estados) : void «property get» + getACCION_ADMINISTRARLIBROS() : int + getLibros_receptar() : Vector + getNivel_del_dialogo() : byte + getNumeroLibros() : Vector + getTokensRecognizer() : String «property set» + setACCION_ADMINISTRARLIBROS(int) : void + setIniciativaConsulta(boolean) : void + setLibros_receptar(Vector) : void + setNivel_del_dialogo(byte) : void + setNumeroLibros(Vector) : void + setTokensRecognizer(String) : void

61. Ilustración: DC Estadística 215

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.8.4.10. Diagrama de clases para el caso de uso Imprimir Estadística.

class DIAGRAM DE CLASES IMPRIMIR ESTADISTICA

Name: Imprimir Elstadística javax.swing.JPanel Versión: 1.0 GUI::JPanel_ReportA Autor: José Ubertino Jaramillo Zhingre ~ dataset: DefaultCategoryDataset = new DefaultCate... - jButton1Generar: JButton - jButtonCancelar: JButton - jComboBoxMeses: JComboBox - jComboBoxtDateReporte: JComboBox - jComboBoxTipoReporte: JComboBox - jComboBoxYears: JComboBox - jLabel1: JLabel - jLabel2: JLabel - jLabelMes: JLabel - jLabelYear: JLabel Utils::serv idor - jPanelCenter: JPanel - jPanelNorte: JPanel + ACCION_ADMINISTRARLIBROS: int = -1 - jPanelSur: JPanel + actionlistening: ActionListeningCrearLibro = null ~ oyente: ActionListeningReporte = new ActionListe... + AD_LIBROS_INGRESAR: int = 0 + AD_LIBROS_MODIFICAR: int = 1 + addDatos(int, String, String) : void + BASE_DATOS: String = "sistemabiblioteca" {readOnly} + getJButton1Generar() : JButton + CAPITULO_VALOR: String = "SIN CAPITULO" + getJButtonCancelar() : JButton + configuraciion: Configuracion = null + getJComboBoxMeses() : JComboBox + configuracion: Configuracion = null + getJComboBoxtDateReporte() : JComboBox + DATO_NO_DEFINIFO: String = "no definido" {readOnly} + getJComboBoxTipoReporte() : JComboBox + dominio: boolean = false + getJComboBoxYears() : JComboBox + EQUIPO: String = "administrador" + getJLabel1() : JLabel + EQUIPO_CLIENTE: String = "Cliente" {readOnly} + getJLabelMes() : JLabel + EQUIPO_SERVIDOR: String = "Servidor" {readOnly} + getJLabelYear() : JLabel + escucha: Escucha = null + getJPanelCenter() : JPanel + FILE_NAME_BASE_DATOS_RESTAURE: String = "DB_BRAILLE.sql" {readOnly} + getJPanelNorte() : JPanel + FILE_NAME_CONFIGURACION: String = "Configuracion" {readOnly} + getJPanelSur() : JPanel + FILE_NAME_GRAMMAR_AUTOR: String = "grammarAutores" {readOnly} - initGUI() : void + FILE_NAME_GRAMMAR_COMANDOS: String = "grammarComandos" {readOnly} + JPanel_ReportA() + FILE_NAME_GRAMMAR_CONTENIDO: String = "grammarContenidos" {readOnly} + main(String[]) : void + FILE_NAME_GRAMMAR_DIRECCIONES: String = "grammarDirecciones" {readOnly} +jpanelReporte + FILE_NAME_GRAMMAR_MATERIA: String = "grammarMaterias" {readOnly} + FILE_NAME_GRAMMAR_NOMBRE_LIBRO: String = "grammarNombreL... {readOnly} + FILE_NAME_GRAMMAR_NOMBRES: String = "grammarNombres" {readOnly} + FILE_NAME_GRAMMAR_NUMEROS: String = "grammarNumeros" {readOnly} + frame: JFrame = null + frameconfirma: Frame_confirmacion = null + frameinfolibro: Frame_infolibro = null + frameprestamo: Frame_prestamo = null + frames_out: Vector = null + frase_valida_automata: boolean = false + frmeconsulta: Frame_consulta = null + gestordialogo: GestordelDialogo = null + GRAMMAR_ALL_CONTENIDOS: String = "grammars.allCo... {readOnly} + GRAMMAR_AUTORES: String = "grammars.autores" {readOnly} + GRAMMAR_COMANDOS: String = "grammars.comandos" {readOnly} + GRAMMAR_DIRECCIONES: String = "grammars.direccion" {readOnly} + GRAMMAR_MATERIAS: String = "grammars.materias" {readOnly} + GRAMMAR_NOMBRE_LIBROS: String = "grammars.nombr... {readOnly} + GRAMMAR_NOMBRES: String = "grammars.nombres" {readOnly} + GRAMMAR_NUMEROS: String = "grammars.numeros" {readOnly} ~oyente + IniciativaConsulta: boolean = true ActionListener + jframe: NewJFrame = null + jpanelConfiguracion: JPanel_Configuracion = null Control::ActionListeningReporte + jpanelCrearLibro: JPanel_insertLibro = null - opd: operacionesDB = null + jpanelInventario: JPanel_inventario = null ~ panelGrafico: ChartPanel = null + jpanelReporte: JPanel_ReportA = null - result: ResultSet = null + jpanelUpdateDropLibro: JPanel_Drop_update_Libro = null - SQL: String = "" + jpanelUpdateLibro: JPanel_UpdateLibro = null + key_text_pressed: String = null + actionPerformed(ActionEvent) : void + LIBRO_ESTADO_DADO_BAJA: String = "E" {readOnly} - createChart(PieDataset, String) : JFreeChart + LIBRO_ESTADO_DISPONIBLE: String = "D" {readOnly} + getMes(int) : String + libro_receptar: Recepcion_libro = null + Libros_receptar: Vector = null + listenig_completo: boolean = false + listenig_Key: boolean = true + MAXIMO_NO_ENTENDIDO_RECONOCEDOR: int = 3 {readOnly} -opd + N_DIAS_MAXIMO_PRESTAMO_LIBRO: int = 30 {readOnly} + NE_QUIERO_CONSULTAR_AQUI: String = "quiero consult... {readOnly} DB::operacionesDB + NE_QUIERO_LLEVAR_CASA: String = "quiero llevar ... {readOnly} + Nivel_del_dialogo: byte = 1 - accion: Statement = null + NO_TENGO: String = "no tengo" {readOnly} ~ clave: int = -1 + NumeroLibros: Vector = null - conexion: Connection = null + pausa: boolean = false ~ password: String = null + PRESTAMO_ESTADO_LIBRO_ENTREGADO: String = "entregado" {readOnly} ~ puerto: String = null + PRESTAMO_ESTADO_LIBRO_RECEPTADO: String = "receptado" {readOnly} - resultado: ResultSet = null + PRESTAMO_TIPO_BIBLIOTECA: String = "biblioteca" {readOnly} + tamaño: int = -1 + PRESTAMO_TIPO_CASA: String = "domicilio" {readOnly} ~ usuario: String = null + propiedadesSysntetizador: SyntetisadorPropiedades = null + QTY_MAXIMO_LIBROS: int = 10 {readOnly} + CargarClave(String) : int + recepcion_libros: Administrar_RL = null + CargarDriver() : boolean + recognizer: Recognizer = null + ConectarBase(String) : boolean + resultadoLibros: Vector = null + consultaEspecializada(String, String) : ResultSet + semantica_generada_automata: String = null + consultaEspecializadaCampos(String, String, String) : ResultSet + stado: String = null + ConsultaGeneral(String) : ResultSet + TABLA_CONTENIDO: String = "contenido" {readOnly} + consultaSQLcompleto(String) : ResultSet + TABLA_CURSO: String = "curso" {readOnly} + CraerDatabase(String) : int + TABLA_LIBRO: String = "libro" {readOnly} + crearTablaHecho(String) : void + TABLA_MATERIA: String = "materia" {readOnly} + CrearTablaRegla(String) : void + TABLA_PERSONA: String = "persona" {readOnly} + Desconectar() : void + TABLA_PRESTAMO: String = "prestamo" {readOnly} + EliminaRegistro(String, String) : int + TABLA_TAREAS_PENDIENTES: String = "tareas_pendientes" {readOnly} + ElinaTabla(String) : void + tareaPendiente: TareaPendiente = null + ElinraDB(String) : void + tareas_pendientes: Administrar_TP = null + getPassword() : String + tareasPendientes: Vector = null + getPuerto() : String + TITULO_VALOR: String = "SIN TITULO" + getUsuario() : String + TokensRecognizer: String = null + ingresarAll(String, String) : int + TP_ESTADO_COMPLETO: String = "COMPLETO" {readOnly} + main(String[]) : void + TP_ESTADO_PENDIENTE: String = "PENDIENTE" {readOnly} - muestraSalidaDeError(InputStream) : void + userAlreadyExist: boolean = false + operacionesDB() + util: Util = null + operacionesDB(String) + valorEstados: valor_estados = null + RespaldarDB(String) : boolean + VIEW_LIBROS_CONTENIDOS: String = "view_libros_co... {readOnly} + RestaurarBaseDatos(String) : boolean + VIEW_LIBROS_MATERIA_CURSO: String = "view_libros_ma... {readOnly} + setPassword(String) : void + VIEW_PRESTAMO: String = "view_prestamo" {readOnly} + setPuerto(String) : void + VIEW_REPORTE: String = "view_reporte" {readOnly} + setUsuario(String) : void + VIEW_TAREAS_PENDIENTES: String = "view_tareas_pe... {readOnly} + updateEspecializado(String, String) : int + WORK_RECEPCION_LIBROS: String = "RL" {readOnly} + WORK_SISTEMA_DIALOGO: String = "SD" {readOnly} + WORK_SLEEP: String = "ND" {readOnly} + WORK_TAREAS_PENDIENTES: String = "TP" {readOnly} + YEAR_ACTUAL: int = Integer.parseIn... {readOnly} + YEAR_INICIO_SISTEMA: int = 2011 {readOnly} + YEAR_START_COUNT: int = 1990 {readOnly}

+ AvisoInformativo(String, String, int) : void + AvisoInformativo(Component, String, String, int) : void javax.swing.JFrame + crearFile(String, Vector) : void GUI::NewJFrame + Decoder_Frame() : Object + Decoder_Frame(String) : Object - jMenu1BackupDB: JMenu + Encoder_Frame(Object) : void - jMenuAdmin: JMenu + Encoder_Frame(Object, String) : void - jMenuAyuda: JMenu + getActionlistening() : ActionListeningCrearLibro - jMenuBarPrincipal: JMenuBar + getConfiguraciion() : Configuracion - jMenuConfiguracion: JMenu - jMenuItemAcercaDe: JMenuItem + getConfiguracion() : Configuracion + getEscucha() : Escucha - jMenuItemBackup: JMenuItem + getFrame() : JFrame - jMenuItemCrear: JMenuItem + getFrameconfirma() : Frame_confirmacion - jMenuItemDelete: JMenuItem + getFrameinfolibro() : Frame_infolibro - jMenuItemEliminarLibro: JMenuItem + getFrameprestamo() : Frame_prestamo +jframe - jMenuItemGuia: JMenuItem + getFrames_out() : Vector - jMenuItemInventario: JMenuItem + getFrmeconsulta() : Frame_consulta - jMenuItemPresentarReportes: JMenuItem + getGestordialogo() : GestordelDialogo - jMenuItemPropiedaes: JMenuItem + getJframe() : NewJFrame - jMenuItemRestaurarDB: JMenuItem + getJpanelConfiguracion() : JPanel_Configuracion - jMenuReport: JMenu - jPanelPrincipal: JPanel + getJpanelCrearLibro() : JPanel_insertLibro + getJpanelInventario() : JPanel_inventario - jSeparator1Administar: JSeparator + getJpanelReporte() : JPanel_ReportA - jSeparator2: JSeparator + getJpanelUpdateDropLibro() : JPanel_Drop_update_Libro - keyListening: keyListenig = null + getJpanelUpdateLibro() : JPanel_UpdateLibro + getKey_text_pressed() : String + getJMenu1BackupDB() : JMenu + getLibro_receptar() : Recepcion_libro + getJMenuAdmin() : JMenu + getPropiedadesSysntetizador() : SyntetisadorPropiedades + getJMenuAyuda() : JMenu + getRecepcion_libros() : Administrar_RL + getJMenuBarPrincipal() : JMenuBar + getRecognizer() : Recognizer + getJMenuConfiguracion() : JMenu + getResultadoLibros() : Vector + getJMenuItemAcercaDe() : JMenuItem + getJMenuItemBackup() : JMenuItem + getSemantica_generada_automata() : String + getStado() : String + getJMenuItemCrear() : JMenuItem + getTareaPendiente() : TareaPendiente + getJMenuItemDelete() : JMenuItem + getTareas_pendientes() : Administrar_TP + getJMenuItemEliminarLibro() : JMenuItem + getTareasPendientes() : Vector + getJMenuItemGuia() : JMenuItem + getUtil() : Util + getJMenuItemInventario() : JMenuItem + getValorEstados() : valor_estados + getJMenuItemPresentarReportes() : JMenuItem + isDominio() : boolean + getJMenuItemPropiedaes() : JMenuItem + isFrase_valida_automata() : boolean + getJMenuItemRestaurarDB() : JMenuItem + isIniciativaConsulta() : boolean + getJMenuReport() : JMenu + isListenig_completo() : boolean + getJPanelPrincipal() : JPanel + getJSeparator1Administar() : JSeparator + isListenig_Key() : boolean + isPausa() : boolean - initGUI() : void + isUserAlreadyExist() : boolean - jMenuItemRestaurarDBActionPerformed(ActionEvent) : void + rotular(String) : void + main(String[]) : void + setActionlistening(ActionListeningCrearLibro) : void + NewJFrame() + setConfiguraciion(Configuracion) : void - thisKeyPressed(KeyEvent) : void + setConfiguracion(Configuracion) : void - thisWindowClosed(WindowEvent) : void + setDominio(boolean) : void + setEscucha(Escucha) : void + setFrame(JFrame) : void + setFrameconfirma(Frame_confirmacion) : void + setFrameinfolibro(Frame_infolibro) : void + setFrameprestamo(Frame_prestamo) : void + setFrames_out(Vector) : void + setFrase_valida_automata(boolean) : void + setFrmeconsulta(Frame_consulta) : void + setGestordialogo(GestordelDialogo) : void + setJframe(NewJFrame) : void + setJpanelConfiguracion(JPanel_Configuracion) : void + setJpanelCrearLibro(JPanel_insertLibro) : void + setJpanelInventario(JPanel_inventario) : void + setJpanelReporte(JPanel_ReportA) : void + setJpanelUpdateDropLibro(JPanel_Drop_update_Libro) : void + setJpanelUpdateLibro(JPanel_UpdateLibro) : void + setKey_text_pressed(String) : void + setLibro_receptar(Recepcion_libro) : void + setListenig_completo(boolean) : void + setListenig_Key(boolean) : void + setPausa(boolean) : void + setPropiedadesSysntetizador(SyntetisadorPropiedades) : void + setRecepcion_libros(Administrar_RL) : void + setRecognizer(Recognizer) : void + setResultadoLibros(Vector) : void + setSemantica_generada_automata(String) : void + setStado(String) : void + setTareaPendiente(TareaPendiente) : void + setTareas_pendientes(Administrar_TP) : void + setTareasPendientes(Vector) : void + setUserAlreadyExist(boolean) : void + setUtil(Util) : void + setValorEstados(valor_estados) : void «property get» + getACCION_ADMINISTRARLIBROS() : int + getLibros_receptar() : Vector + getNivel_del_dialogo() : byte + getNumeroLibros() : Vector + getTokensRecognizer() : String «property set» + setACCION_ADMINISTRARLIBROS(int) : void + setIniciativaConsulta(boolean) : void + setLibros_receptar(Vector) : void + setNivel_del_dialogo(byte) : void + setNumeroLibros(Vector) : void + setTokensRecognizer(String) : void

62. Ilustración: DC Imprimir Estadística 216

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.8.4.11. Diagrama de clases para el caso de uso Inventario de Libros Braille.

class DIAGRAM DE CLASES INVENTARIO DE LIBROS BRAILLE

java.io.Serializable Beans::Libro Name: Inventario de Libros Braille Versión: 1.0 - autor: String Autor: José Ubertino Jaramillo Zhingre - curso: String - editorial: String ActionListener - idLibro: int - materia: String Control::ActionListeningInv entarioBook - nombreLibro: String - idlibro: int = -1 - numeroPaginas: int - libros: LinkedList = null - precio: double - libroSelected: Libro = null - qty: int - opd: operacionesDB = null - stock: int = 0 - result: ResultSet = null - tomo: int Utils::serv idor - SQL: String = "" - yearEdition: int = 0 - yearTranscripcion: int = 0 + ACCION_ADMINISTRARLIBROS: int = -1 + actionPerformed(ActionEvent) : void + actionlistening: ActionListeningCrearLibro = null - printTable() : void + getAutor() : String + AD_LIBROS_INGRESAR: int = 0 + ValidarDatos(int) : boolean -libroSelected + getCurso() : String + AD_LIBROS_MODIFICAR: int = 1 + getEditorial() : String + BASE_DATOS: String = "sistemabiblioteca" {readOnly} ~oyente + getIdLibro() : int + CAPITULO_VALOR: String = "SIN CAPITULO" + getMateria() : String + configuraciion: Configuracion = null + getNombreLibro() : String + configuracion: Configuracion = null + getNumeroPaginas() : int + DATO_NO_DEFINIFO: String = "no definido" {readOnly} + getPrecio() : double + dominio: boolean = false + getQty() : int + EQUIPO: String = "administrador" + getStock() : int + EQUIPO_CLIENTE: String = "Cliente" {readOnly} + getTomo() : int + EQUIPO_SERVIDOR: String = "Servidor" {readOnly} + getYearEdition() : int + escucha: Escucha = null + getYearTranscripcion() : int + FILE_NAME_BASE_DATOS_RESTAURE: String = "DB_BRAILLE.sql" {readOnly} + Libro() + FILE_NAME_CONFIGURACION: String = "Configuracion" {readOnly} + Libro(int, String, String, String, String, int, int, int, double, String, int) + FILE_NAME_GRAMMAR_AUTOR: String = "grammarAutores" {readOnly} + setAutor(String) : void + FILE_NAME_GRAMMAR_COMANDOS: String = "grammarComandos" {readOnly} + setCurso(String) : void + FILE_NAME_GRAMMAR_CONTENIDO: String = "grammarContenidos" {readOnly} + setEditorial(String) : void + FILE_NAME_GRAMMAR_DIRECCIONES: String = "grammarDirecciones" {readOnly} + setIdLibro(int) : void + FILE_NAME_GRAMMAR_MATERIA: String = "grammarMaterias" {readOnly} + setMateria(String) : void + FILE_NAME_GRAMMAR_NOMBRE_LIBRO: String = "grammarNombreL... {readOnly} + setNombreLibro(String) : void + FILE_NAME_GRAMMAR_NOMBRES: String = "grammarNombres" {readOnly} + setNumeroPaginas(int) : void + FILE_NAME_GRAMMAR_NUMEROS: String = "grammarNumeros" {readOnly} + setPrecio(double) : void + frame: JFrame = null + setQty(int) : void + frameconfirma: Frame_confirmacion = null + setStock(int) : void + frameinfolibro: Frame_infolibro = null javax.swing.JPanel + setTomo(int) : void + frameprestamo: Frame_prestamo = null GUI::JPanel_inv entario + setYearEdition(int) : void + frames_out: Vector = null + setYearTranscripcion(int) : void + frase_valida_automata: boolean = false + controlLibro: ControlTablaInventarioLibro = new ControlTabl... + frmeconsulta: Frame_consulta = null - jButtonBuscar: JButton + gestordialogo: GestordelDialogo = null - jButtonCancelar: JButton + GRAMMAR_ALL_CONTENIDOS: String = "grammars.allCo... {readOnly} - jButtonImprimir: JButton + GRAMMAR_AUTORES: String = "grammars.autores" {readOnly} - jComboBoxTipoBusqueda: JComboBox + GRAMMAR_COMANDOS: String = "grammars.comandos" {readOnly} - jLabel1: JLabel DB::operacionesDB + GRAMMAR_DIRECCIONES: String = "grammars.direccion" {readOnly} - jPanelCenter: JPanel + GRAMMAR_MATERIAS: String = "grammars.materias" {readOnly} - jPanelCentroTabla: JPanel -opd - accion: Statement = null + GRAMMAR_NOMBRE_LIBROS: String = "grammars.nombr... {readOnly} - jPanelNort1: JPanel ~ clave: int = -1 + GRAMMAR_NOMBRES: String = "grammars.nombres" {readOnly} - jPanelNorte: JPanel - conexion: Connection = null + GRAMMAR_NUMEROS: String = "grammars.numeros" {readOnly} - jPanelSur: JPanel ~ password: String = null + IniciativaConsulta: boolean = true - jScrollPaneTabla: JScrollPane ~ puerto: String = null + jframe: NewJFrame = null - jTableInventario: JTable - resultado: ResultSet = null + jpanelConfiguracion: JPanel_Configuracion = null - jTextFieldDatoBusqueda: JTextField + tamaño: int = -1 + jpanelCrearLibro: JPanel_insertLibro = null + modelo: ModeloTablaInventarioLibro = new ModeloTabla... ~ usuario: String = null + jpanelInventario: JPanel_inventario = null ~ oyente: ActionListeningInventarioBook = new ActionListe... + jpanelReporte: JPanel_ReportA = null + CargarClave(String) : int + jpanelUpdateDropLibro: JPanel_Drop_update_Libro = null + getJButtonBuscar() : JButton + CargarDriver() : boolean + jpanelUpdateLibro: JPanel_UpdateLibro = null + getJButtonCancelar() : JButton + ConectarBase(String) : boolean + key_text_pressed: String = null + getJButtonImprimir() : JButton + consultaEspecializada(String, String) : ResultSet + LIBRO_ESTADO_DADO_BAJA: String = "E" {readOnly} + getJComboBoxTipoBusqueda() : JComboBox + consultaEspecializadaCampos(String, String, String) : ResultSet + LIBRO_ESTADO_DISPONIBLE: String = "D" {readOnly} + getJPanelCenter() : JPanel + ConsultaGeneral(String) : ResultSet + libro_receptar: Recepcion_libro = null + getJPanelCentroTabla() : JPanel + consultaSQLcompleto(String) : ResultSet + Libros_receptar: Vector = null + getJPanelNort1() : JPanel + CraerDatabase(String) : int + listenig_completo: boolean = false + getJPanelNorte() : JPanel + crearTablaHecho(String) : void + listenig_Key: boolean = true + getJPanelSur() : JPanel + CrearTablaRegla(String) : void + MAXIMO_NO_ENTENDIDO_RECONOCEDOR: int = 3 {readOnly} + getJScrollPaneTabla() : JScrollPane + Desconectar() : void + N_DIAS_MAXIMO_PRESTAMO_LIBRO: int = 30 {readOnly} + getJTableInventario() : JTable + EliminaRegistro(String, String) : int + NE_QUIERO_CONSULTAR_AQUI: String = "quiero consult... {readOnly} + getJTextFieldDatoBusqueda() : JTextField + ElinaTabla(String) : void + NE_QUIERO_LLEVAR_CASA: String = "quiero llevar ... {readOnly} - initGUI() : void + ElinraDB(String) : void + Nivel_del_dialogo: byte = 1 + JPanel_inventario() + getPassword() : String + NO_TENGO: String = "no tengo" {readOnly} + main(String[]) : void + getPuerto() : String + NumeroLibros: Vector = null + getUsuario() : String + pausa: boolean = false +jpanelInventario + ingresarAll(String, String) : int + PRESTAMO_ESTADO_LIBRO_ENTREGADO: String = "entregado" {readOnly} + main(String[]) : void + PRESTAMO_ESTADO_LIBRO_RECEPTADO: String = "receptado" {readOnly} - muestraSalidaDeError(InputStream) : void + PRESTAMO_TIPO_BIBLIOTECA: String = "biblioteca" {readOnly} + operacionesDB() + PRESTAMO_TIPO_CASA: String = "domicilio" {readOnly} + operacionesDB(String) + propiedadesSysntetizador: SyntetisadorPropiedades = null + RespaldarDB(String) : boolean + QTY_MAXIMO_LIBROS: int = 10 {readOnly} + RestaurarBaseDatos(String) : boolean + recepcion_libros: Administrar_RL = null + setPassword(String) : void + recognizer: Recognizer = null + setPuerto(String) : void + resultadoLibros: Vector = null + setUsuario(String) : void + semantica_generada_automata: String = null + updateEspecializado(String, String) : int + stado: String = null + TABLA_CONTENIDO: String = "contenido" {readOnly} + TABLA_CURSO: String = "curso" {readOnly} +modelo + TABLA_LIBRO: String = "libro" {readOnly} + TABLA_MATERIA: String = "materia" {readOnly} TableModel + TABLA_PERSONA: String = "persona" {readOnly} Utilidades::ModeloTablaInv entarioLibro + TABLA_PRESTAMO: String = "prestamo" {readOnly} + TABLA_TAREAS_PENDIENTES: String = "tareas_pendientes" {readOnly} - datos: LinkedList = new LinkedList() + tareaPendiente: TareaPendiente = null - listeners: LinkedList = new LinkedList() + tareas_pendientes: Administrar_TP = null +controlLibro + tareasPendientes: Vector = null + addLibros(LinkedList) : void + TITULO_VALOR: String = "SIN TITULO" + addTableModelListener(TableModelListener) : void Utilidades::ControlTablaInv entarioLibro + TokensRecognizer: String = null + anhadeLibro(Libro) : void + TP_ESTADO_COMPLETO: String = "COMPLETO" {readOnly} - avisaSuscriptores(TableModelEvent) : void - modelo: ModeloTablaInventarioLibro = null -modelo + TP_ESTADO_PENDIENTE: String = "PENDIENTE" {readOnly} + borraLibro(int) : void - numero: int = 0 + userAlreadyExist: boolean = false + encerarAllTable() : void + util: Util = null + getColumnClass(int) : Class + addLibros(LinkedList) : void + valorEstados: valor_estados = null + getColumnCount() : int + anhadeFila() : void + VIEW_LIBROS_CONTENIDOS: String = "view_libros_co... {readOnly} + getColumnName(int) : String + anhadeFila(Libro) : void + VIEW_LIBROS_MATERIA_CURSO: String = "view_libros_ma... {readOnly} + getContenidos() : LinkedList + borraFila() : void + VIEW_PRESTAMO: String = "view_prestamo" {readOnly} + getRowCount() : int + ControlTablaInventarioLibro(ModeloTablaInventarioLibro) + VIEW_REPORTE: String = "view_reporte" {readOnly} + getValueAt(int, int) : Object + VIEW_TAREAS_PENDIENTES: String = "view_tareas_pe... {readOnly} + isCellEditable(int, int) : boolean + WORK_RECEPCION_LIBROS: String = "RL" {readOnly} + removeTableModelListener(TableModelListener) : void + WORK_SISTEMA_DIALOGO: String = "SD" {readOnly} + setValueAt(Object, int, int) : void + WORK_SLEEP: String = "ND" {readOnly} + WORK_TAREAS_PENDIENTES: String = "TP" {readOnly} + YEAR_ACTUAL: int = Integer.parseIn... {readOnly} + YEAR_INICIO_SISTEMA: int = 2011 {readOnly} + YEAR_START_COUNT: int = 1990 {readOnly}

+ AvisoInformativo(String, String, int) : void + AvisoInformativo(Component, String, String, int) : void + crearFile(String, Vector) : void + Decoder_Frame() : Object + Decoder_Frame(String) : Object + Encoder_Frame(Object) : void + Encoder_Frame(Object, String) : void javax.swing.JFrame + getActionlistening() : ActionListeningCrearLibro GUI::NewJFrame + getConfiguraciion() : Configuracion + getConfiguracion() : Configuracion - jMenu1BackupDB: JMenu + getEscucha() : Escucha - jMenuAdmin: JMenu + getFrame() : JFrame - jMenuAyuda: JMenu + getFrameconfirma() : Frame_confirmacion - jMenuBarPrincipal: JMenuBar + getFrameinfolibro() : Frame_infolibro - jMenuConfiguracion: JMenu + getFrameprestamo() : Frame_prestamo - jMenuItemAcercaDe: JMenuItem + getFrames_out() : Vector - jMenuItemBackup: JMenuItem + getFrmeconsulta() : Frame_consulta - jMenuItemCrear: JMenuItem + getGestordialogo() : GestordelDialogo - jMenuItemDelete: JMenuItem + getJframe() : NewJFrame - jMenuItemEliminarLibro: JMenuItem + getJpanelConfiguracion() : JPanel_Configuracion +jframe - jMenuItemGuia: JMenuItem + getJpanelCrearLibro() : JPanel_insertLibro - jMenuItemInventario: JMenuItem + getJpanelInventario() : JPanel_inventario - jMenuItemPresentarReportes: JMenuItem + getJpanelReporte() : JPanel_ReportA - jMenuItemPropiedaes: JMenuItem + getJpanelUpdateDropLibro() : JPanel_Drop_update_Libro - jMenuItemRestaurarDB: JMenuItem + getJpanelUpdateLibro() : JPanel_UpdateLibro - jMenuReport: JMenu + getKey_text_pressed() : String - jPanelPrincipal: JPanel + getLibro_receptar() : Recepcion_libro - jSeparator1Administar: JSeparator + getPropiedadesSysntetizador() : SyntetisadorPropiedades - jSeparator2: JSeparator + getRecepcion_libros() : Administrar_RL - keyListening: keyListenig = null + getRecognizer() : Recognizer + getResultadoLibros() : Vector + getJMenu1BackupDB() : JMenu + getSemantica_generada_automata() : String + getJMenuAdmin() : JMenu + getStado() : String + getJMenuAyuda() : JMenu + getTareaPendiente() : TareaPendiente + getJMenuBarPrincipal() : JMenuBar + getTareas_pendientes() : Administrar_TP + getJMenuConfiguracion() : JMenu + getTareasPendientes() : Vector + getJMenuItemAcercaDe() : JMenuItem + getUtil() : Util + getJMenuItemBackup() : JMenuItem + getValorEstados() : valor_estados + getJMenuItemCrear() : JMenuItem + isDominio() : boolean + getJMenuItemDelete() : JMenuItem + isFrase_valida_automata() : boolean + getJMenuItemEliminarLibro() : JMenuItem + isIniciativaConsulta() : boolean + getJMenuItemGuia() : JMenuItem + isListenig_completo() : boolean + getJMenuItemInventario() : JMenuItem + isListenig_Key() : boolean + getJMenuItemPresentarReportes() : JMenuItem + isPausa() : boolean + getJMenuItemPropiedaes() : JMenuItem + isUserAlreadyExist() : boolean + getJMenuItemRestaurarDB() : JMenuItem + rotular(String) : void + getJMenuReport() : JMenu + setActionlistening(ActionListeningCrearLibro) : void + getJPanelPrincipal() : JPanel + setConfiguraciion(Configuracion) : void + getJSeparator1Administar() : JSeparator + setConfiguracion(Configuracion) : void - initGUI() : void + setDominio(boolean) : void - jMenuItemRestaurarDBActionPerformed(ActionEvent) : void + setEscucha(Escucha) : void + main(String[]) : void + setFrame(JFrame) : void + NewJFrame() + setFrameconfirma(Frame_confirmacion) : void - thisKeyPressed(KeyEvent) : void + setFrameinfolibro(Frame_infolibro) : void - thisWindowClosed(WindowEvent) : void + setFrameprestamo(Frame_prestamo) : void + setFrames_out(Vector) : void + setFrase_valida_automata(boolean) : void + setFrmeconsulta(Frame_consulta) : void + setGestordialogo(GestordelDialogo) : void + setJframe(NewJFrame) : void + setJpanelConfiguracion(JPanel_Configuracion) : void + setJpanelCrearLibro(JPanel_insertLibro) : void + setJpanelInventario(JPanel_inventario) : void + setJpanelReporte(JPanel_ReportA) : void + setJpanelUpdateDropLibro(JPanel_Drop_update_Libro) : void + setJpanelUpdateLibro(JPanel_UpdateLibro) : void + setKey_text_pressed(String) : void + setLibro_receptar(Recepcion_libro) : void + setListenig_completo(boolean) : void + setListenig_Key(boolean) : void + setPausa(boolean) : void + setPropiedadesSysntetizador(SyntetisadorPropiedades) : void + setRecepcion_libros(Administrar_RL) : void + setRecognizer(Recognizer) : void + setResultadoLibros(Vector) : void + setSemantica_generada_automata(String) : void + setStado(String) : void + setTareaPendiente(TareaPendiente) : void + setTareas_pendientes(Administrar_TP) : void + setTareasPendientes(Vector) : void + setUserAlreadyExist(boolean) : void + setUtil(Util) : void + setValorEstados(valor_estados) : void «property get» + getACCION_ADMINISTRARLIBROS() : int + getLibros_receptar() : Vector + getNivel_del_dialogo() : byte + getNumeroLibros() : Vector + getTokensRecognizer() : String «property set» + setACCION_ADMINISTRARLIBROS(int) : void + setIniciativaConsulta(boolean) : void + setLibros_receptar(Vector) : void + setNivel_del_dialogo(byte) : void + setNumeroLibros(Vector) : void + setTokensRecognizer(String) : void

63. Ilustración: DC Inventario de Libros Braille 217

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.8.4.12. Diagrama de clases para el caso de uso Imprimir

Inventario de Libros Braille.

class DIAGRAM DE CLASES IMPRIMIR INVENTARIO DE LIBROS

Name: Imprimir Inventario de Libros Braille Utils::serv idor Versión: 1.0 Autor: José Ubertino Jaramillo Zhingre + ACCION_ADMINISTRARLIBROS: int = -1 + actionlistening: ActionListeningCrearLibro = null + AD_LIBROS_INGRESAR: int = 0 + AD_LIBROS_MODIFICAR: int = 1 + BASE_DATOS: String = "sistemabiblioteca" {readOnly} + CAPITULO_VALOR: String = "SIN CAPITULO" + configuraciion: Configuracion = null + configuracion: Configuracion = null + DATO_NO_DEFINIFO: String = "no definido" {readOnly} + dominio: boolean = false + EQUIPO: String = "administrador" + EQUIPO_CLIENTE: String = "Cliente" {readOnly} + EQUIPO_SERVIDOR: String = "Servidor" {readOnly} ActionListener + escucha: Escucha = null + FILE_NAME_BASE_DATOS_RESTAURE: String = "DB_BRAILLE.sql" {readOnly} Control::ActionListeningInv entarioBook + FILE_NAME_CONFIGURACION: String = "Configuracion" {readOnly} - idlibro: int = -1 + FILE_NAME_GRAMMAR_AUTOR: String = "grammarAutores" {readOnly} - libros: LinkedList = null + FILE_NAME_GRAMMAR_COMANDOS: String = "grammarComandos" {readOnly} - libroSelected: Libro = null + FILE_NAME_GRAMMAR_CONTENIDO: String = "grammarContenidos" {readOnly} - opd: operacionesDB = null + FILE_NAME_GRAMMAR_DIRECCIONES: String = "grammarDirecciones" {readOnly} - result: ResultSet = null + FILE_NAME_GRAMMAR_MATERIA: String = "grammarMaterias" {readOnly} - SQL: String = "" + FILE_NAME_GRAMMAR_NOMBRE_LIBRO: String = "grammarNombreL... {readOnly} + FILE_NAME_GRAMMAR_NOMBRES: String = "grammarNombres" {readOnly} + actionPerformed(ActionEvent) : void + FILE_NAME_GRAMMAR_NUMEROS: String = "grammarNumeros" {readOnly} - printTable() : void + frame: JFrame = null + ValidarDatos(int) : boolean + frameconfirma: Frame_confirmacion = null + frameinfolibro: Frame_infolibro = null ~oyente + frameprestamo: Frame_prestamo = null + frames_out: Vector = null + frase_valida_automata: boolean = false + frmeconsulta: Frame_consulta = null + gestordialogo: GestordelDialogo = null Utilidades::ControlTablaInv entarioLibro + GRAMMAR_ALL_CONTENIDOS: String = "grammars.allCo... {readOnly} + GRAMMAR_AUTORES: String = "grammars.autores" {readOnly} - modelo: ModeloTablaInventarioLibro = null + GRAMMAR_COMANDOS: String = "grammars.comandos" {readOnly} - numero: int = 0 + GRAMMAR_DIRECCIONES: String = "grammars.direccion" {readOnly} javax.swing.JPanel + GRAMMAR_MATERIAS: String = "grammars.materias" {readOnly} + addLibros(LinkedList) : void + GRAMMAR_NOMBRE_LIBROS: String = "grammars.nombr... {readOnly} GUI::JPanel_inv entario + anhadeFila() : void + GRAMMAR_NOMBRES: String = "grammars.nombres" {readOnly} + anhadeFila(Libro) : void + controlLibro: ControlTablaInventarioLibro = new ControlTabl... + GRAMMAR_NUMEROS: String = "grammars.numeros" {readOnly} + borraFila() : void - jButtonBuscar: JButton + IniciativaConsulta: boolean = true + ControlTablaInventarioLibro(ModeloTablaInventarioLibro) - jButtonCancelar: JButton + jframe: NewJFrame = null - jButtonImprimir: JButton + jpanelConfiguracion: JPanel_Configuracion = null +controlLibro - jComboBoxTipoBusqueda: JComboBox + jpanelCrearLibro: JPanel_insertLibro = null - jLabel1: JLabel + jpanelInventario: JPanel_inventario = null - jPanelCenter: JPanel + jpanelReporte: JPanel_ReportA = null - jPanelCentroTabla: JPanel + jpanelUpdateDropLibro: JPanel_Drop_update_Libro = null - jPanelNort1: JPanel + jpanelUpdateLibro: JPanel_UpdateLibro = null - jPanelNorte: JPanel + key_text_pressed: String = null - jPanelSur: JPanel + LIBRO_ESTADO_DADO_BAJA: String = "E" {readOnly} - jScrollPaneTabla: JScrollPane + LIBRO_ESTADO_DISPONIBLE: String = "D" {readOnly} + libro_receptar: Recepcion_libro = null -modelo - jTableInventario: JTable - jTextFieldDatoBusqueda: JTextField + Libros_receptar: Vector = null TableModel + modelo: ModeloTablaInventarioLibro = new ModeloTabla... + listenig_completo: boolean = false Utilidades::ModeloTablaInv entarioLibro ~ oyente: ActionListeningInventarioBook = new ActionListe... + listenig_Key: boolean = true + MAXIMO_NO_ENTENDIDO_RECONOCEDOR: int = 3 {readOnly} - datos: LinkedList = new LinkedList() + getJButtonBuscar() : JButton + N_DIAS_MAXIMO_PRESTAMO_LIBRO: int = 30 {readOnly} - listeners: LinkedList = new LinkedList() + getJButtonCancelar() : JButton + NE_QUIERO_CONSULTAR_AQUI: String = "quiero consult... {readOnly} + getJButtonImprimir() : JButton + NE_QUIERO_LLEVAR_CASA: String = "quiero llevar ... {readOnly} + addLibros(LinkedList) : void +modelo + getJComboBoxTipoBusqueda() : JComboBox + Nivel_del_dialogo: byte = 1 + addTableModelListener(TableModelListener) : void + getJPanelCenter() : JPanel + NO_TENGO: String = "no tengo" {readOnly} + anhadeLibro(Libro) : void + getJPanelCentroTabla() : JPanel + NumeroLibros: Vector = null - avisaSuscriptores(TableModelEvent) : void + getJPanelNort1() : JPanel + pausa: boolean = false + borraLibro(int) : void + getJPanelNorte() : JPanel + PRESTAMO_ESTADO_LIBRO_ENTREGADO: String = "entregado" {readOnly} + encerarAllTable() : void + getJPanelSur() : JPanel + PRESTAMO_ESTADO_LIBRO_RECEPTADO: String = "receptado" {readOnly} + getColumnClass(int) : Class + getJScrollPaneTabla() : JScrollPane + PRESTAMO_TIPO_BIBLIOTECA: String = "biblioteca" {readOnly} + getColumnCount() : int + getJTableInventario() : JTable + PRESTAMO_TIPO_CASA: String = "domicilio" {readOnly} + getColumnName(int) : String + getJTextFieldDatoBusqueda() : JTextField + propiedadesSysntetizador: SyntetisadorPropiedades = null + getContenidos() : LinkedList - initGUI() : void + QTY_MAXIMO_LIBROS: int = 10 {readOnly} + getRowCount() : int + recepcion_libros: Administrar_RL = null + JPanel_inventario() +jpanelInventario + getValueAt(int, int) : Object + main(String[]) : void + recognizer: Recognizer = null + isCellEditable(int, int) : boolean + resultadoLibros: Vector = null + removeTableModelListener(TableModelListener) : void + semantica_generada_automata: String = null + setValueAt(Object, int, int) : void + stado: String = null + TABLA_CONTENIDO: String = "contenido" {readOnly} + TABLA_CURSO: String = "curso" {readOnly} + TABLA_LIBRO: String = "libro" {readOnly} + TABLA_MATERIA: String = "materia" {readOnly} + TABLA_PERSONA: String = "persona" {readOnly} + TABLA_PRESTAMO: String = "prestamo" {readOnly} + TABLA_TAREAS_PENDIENTES: String = "tareas_pendientes" {readOnly} + tareaPendiente: TareaPendiente = null + tareas_pendientes: Administrar_TP = null + tareasPendientes: Vector = null + TITULO_VALOR: String = "SIN TITULO" + TokensRecognizer: String = null + TP_ESTADO_COMPLETO: String = "COMPLETO" {readOnly} + TP_ESTADO_PENDIENTE: String = "PENDIENTE" {readOnly} + userAlreadyExist: boolean = false + util: Util = null + valorEstados: valor_estados = null + VIEW_LIBROS_CONTENIDOS: String = "view_libros_co... {readOnly} + VIEW_LIBROS_MATERIA_CURSO: String = "view_libros_ma... {readOnly} javax.swing.JFrame + VIEW_PRESTAMO: String = "view_prestamo" {readOnly} + VIEW_REPORTE: String = "view_reporte" {readOnly} GUI::NewJFrame + VIEW_TAREAS_PENDIENTES: String = "view_tareas_pe... {readOnly} - jMenu1BackupDB: JMenu + WORK_RECEPCION_LIBROS: String = "RL" {readOnly} - jMenuAdmin: JMenu + WORK_SISTEMA_DIALOGO: String = "SD" {readOnly} - jMenuAyuda: JMenu + WORK_SLEEP: String = "ND" {readOnly} - jMenuBarPrincipal: JMenuBar + WORK_TAREAS_PENDIENTES: String = "TP" {readOnly} - jMenuConfiguracion: JMenu + YEAR_ACTUAL: int = Integer.parseIn... {readOnly} - jMenuItemAcercaDe: JMenuItem + YEAR_INICIO_SISTEMA: int = 2011 {readOnly} - jMenuItemBackup: JMenuItem + YEAR_START_COUNT: int = 1990 {readOnly} - jMenuItemCrear: JMenuItem - jMenuItemDelete: JMenuItem + AvisoInformativo(String, String, int) : void - jMenuItemEliminarLibro: JMenuItem + AvisoInformativo(Component, String, String, int) : void - jMenuItemGuia: JMenuItem + crearFile(String, Vector) : void - jMenuItemInventario: JMenuItem + Decoder_Frame() : Object - jMenuItemPresentarReportes: JMenuItem + Decoder_Frame(String) : Object - jMenuItemPropiedaes: JMenuItem + Encoder_Frame(Object) : void - jMenuItemRestaurarDB: JMenuItem + Encoder_Frame(Object, String) : void - jMenuReport: JMenu + getActionlistening() : ActionListeningCrearLibro - jPanelPrincipal: JPanel +jframe + getConfiguraciion() : Configuracion - jSeparator1Administar: JSeparator + getConfiguracion() : Configuracion - jSeparator2: JSeparator + getEscucha() : Escucha - keyListening: keyListenig = null + getFrame() : JFrame + getFrameconfirma() : Frame_confirmacion + getJMenu1BackupDB() : JMenu + getFrameinfolibro() : Frame_infolibro + getJMenuAdmin() : JMenu + getFrameprestamo() : Frame_prestamo + getJMenuAyuda() : JMenu + getFrames_out() : Vector + getJMenuBarPrincipal() : JMenuBar + getFrmeconsulta() : Frame_consulta + getJMenuConfiguracion() : JMenu + getGestordialogo() : GestordelDialogo + getJMenuItemAcercaDe() : JMenuItem + getJframe() : NewJFrame + getJMenuItemBackup() : JMenuItem + getJpanelConfiguracion() : JPanel_Configuracion + getJMenuItemCrear() : JMenuItem + getJpanelCrearLibro() : JPanel_insertLibro + getJMenuItemDelete() : JMenuItem + getJpanelInventario() : JPanel_inventario + getJMenuItemEliminarLibro() : JMenuItem + getJpanelReporte() : JPanel_ReportA + getJMenuItemGuia() : JMenuItem + getJpanelUpdateDropLibro() : JPanel_Drop_update_Libro + getJMenuItemInventario() : JMenuItem + getJpanelUpdateLibro() : JPanel_UpdateLibro + getJMenuItemPresentarReportes() : JMenuItem + getKey_text_pressed() : String + getJMenuItemPropiedaes() : JMenuItem + getLibro_receptar() : Recepcion_libro + getJMenuItemRestaurarDB() : JMenuItem + getPropiedadesSysntetizador() : SyntetisadorPropiedades + getJMenuReport() : JMenu + getRecepcion_libros() : Administrar_RL + getJPanelPrincipal() : JPanel + getRecognizer() : Recognizer + getJSeparator1Administar() : JSeparator + getResultadoLibros() : Vector - initGUI() : void + getSemantica_generada_automata() : String - jMenuItemRestaurarDBActionPerformed(ActionEvent) : void + getStado() : String + main(String[]) : void + getTareaPendiente() : TareaPendiente + NewJFrame() + getTareas_pendientes() : Administrar_TP - thisKeyPressed(KeyEvent) : void + getTareasPendientes() : Vector - thisWindowClosed(WindowEvent) : void + getUtil() : Util + getValorEstados() : valor_estados + isDominio() : boolean + isFrase_valida_automata() : boolean + isIniciativaConsulta() : boolean + isListenig_completo() : boolean + isListenig_Key() : boolean + isPausa() : boolean + isUserAlreadyExist() : boolean + rotular(String) : void + setActionlistening(ActionListeningCrearLibro) : void + setConfiguraciion(Configuracion) : void + setConfiguracion(Configuracion) : void + setDominio(boolean) : void + setEscucha(Escucha) : void + setFrame(JFrame) : void + setFrameconfirma(Frame_confirmacion) : void + setFrameinfolibro(Frame_infolibro) : void + setFrameprestamo(Frame_prestamo) : void + setFrames_out(Vector) : void + setFrase_valida_automata(boolean) : void + setFrmeconsulta(Frame_consulta) : void + setGestordialogo(GestordelDialogo) : void + setJframe(NewJFrame) : void + setJpanelConfiguracion(JPanel_Configuracion) : void + setJpanelCrearLibro(JPanel_insertLibro) : void + setJpanelInventario(JPanel_inventario) : void + setJpanelReporte(JPanel_ReportA) : void + setJpanelUpdateDropLibro(JPanel_Drop_update_Libro) : void + setJpanelUpdateLibro(JPanel_UpdateLibro) : void + setKey_text_pressed(String) : void + setLibro_receptar(Recepcion_libro) : void + setListenig_completo(boolean) : void + setListenig_Key(boolean) : void + setPausa(boolean) : void + setPropiedadesSysntetizador(SyntetisadorPropiedades) : void + setRecepcion_libros(Administrar_RL) : void + setRecognizer(Recognizer) : void + setResultadoLibros(Vector) : void + setSemantica_generada_automata(String) : void + setStado(String) : void + setTareaPendiente(TareaPendiente) : void + setTareas_pendientes(Administrar_TP) : void + setTareasPendientes(Vector) : void + setUserAlreadyExist(boolean) : void + setUtil(Util) : void + setValorEstados(valor_estados) : void «property get» + getACCION_ADMINISTRARLIBROS() : int + getLibros_receptar() : Vector + getNivel_del_dialogo() : byte + getNumeroLibros() : Vector + getTokensRecognizer() : String «property set» + setACCION_ADMINISTRARLIBROS(int) : void + setIniciativaConsulta(boolean) : void + setLibros_receptar(Vector) : void + setNivel_del_dialogo(byte) : void + setNumeroLibros(Vector) : void + setTokensRecognizer(String) : void

64. Ilustración: DC Imprimir Inventario de Libros Braille

218

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.8.5. Diagrama de componentes

65. Ilustración: Diagrama de Componentes

219

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.8.6. Diagrama de Despliegue

66. Ilustración: Diagrama de Paquetes

220

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.9. Algoritmo Gestor del Dialogo.

Para poder proporcionar una interfaz natural entre el usuario y el ordenador, debiendo aportar el conocimiento del dominio de la tarea, para facilitar la comprensión del mensaje, mantener el control del dialogo y activar el generador de respuestas para interactuar con el usuario pidiendo nueva información o verificando la información ya suministrada, se diseñó el siguiente algoritmo.

ALGORITMO DEL CONTROLADOR DEL DIALOGO 1. Obtener la sentencia de usuario o frase. 2. Generar un Frame de entrada extrayendo el significado de la Frase 3. Transitar en la red del dialogo. 4. Verificar si se cuenta con datos para realizar una consulta a la base de datos 5. Realizar la consulta en la base de datos. 6. Transitar en la red del dialogo de acuerdo al resultado de la base de datos. 7. Generar Frame de salida.\

Seudocódigo.

INICIO

Hacer Estado=Apertura

Repetir

Sentencia=obtener sentencia del turno de usuario

Frame=extraer signicado(Sentencia)

Estado=Transición a(Estado,Frame)

/* acciones del controlador */

si Consulta completa(RVA)

entonces

Enviar Consulta Base de Datos 221

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Estado=Elegir transición sino

seleccionar las transiciones permitidas por el RVA Estado=Elegir una de las transiciones seleccionadas Generar el frame de salida hasta Estado=Cierre

FIN

222

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.10. Plan de pruebas

La ejecución del plan de pruebas en el desarrollo de un sistema informatizado es unaetapa que no se puede excluir de su proceso de desarrollo. Esta fase permite evaluar el rendimiento del sistema construido así como detectar, identificar y corregir errores e incrementar sugerencias adicionales. También se puede realizar pruebas al sistema durante todo el proceso de implementación lo que facilita la corrección de errores con mayor pertinencia.

La fase de pruebas implica dos partes fundamentales que son la verificación y la validación.

5.10.1. Verificación

Parte de la fase de ejecución de pruebas que consiste en la evaluación del sistema desarrollado o de uno de sus componentes en escenarios simulados, para comprobar si este satisface las especificaciones inicialmente definidas en la fase de análisis y diseño de la aplicación. Así mismo permite comprobar si el sistema se está construyendo correctamente y que no contiene errores de implementación.

5.10.2. Validación

Consiste en demostrar que un sistema sistematizado es apropiado para el uso previsto. Esto se logra mediante la realización de un proceso, durante las etapas de desarrollo o al final, que consiste en evaluar en el sistema todos los módulos con el fin de comprobar si estos cumplen con las necesidades y los requisitos del usuario y si el sistema produce las salidas esperadas. Su propósito es suministrar una valoración sobre todos los módulos que permiten tanto al usuario y al programador identificar fallas, falta de controles y sus consecuencias.

El plan a utilizar consta de las siguientes partes:

1. Identificador del plan. Nombre representativo que identifique al plan y que permita relacionarlo con su alcance. Debe distinguirse la versión y la fecha del plan.

2. Alcance. Indica el tipo de prueba y las propiedades/elementos del software a ser probado. 223

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

3. Ítems a probar. Indica la configuración a probar y las condiciones mínimas que debe cumplir para comenzar a aplicarse el plan. Se debe tener cuidado en el momento de probar una aplicación que aún tiene fallas pero si esperamos que la aplicación este completamente terminada se pueden detectar fallas graves muy tarde.

4. Estrategia. Describe la técnica, patrón y/o herramientas a utilizarse en el diseño de los casos de prueba.

5. Criterios de suspensión y requisitos de reanudación. Señala las circunstancias en las cuales, el plan debe ser suspendido, repetido o culminado.

6. Documentos a entregar. Especifica los documentos que se generan al culminar el plan de pruebas, esto puede ser una especificación de pruebas, casos de prueba, resumen del proceso y bitácora de pruebas.

7. Recursos. Explica los medios físicos e intangibles necesarios y deseables del ambiente de prueba, incluyendo las características del hardware, el software, el sistema operativo o cualquier otro software necesario para llevar a cabo las pruebas, así como la distribución específica de los componentes del sistema a probar así como también la configuración del software de apoyo. También se incluye los recursos humanos necesarios para la ejecución de las pruebas.

8. Calendario. Señala las fechas establecidas como hitos en la realización de las pruebas y las dependencias en el tiempo de las tareas a realizar.

9. Responsables. Establece el responsable de las tareas programadas en el plan.

En cualquier tipo de validación se debe considerar el personal involucrado en este proceso, las partes del sistema a ser validado y los métodos de validación que se establecerán para ejecutar la validación. El personal involucrado en la validación incluye las personas que harán uso del sistema y que se encuentran inmersos en el contexto de la problemática que se pretende solucionar. En el sistema se validará los resultados presumiblemente útiles para el usuario final, esto nos permitirá obtener como resultado el rendimiento general del sistema y corregir errores que se presenten en la implementación.

224

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.10.3. Validación orientada al uso: Usabilidad

Usabilidad es la eficacia, eficiencia y satisfacción con la que un producto permite alcanzar objetivos específicos a usuarios específicos en un contexto de uso específico.

Su objetivo fue estudiar la usabilidad del programa en su entorno real con usuarios reales. Para ello se evaluaron aspectos tales como la facilidad de uso del sistema, su robustez, su interfaz gráfica, etc.

La validación orientada al uso se llevó a cabo durante el mes de Octubre, con un grupo de estudiantes que hacen uso de la biblioteca Braille Parlante del Municipio de Loja y personal que trabaja en la misma, los cuales mediante la utilización de la herramienta pudieron, verificar las diferentes funciones que posee la aplicación.

En base a la experiencia adquirida en la etapa de prueba por parte de los Involucrados, se aplicó una encuesta para poder evaluar tanto la funcionalidad, usabilidad e interfaz gráfica, lo que ayudo a detectar problemas que se presentaban en la aplicación.

El número total de estudiantes que visitan la biblioteca Braille Parlante cada mes está en un rango de 80 a 89, los cuales se encuentran pertenecientes a las diferentes instituciones educativas, para aplicar las pruebas se tomó un porcentaje tomando en cuenta la técnica de muestreo.

225

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.10.3.1. Selección de la muestra

Ya que la población general de los estudiantes que hacen uso de la biblioteca Braille Parlante es extensa se creyó conveniente aplicar la encuesta a una muestra, para lo cual se procedió a calcularla de la siguiente manera.

Para seleccionar la muestra tenemos que tener en cuenta los siguientes parámetros: N: población general. k= Es una constante que depende del nivel de confianza que asignemos. k 1,15 1,28 1,44 1,65 1,96 2 2,58

Nivel de confianza 75% 80% 85% 90% 95% 95,5% 99%

41. Tabla: Constante k relacionada de acuerdo al nivel de confianza e: es el error muestral deseado. El error muestral es la diferencia que puede haber entre el resultado que obtenemos preguntando a una muestra de la población y el que obtendríamos si preguntáramos al total de ella. q: es la proporción de individuos que poseen en la población la característica de estudio. Los valores a considerar constan en la siguiente tabla: . Para 3 ≤ N ≤ 19 ------Se asume q = 0,01 (un 1 %). . Para 20 ≤ N ≤ 29 ------Se asume q = 0,01 hasta 0,02 (del 1 al 2 %). . Para 30 ≤ N ≤ 79 ----- Se asume q = 0,02 hasta 0,05 (del 2 al 5 %). . Para 80 ≤ N ≤ 159 ---- Se asume q = 0,05 hasta 0,10 (del 5 al 10 %). . Para N ≥ 160 ------Se asume q = 0,05 hasta 0,20 (del 5 al 20 %). p: es la proporción de individuos que no poseen esa característica, es decir, es 1-q. n: es el tamaño de la muestra (número de encuestas que vamos a hacer).

Para calcular la muestra para la validación de la aplicación hemos tomado como datos los siguientes: N: el número total de estudiantes que hacen uso de la biblioteca por mes es de 86. k: 99% para caculos es igual a 2.58.

226

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

El nivel de confianza indica la probabilidad de que los resultados de nuestra investigación sean ciertos. Un nivel de confianza de 99% es lo mismo que decir que nos podemos equivocar un 1%. e: 10%. Significa que si de la encuesta realizada con el error muestral de 10% y el 80% de los docentes se encuentran satisfechos significa que entre el 70% y 90% lo estarán también. q: Basándonos en la tabla anterior podemos tomar los valores correspondientes de acuerdo a la población con lo que sería el valor de 0.05 hasta 0.10. Para lo cual hemos creído conveniente el valor de 0.05, ya que esto significa que del total de la población un 95 % ha utilizado por lo menos un software para interactuar con el computador mediante la voz o teclado. p: Es igual al valor de 1-q, dando como resultado 0.95

Para calcular el tamaño de la muestra aplicamos la siguiente formula:

(( ( )) )

(( ( )) )

Luego de realizar los cálculos correspondientes determinamos la muestra real la cual es de 23 estudiantes los cuales se puede tomar de forma aleatoria de entre los existentes que hacen uso de la biblioteca Braille Parlante del Municipio de Loja.

227

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.10.3.2. Técnicas de validación

La técnica a utilizar para el proceso de validación consiste en una Ficha de Validación que recoge un conjunto de preguntas a aplicársele al usuario basadas en la técnica del cuestionario. Se utilizará una ficha de validación, que será para los estudiantes y personal de la Biblioteca Braille Parlante del Municipio de Loja. (Ver ficha de validación en el Anexo 1).

228

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.10.4. Plan de validación

Fecha: 20 de Octubre de 2011 Versión: 1.0

Indicador Usabilidad, navegación e ingreso en el sistema de automático de información Bibliográfica SAIBLO. Alcance Se probara los controles de ingreso a datos, confiabilidad, requerimientos de usuario, integración de datos entre el software de soporte y la base de datos de los registros generados. Ítems a probar Componente de navegación, reportes y dialogo. Estrategia Análisis de entrada y salida. Criterios de suspensión y Se suspenderá el proceso de pruebas en caso de reanudación que no exista las condiciones necesarias tales como: el computador para realizar la instalación del sistema, disponibilidad del tiempo de usuario, detección de errores que no permitirán culminar las pruebas de la aplicación.

Se reanudara el proceso de pruebas cuando los criterios de suspensión sean superados.

Se culminara las pruebas de validación una vez que se ha verificado el cumplimiento de los requerimientos impuestos por el usuario y los errores encontrados no requieran de una nueva revisión por parte del usuario. Documentación Se realizara un informe de pruebas y las correcciones realizadas, adjunto como respaldo las fichas entregadas al usuario. Recursos Computador de características aceptables Sistema Automático de Información Bibliográfica. Ficha elaborada para la validación de la 229

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

herramienta FV01 Usuario Datos reales del software de actualizaciones Calendario Del 12 de Octubre al 29 de octubre Responsable Grupo de trabajo: José Jaramillo

42. Tabla: Plan de Validación

230

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.10.5. Ejecución del plan de pruebas

5.10.5.1. Pruebas de funcionalidad y aceptación

Siguiendo la metodología adoptada para el desarrollo de software y tomando en cuenta las diferentes etapas que posee, se realizó pruebas a lo largo de todo el proceso de implementación realizando cambios en base a los nuevos errores encontrados lo cual se cumple con una característica de iconix que es de ser iterativo e incremental, estas pruebas comprenden el proceso de codificación, la creación de los diferentes componentes y la integración total de los mismos.

Culminada la fase de implementación y ya teniendo una versión estable de la aplicación se presentó al Director de nuestra tesis Ing. Wilson Vélez, quien aporto con nuevas ideas que ampliaría la funcionalidad de la aplicación las mismas que fueron agregadas.

Con las nuevas correcciones realizadas la aplicación estaba lista para someterse a pruebas y validar su funcionalidad y usabilidad para lo cual tomamos una muestra de la población de los estudiantes que hacen uso de la Biblioteca Braille Parlante del Municipio de Loja, lo cual dio como resultado un total de 26 estudiantes los cuales fueron seleccionados tomando en cuenta la disponibilidad de tiempo que poseían. La aplicación fue presentada en octubre del 2010 a los diferentes estudiantes de diferentes instituciones educativas encargados de validar la aplicación los mismos que brindaron sugerencias y opiniones que ayudarían a mejorarla las mismas que se realizaron en su totalidad y de la mejor manera posible.

5.10.5.2. Pruebas de usabilidad(funcionalidad, diseño y presentación)

La aplicación se probó durante toda la fase de implementación por parte de los desarrolladores, validando su funcionalidad, diseño y la presentación los cuales deben adaptarse en lo mejor posible a las necesidades de los usuarios.

Con la finalidad de realizar las pruebas definitivas a los usuarios finales y tomando en cuenta que el tamaño de la muestra era considerable y el tiempo que demandaba encuestar sería de 10 a 15 minutos, se descartó la idea de utilizar un centro de cómputo puesto que resultaría complicado reunir a los estudiantes ya que el tiempo 231

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

que poseían hacían que esto se torne difícil, es así que se optó por la encuesta individual procediendo a la instalación en un pc portátil de manera que se realizaría en un momento en que se encuentren totalmente disponibles y puedan realizar la prueba de la aplicación de la manera más tranquila lo cual permitió que aporten ideas y sugerencias para mejorarla.

Culminadas las encuestas se procedió a realizar los análisis de los resultados y de esta forma encontrar los errores que se hayan pasado por alto en el proceso de implementación.

232

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.10.5.2.1. Análisis de resultados de las pruebas de validación

Luego del análisis realizado en base a la información recolectada en la etapa de pruebas los resultados obtenidos fueron los siguientes:

Ficha FV01 Ficha de validación en la “CONSTRUCCIÓN DE UN SISTEMA DE DIÁLOGO COMPLETO, EN LENGUA ESPAÑOLA, PARA LA BIBLIOTECA BRAILLE DEL HONORABLE CONSEJO PROVINCIAL DE LOJA, EL CUAL SE ENCARGARA DE PROPORCIONAR INFORMACIÓN BIBLIOGRÁFICA A LOS ESTUDIANTES NO VIDENTES”.

Luego de terminar las encuestas realizadas a la muestra de estudiantes de la población de estudiantes no videntes que hacen uso de la Biblioteca Braille Parlante del Municipio de Loja, obtuvimos los siguientes datos:

1 Accesibilidad

1.1 ¿Se presentó algún problema al ingresar a la aplicación?

SI ( ) NO ( )

30

20 SI NO 10

0 SI NO

67. Ilustración: Resultados del Ingreso al Sistema

El 100% de los encuestados considera que no existe problema al ingresar a la aplicación. Esto se debe a que el ingreso a la misma resulta familiar a los programas utilizados por la mayor parte de usuarios.

233

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

1.2 ¿El tiempo de respuesta del sistema al ejecutar una acción oscila entre? a) 0-2 segundos ( ) b) 3-5 segundos ( ) c) 6-10 segundos ( ) d) 11 o más segundos ( )

20

15 De 0 a 2 seg

10 De 3 a 5 seg De 6 a 10 seg 5 De 11 a mas seg 0 De 0 a 2 De 3 a 5 De 6 a 10 De 11 a seg seg seg mas seg

68. Ilustración: Resultados del tiempo de respuesta

El 87% de la población encuestada considera que al ejecutar una acción en el sistema el tiempo de respuesta oscila entre 0 y 2 segundos. En cambio el 13% restante considera que el tiempo de respuesta oscila entre 3 a 5 segundos. En base a los resultados obtenidos podemos afirmar que el tiempo de respuesta se encuentra dentro de los parámetros aceptables por parte del desarrollador debido a que esto depende de las características de hardware del computador (RAM, tarjeta de video y procesador) en el cual se ejecute.

2. Funcionalidad.

2.1 ¿Tuvo una falla al utilizar las diferentes funciones del sistema?

Administrar Libros Braille SI ( ) NO ( ) Administrar Inventario de Libros SI ( ) NO ( ) Administrar Reportes estadísticos SI ( ) NO ( ) Administrar Tareas Pendientes SI ( ) NO ( ) Administrar Recepción de Libros SI ( ) NO ( )

234

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Dialogo con el sistema SI ( ) NO ( ) Comprensión del Habla SI ( ) NO ( ) Generar Tarea pendiente SI ( ) NO ( ) Registrarlo en base de datos SI ( ) NO ( )

25

20

15

10

5 SI 0 NO

69. Ilustración: Resultados de la funcionalidad del sistema

Lo que se refiere a la funcionalidad del sistema 2 de los 23 encuestados tuvieron problemas al realizar el dialogo con el sistema, así mismo 2 de los 23 encuestados al momento de realizar la comprensión del habla se les presentaron problemas. Esto se debe a que el estudiante se demoraba mucho al dar la información, también la falta de práctica para el uso de sistemas que trabajan con voz fue la causa para q se generen estos inconvenientes, los mismos que fueron solucionados en su totalidad uno debido a que se les dio consejos prácticos de cómo dar información al sistema y con la realización de varias prácticas.

2.2 ¿La información ingresada y brindada al sistema se guardó de forma correcta?

Administrar Libros Braille SI ( ) NO ( )

235

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Administrar Tareas Pendientes SI ( ) NO ( ) Administrar Recepción de Libros SI ( ) NO ( ) Registrar Usuario SI ( ) NO ( ) Registrar Tarea Pendiente SI ( ) NO ( )

25

20

15

10

5 SI 0 NO

70. Ilustración: Resultados relacionados con el almacenamiento de la información

El 99% de los encuestados aseguro que la información suministrada en cada componente se almaceno de forma correcta, el 1 % en cambio aseguro que la información suministrada no se almaceno de forma correcta.

En base a los resultados obtenidos podemos asegurar que los problemas encontrados se debieron a que la información suministrada superaba los caracteres de ciertos campos en las tablas de la base de datos por lo que se procedió a realizar la corrección del mismo.

236

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

2.3 Según su criterio: ¿El sistema cubre todos los controles, al momento de agregar libro nuevo, modificarlo, eliminarlo, Administrar Tareas pendientes, Administrar recepción de Libros, al momento de realizar el dialogo con el sistema y Comprender lo que usted dice?

SI ( ) NO ( )

50 SI NO 0 SI NO

71. Ilustración: Resultados del control de información ingresada

El cien por ciento de los encuestados considera que el sistema cumple con todos los controles adecuados al momento de agregar libro nuevo, modificarlo, eliminarlo, Administrar Tareas pendientes, Administrar recepción de Libros, al momento de realizar el dialogo con el sistema y Comprender lo que el usuario dice.

3. Diseño y Presentación.

3.1 ¿Considera amigable la forma de interactuar con el sistema, esto es la forma en que genera las respuestas y la forma en la que usted realiza los procesos?

SI ( ) NO ( )

8

6 SI 4 NO 2 0 SI NO

72. Ilustración: Resultados relacionados con la interfaz gráfica y ejecución de procesos

237

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

El 83% de la población encuestada considera que la interfaz gráfica del sistema es amigable, el 17% restante considera que se debe realizar algunos cambios para hacerla mucho más amigable. En base a los resultados obtenidos concluimos a que esto se debe a que algunos de los usuarios no están familiarizados con el manejo de aplicaciones relacionadas con la administración de libros en bibliotecas.

3.2 ¿Considera usted que el diseño de la aplicación es apropiada para facilitar la ejecución de sus actividades?

SI ( ) NO ( )

30

20 SI 10 NO

0 SI NO

73. Ilustración: Resultados relacionados con la usabilidad del sistema

3. El cien por ciento de la población encuestada considera que el diseño del sistema es apropiado para facilitar el manejo de sus actividades.

4. 3.2 ¿Cómo considera usted la comprensión y utilización del sistema?

a) Fácil ( ) b) Aceptable ( ) c) Complicado ( )

238

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

15 Facil 10 Aceptable 5 Complicado 0 Facil Aceptable Complicado

74. Ilustración: Resultados relacionados con la comprensión del sistema

El 39% de la población considera la comprensión y utilización del sistema fácil, el 61% restante aseguro que la comprensión y utilización del sistema es aceptable.

En base a los resultados obtenidos podemos decir que al porcentaje que le resulta fácil de manejar la aplicación es debido a que ellos utilizan aplicaciones que hacen uso de la voz para interactuar con el computador, en cambio el porcentaje que considera aceptable el manejo de la aplicación no hace mucho uso de aplicaciones de este tipo.

239

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.10.5.3. Informe de resultados

Informe de: “Estudiantes no videntes de las diferentes instituciones educativas de Loja”

Identificador Ficha FV01 usabilidad, navegación y manejo de los diferentes componentes de la aplicación para realizar la consulta de información bibliográfica. Resumen El plan de validación fue ejecutado a la muestra tomada a partir de la población general de todos los estudiantes que hacen uso de la biblioteca braille Parlante del Municipio de Loja. Variaciones Se explicó previamente el funcionamiento del sistema cuales eran sus funciones más importantes para posterior a eso el encuestado realice un análisis de la aplicación y así pueda dar su opinión acerca de la misma Resumen de resultados Los resultados estadísticos de las pruebas realizadas sobre la administración de la información se encuentran en la sección Análisis de resultados de las pruebas de validación. Resumen de actividades Se comenzó por explicar los componentes que la aplicación tenia, para luego comenzar a probar cada uno de ellos comenzando primero por la opción realizar una consulta mediante el dialogo con el sistema. Durante el dialogo el usuario realizo varias consultas, cada una con diferentes datos. Aprobación La aplicación por parte de los estudiantes fue aprobado en su totalidad.

43. Tabla: Informe de Resultados

240

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Una vez finalizadas las pruebas a los estudiantes, se obtuvo varias sugerencias tales como mejorar las respuestas del sistema, la forma en la que solicita la información en cuanto a las preguntas que realiza, así mismo colocar una ayuda que servirá de mucho a usuarios nuevos y de este modo facilitar su uso. Las opiniones brindadas por los encuestados sirvieron de mucha ayuda ya que así se conseguirá un producto de calidad, puesto que ellos son los usuarios finales de aplicación.

241

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

5.10.6. Pruebas de usuario

COMPONENTES ERRORES SOLUCION FECHA 21-10-2011 Al generar los archivos de la Mejorar el método que genera los archivos, evitando que gramática, se generan con líneas escriba saltos de línea si se trata del final del archivo al en blanco al final del archivo. momento de escribirlo. 22-07-2011 Al solicitar un libro solo dándole Establecer variables que determinen la consulta realizada, como dato la materia, el generador y determinar los datos que deben ser presentados en este de respuestas añada un valor de caso. null a la respuesta. 25-07-2011 Gestor del Al generar respuestas al usuario, Determinar el tipo de respuesta y en qué persona dirigirse Dialogo en algunos casos se lo hacía en al usuario, quedando en dar las respuestas en género primera persona y otros en singular. segunda persona.

25-05-2011 Cuando el autómata valida los Se mejoró el método RUN de la clase gestorDelDialogo, tokens, a veces se genera un ciclo haciendo que 10ms por cada interacción entre usuario y repetitivo. sistema.

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

25-05-2011 Por momentos no hay datos en el Mejorar el método encargado de realizar la llamada al archivo ENTRADA.TXT, por lo que autómata, para que este verifique primero si hay datos en el autómata tomaba valores como el archivo ENTRADA.TXT para luego de esto si llamar al null a ser validados, cosa que no autómata que valide la información que contiene el podía ser. archivo.

Al momento que un estudiante Crear una variable Booleana que indique que si se trata o 12-10-2011 solicitaba un libro, y quería pedir no del mismo usuario que ya dio los datos, es decir que Núcleo otro el sistema solicitaba indique si ya fueron solicitados o no los datos. nuevamente los datos como cedula, para poder saber de quién se trata.

Al momento de usar la opción Se determinó utilizar dos teclas para cada nivel de las tareas pendientes y recepción de tareas, quedando con ESCAPE para cancelar y salir y la libros, se dificulto esta tarea por el BARRRA ESPACIADORA para confirmar y leer valores. gran número de teclas que se usaba para realizar esto por lo que la persona se confundía. 21-07-2011

UNIVERSIDAD NACIONAL DE LOJA Sistema Automático de Información Bibliográfica

Al ingresar un libro en la base de Modificar los campos comprometidos de las tablas en la datos, algunos campos de las base de datos, incrementando el valor de caracteres tablas se han creado con longitud permitidos. de caracteres muy cortos, por lo que genera un error al ingresar Presentación datos con texto amplio. Al momento de realizar una Agregar una variable de tipo colección, que almacene los 10-10-2011 actualización de algún libro, no se nuevos registros añadidos para luego ser ingresados a la puede añadir más registros o base de datos. contenidos al libro.

Al ingresar un libro nuevo, el Crear un método encargado de generar la gramática del 02-07-2011 dominio de la aplicación no se dominio, cada vez que se ingrese o actualice un libro. actualiza con los nuevos temas o contenidos ingresados. Este será ejecutado cada vez que se realice las acciones antes misionadas. Al cargar SCORM NO se reconoce Fijar la codificación de caracteres de la cadena que el formato. contiene el manifiesto a “UTF-8” de la siguiente forma: String manifest = new String(cadenaManifest.getBytes("UTF-8"));

44. Tabla: Pruebas de Usuario

UNIVERSIDAD NACIONAL DE LOJA Sistema de Administración Bibliotecario

5.11. Instalación final y explotación del sistema

La presente aplicación está orientada las bibliotecas Braille en especial a la biblioteca Braille Parlante del Ilustre Municipio de Loja y siendo de código abierto estará disponible en su totalidad en la biblioteca a disposición de los estudiantes que deseen hacer uso de ella.

El personal que trabaja en la biblioteca Braille parlante se beneficiara en gran parte con la presente aplicación ya que le permitirá realizar las tareas de manera más interactiva, rápida y efectiva de manera que el estudiante realice la consulta y tenga una mejor percepción acerca de los libros que existen en la biblioteca, además le permitirá generar estadísticas de las diferentes utilidades que ofrece el mismo los mismos que son utilizados para cumplir con los reportes que les son solicitados a quienes laboran en la biblioteca Braille Parlante.

Por parte de los estudiantes la presente herramienta le permitirá realizar sus consultas de manera más rápida, eficiente y efectiva, ya que una de las características del sistema de dialogo es cumplir la función de una bibliotecaria, así mismo la utilización de la aplicación les permitirá adquirir habilidades para el manejo de software relacionado con la tecnología del habla.

Además la aplicación se encuentra bajo la licencia GPL, la cual permite hacer uso total del código fuente, esto con la finalidad de incentivar a nuevos desarrolladores a mejor la aplicación, incrementar funcionalidades o en base a la misma desarrollar nuevas aplicaciones que brinden soluciones a diferentes problemas que se presenten en la colectividad.

245

UNIVERSIDAD NACIONAL DE LOJA Sistema de Administración Bibliotecario

6. CONCLUSIONES

Una vez terminado el proyecto de tesis se ha concluido lo siguiente:

 El sistema de información Bibliográfica SAIBLO BRAILLE es de gran utilidad al momento de realizar una consulta en la biblioteca braille del HCPL para una persona no vidente, ya que es un programa ligero, independiente del hablante y fácil de usar, permitiendo al usuario tener una mayor agilidad en sus consultas.  La utilización de la tecnología Java SAPI, nos permite desarrollar aplicaciones en corto tiempo ya que es un lenguaje de programación de alto nivel y además cuenta con una gran cantidad de documentación y ejemplos que facilitan notablemente el desarrollo de aplicaciones.  Para poder realizar la comprensión del habla se utilizó la herramienta Speech Microsoft Recognition, éste es un reconocedor gratuito ya construido, ya que trabaja bajo SAPI que es el mismo API utilizado por el sintetizador de voz para el Sistema.  Debido a que los equipos de la biblioteca Braille del HCPL que usan las persona no videntes cuentan con aplicaciones únicamente que funcionan en el Sistema Operativo Windows, se orientó el desarrollo de la aplicación únicamente para este entorno.  Pare el desarrollo de este tipo de aplicaciones, el entorno Windows ofrece herramientas gratuitas que facilitan y mejoran la calidad de interacción con los usuarios en cuanto a reconocimiento de voz.  En Sistemas operativos GNU-Linux, la explotación de este tipo de herramientas están en desarrollo ya que no existe aún herramientas que soporten al 100% reconocimiento de voz en español.  Durante el desarrollo de la aplicación y estudio de las herramientas adecuadas se decido usar Microsoft Recognition, ya que los sistemas para personas no videntes con los que cuentan en la biblioteca del HCPL solo corren en entorno Windows.  La aplicación cubre los requerimientos básicos para realizar una consulta en la biblioteca Braille del HCPL.  Para el incremento de nuevos componentes y funciones en el software es necesario conformar equipos de trabajo de tal manera que cada uno tenga funciones específicas, lo cual agilitara notablemente el proceso de desarrollo.

246

UNIVERSIDAD NACIONAL DE LOJA Sistema de Administración Bibliotecario

7. RECOMENDACIONES

Una vez concluido el proyecto de tesis y en base a la experiencia adquirida durante el proceso de desarrollo se plantearon las siguientes recomendaciones:

 Utilizar VoiceXML, JvoiceXML, etc, para logra extender la usabilidad de la aplicación, en cuanto a la forma de acceso al sistema ya que esta tecnología permite interactuar al sistema con el usuario vía teléfono.  Utilizar Sphinx4 y crear un modelo de lenguaje en español para lograr que la aplicación pueda ser utilizada independientemente del entorno, ya que es Software open source y está hecho 100% en lenguaje java.  Colaborar con la comunidad CMUSphinx, en la creación del corpus completo para la alengua española, donando grabaciones con nuestra voz y subiéndolas al proyecto que se encuentra en la web.  Par crear un reconocedor independiente del sistema operativo, se recomienda usar Sphinx4, con un modelado en español adecuado a la tarea del sistema.  Para el desarrollo de proyectos relacionados con la tecnología del Habla revisar temas como Algoritmo de Markov para la realización de un reconocedor de voz, Sistemas de Dialogo para tener una mayor perspectiva del proyecto.  Para el desarrollo de proyectos con este tipo de tecnología es recomendable delimitar y plantear de forma correcta los objetivos ya que proyectos de este tipo presentan gran complejidad en su desarrollo y podrían no concluirse según el tiempo estimado.  Adecuar el sistema con al uso de librerías necesarias para que la interfaz gráfica de la aplicación sea compatible y manejado por JAWS.  Buscar componentes de sonido que sean sencillos de integrar y controlar para evitar errores y retrasos en el proceso de desarrollo de software.  Adecuar componentes de java de acuerdo a las necesidades del proyecto ya que muchas veces existen limitaciones en los componentes prediseñados de java.

247

UNIVERSIDAD NACIONAL DE LOJA Sistema de Administración Bibliotecario

8. BIBLIOGRAFIA

LIBROS:

- Anuff. E... Java Source Book, New York, NY: John Wiley & Sons, Inc.. 1996 - Arnold, K., and J. Gosling. The Java Programing Lenguaje, Reading. MA: Addison Weley Publishing Company, 1996. - Boone. B... “Multitasking in Java” Java Report. May/June 1996, pp 27-33 - Java in a nutshell: a desktop quick reference D. Flanagan. Ed. O’Reilly - The Java tutorial: object-oriented programming for the Internet M. Campione. Ed. Addison-Wesly Programación del lenguaje - Core packages. J. Gosling. Ed. Addison-Wesley Manual de reference - The Java language specification J. Gosling. Ed. Addison-Wesley Lenguaje y manual de referencia

RECURSOS DE INTERNET:

- CMU, 1999. The CMU Communicator. [http://www.speech.cs.cmu.edu/Communicator/],[Consulta:20 de Septiembre 2010] - Speech at CMU [http://www.speech.cs.cmu.edu/],[Consulta:25 de Septiembre 2010] - CSLU - Center for Spoken Language Understanding [http://www.cslu.ogi.edu/]

- Sphinx-4 - A speech recognizer written entirely in the Java(TM) programming language [http://cmusphinx.sourceforge.net/sphinx4/],[Consulta:25 de Septiembre 2010] - Festvox: Home Speech [http://festvox.org/], [Consulta:10 de Octubre 2010] - toolkit : CSLU [http://cslu.cse.ogi.edu/toolkit/], [Consulta:24 de Octubre 2010]

- SpeechLinks: Speech Recognition [http://www.speech.cs.cmu.edu/comp.speech/Section6/speechlinks.htm], [Consulta:20 de Noviembe 2010] - SISTEMAS DE DIALOGO, [http://www.ugr.es/~rlopezc/sistemas_dialogo.htm], [Consulta:10 de Septiembre 2010] - FESTIVAL - The Centre for Speech Technology Research , [http://www.cstr.ed.ac.uk/projects/festival/],[Consulta:10 de Enero 2011]

248

UNIVERSIDAD NACIONAL DE LOJA Sistema de Administración Bibliotecario

- VoiceXML 2.0 and 2.1 Element Reference , [https://studio.tellme.com/],[Consulta:20 de Enero 2011] - Procesamiento de Lenguaje Natural, [http://sinai.ujaen.es/sepln/ojs/ojs- 2.3.5/index.php/pln], [Consulta:20 de Febrero 2011] - Speech Recognition , [http://java.sun.com/products/java- media/speech/forDevelopers/jsapi-guide/Recognition.html], [Consulta:20 de Octubre 2010] - Java Speech API , [http://java.sun.com/products/java-media/speech/], [Consulta:20 de Marzo 2011] - JAVA SPEECH API, http://www.sicuma.uma.es/sicuma/independientes/argentina08/Liliana/JSAPI.ht m], [Consulta:10 de Marzo 2011] - Java Speech API , [http://en.wikipedia.org/wiki/Java_Speech_API], [Consulta: 8 de Abril 2010] - FREE TTS, [http://freetts.sourceforge.net/docs/index.php], [Consulta:12 de Junio 2011] - JAVA SPEECH GRAMMAR FORMAT, [http://192.9.162.55/products/java- media/speech/forDevelopers/JSGF/index.html], [Consulta:05 de Diciembre 2011] - JSGF , [http://en.wikipedia.org/wiki/JSGF], [Consulta:10 de Diciembre 2010] - JSpeech Grammar Format, [http://www.w3.org/TR/jsgf/], [Consulta:10 de Diciembre 2010] - JFreeChart, [http://www.jfree.org/jfreechart/], [Consulta:03 de Agosto 2011]

249

UNIVERSIDAD NACIONAL DE LOJA Sistema de Administración Bibliotecario

9. ANEXOS

ANEXO 1: FICHA DE VALIDACIÓN

250

UNIVERSIDAD NACIONAL DE LOJA Sistema de Administración Bibliotecario

UNIVERSIDAD NACIONAL DE LOJA

PROYECTO “CONSTRUCCIÓN DE UN SISTEMA DE DIÁLOGO COMPLETO, EN LENGUA ESPAÑOLA, PARA LA BIBLIOTECA BRAILLE DEL HONORABLE CONSEJO PROVINCIAL DE LOJA, EL CUAL SE ENCARGARA DE PROPORCIONAR INFORMACIÓN BIBLIOGRÁFICA A LOS ESTUDIANTES NO VIDENTES”.

1ro FV01 Usuario: Usuario No vidente - vidente Rol: Nombre:

Instrucciones: Señale con una x la respuesta a la pregunta formulada y justifique su respuesta.

1. ACCESIBILIDAD

1.1 ¿Se presentó algún problema al ingresar a la aplicación? SI ( ) NO ( ) ¿Por qué?...... 1.2 ¿El tiempo de respuesta del sistema al ejecutar una acción oscila entre?

a) 0-2 segundos ( ) b) 3-5 segundos ( ) c) 6-10 segundos ( ) d) 11 o más segundos ( )

2. FUNCIONALIDAD

2.1 ¿Tuvo una falla al utilizar las diferentes funciones de la aplicación?

Administrar Libros Braille SI ( ) NO ( )

251

UNIVERSIDAD NACIONAL DE LOJA Sistema de Administración Bibliotecario

Administrar Inventario de Libros SI ( ) NO ( ) Administrar Reportes estadísticos SI ( ) NO ( ) Administrar Tareas Pendientes SI ( ) NO ( ) Administrar Recepción de Libros SI ( ) NO ( ) Dialogo con el sistema SI ( ) NO ( ) Comprensión del Habla SI ( ) NO ( ) Generar Tarea pendiente SI ( ) NO ( ) Registrarlo en base de datos SI ( ) NO ( ) 2.2 ¿La información del proceso ingresada y brindada al sistema se guardó de forma correcta?

Administrar Libros Braille SI ( ) NO ( ) Administrar Tareas Pendientes SI ( ) NO ( ) Administrar Recepción de Libros SI ( ) NO ( ) Dialogo con el sistema SI ( ) NO ( ) Generar Tarea pendiente SI ( ) NO ( )

2.3 Según su criterio: ¿El sistema cubre todos los controles, al momento de agregar libro nuevo, modificarlo, eliminarlo, Administrar Tareas pendientes, administra recepción de Libros, realizar el dialogo con el sistema y Comprender lo que usted dice? SI ( ) NO ( ) ¿Dónde faltaría? ......

3 DISEÑO Y PRESENTACION

3.1 ¿Considera amigable la forma de interactuar con el sistema, esto es la forma en que genera las respuestas y la forma en la que usted realiza los procesos? SI ( ) NO ( ) ¿Por qué? ......

252

UNIVERSIDAD NACIONAL DE LOJA Sistema de Administración Bibliotecario

3.2 ¿Considera usted que el diseño de la aplicación es apropiada para facilitar la ejecución de sus actividades? SI ( ) NO ( ) ¿Por qué? ......

3.3 ¿Cómo considera usted la comprensión y utilización del sistema? a) Fácil ( ) b) Aceptable ( ) c) Complicado ( )

F:…………………………………………….

253

UNIVERSIDAD NACIONAL DE LOJA Sistema de Administración Bibliotecario

ANEXO 2: ANTEPROYECTO

254