diseÑo e implementaciÓn de la interfaz grÁfica de … · construcción y evaluación de modelos...

125
Informe Técnico CISIAD-10-03. UNED, Madrid, 2010 DISEÑO E IMPLEMENTACIÓN DE LA INTERFAZ GRÁFICA DE OPENMARKOV JUAN LUIS GOZALO FERNÁNDEZ MANUEL ARIAS CALLEJA FRANCISCO JAVIER DIÉZ VEGAS Dpto. Inteligencia Artificial. UNED c/ Juan del Rosal, 16 28040 Madrid. Spain Resumen OpenMarkov es una herramienta de código abierto, escrita en Java, para la construcción y evaluación de modelos gráficos probabilistas, entre los que se encuentran las redes bayesianas, los diagramas de influencia, los procesos de decisión de Markov factorizados, etc. Este informe técnico describe cómo se ha diseñado e implementado la interfaz gráfica de usuario de OpenMarkov. Palabras clave Modelos gráficos probabilistas. OpenMarkov. Interfaz gráfica. Swing. Mantenibilidad. Usabilidad. Internacionalización. JavaHelp.

Upload: buiminh

Post on 06-Oct-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

Informe Técnico CISIAD-10-03. UNED, Madrid, 2010

DISEÑO E IMPLEMENTACIÓN DE LA INTERFAZ GRÁFICA DE OPENMARKOV

JUAN LUIS GOZALO FERNÁNDEZ

MANUEL ARIAS CALLEJAFRANCISCO JAVIER DIÉZ VEGAS

Dpto. Inteligencia Artificial. UNEDc/ Juan del Rosal, 16 28040 Madrid. Spain

ResumenOpenMarkov es una herramienta de código abierto, escrita en Java, para la

construcción y evaluación de modelos gráficos probabilistas, entre los que se

encuentran las redes bayesianas, los diagramas de influencia, los procesos de

decisión de Markov factorizados, etc. Este informe técnico describe cómo se ha

diseñado e implementado la interfaz gráfica de usuario de OpenMarkov.

Palabras clave

Modelos gráficos probabilistas. OpenMarkov. Interfaz gráfica. Swing.

Mantenibilidad. Usabilidad. Internacionalización. JavaHelp.

Índice de contenido

Índice de contenido.......................................................................................2Índice de ilustraciones....................................................................................3Índice de tablas.............................................................................................4Introducción.................................................................................................6

Alcance del informe técnico..........................................................................7Desarrollo de este trabajo............................................................................7

Requisitos de OpenMarkov..............................................................................9Análisis del sistema......................................................................................12

Casos de uso............................................................................................12Requisitos no funcionales...........................................................................20

Diseño estático del sistema...........................................................................21Diseño detallado del sistema.........................................................................25

Paquete principal (openMarkov.gui.main).....................................................25Paquete portapapeles (openMarkov.gui.clipboard).........................................27Paquete componentes (openMarkov.gui.components).....................................27Paquete diálogos (openMarkov.gui.dialogs)...................................................31Paquete editores (openMarkov.gui.edit).......................................................37Paquete edición (openMarkov.gui.edition).....................................................37Paquete ayuda (openMarkov.gui.help)..........................................................38Paquete entrada/salida (openMarkov.gui.io)..................................................38Paquete internacionalización (openMarkov.gui.localize)..................................39Paquete MDI (openMarkov.gui.mdi).............................................................42Paquete menús y barra edición (openMarkov.gui.menutoolbar).......................42Paquete redes (openMarkov.gui.networks)....................................................43Paquete recursos (openMarkov.gui.resources)...............................................44Paquete deshacer (openMarkov.gui.undo)....................................................45Paquete utilidades (openMarkov.gui.utils).....................................................45Paquetes pendientes: Paquete loader (openMarkov.gui.loader)........................46Paquetes pendientes: Paquete desarrollo (openMarkov.gui.development)..........49

Mantenibilidad.............................................................................................51Usabilidad...................................................................................................54

Internacionalización..................................................................................54El uso del color.........................................................................................57Ayuda en línea para el usuario final ............................................................62

Tareas futuras.............................................................................................67Conclusiones...............................................................................................70Listado siglas, abreviaturas y acrónimos ........................................................74Anexos.......................................................................................................76

Anexo 1 - Casos de uso de la interfaz gráfica de OpenMarkov.........................77Anexo 2 – OpenMarkovDTDSpec.xml para definir carga de OpenMarkov..........119Anexo 3 – OpenMarkovMenu.xml como ejemplo del cargador de OpenMarkov. 121Anexo 4 – Documento de ayuda en línea al usuario......................................123

Bibliografía................................................................................................124

Informe Técnico CISIAD-10-03 Índice de ilustraciones

Índice de ilustraciones

Ilustración 1: Apertura y cierre de redes.........................................................14Ilustración 2: Gestión de espacio visual..........................................................15Ilustración 3: Gestión de selección de elementos visuales en una red..................16Ilustración 4: Gestión de edición de redes (nodos y enlaces)..............................17Ilustración 5: Gestión de ventana de mensajes a usuario..................................18Ilustración 6: Gestión de configuración de propiedades de usuario......................19Ilustración 7: Gestión de ayuda al usuario.......................................................20Ilustración 8: Arquitectura de componentes del GUI en la fase 1........................24Ilustración 9: Arquitectura de paquetes del GUI al final de este informe técnico....25Ilustración 10: Arquitectura de paquetes de gui.dialogs ....................................26Ilustración 11: Clases del componente principal...............................................27Ilustración 12: Arranque del splash................................................................29Ilustración 13: Jerarquía de clases de tablas y diálogos.....................................37Ilustración 14: Activación de un dialogo elegido por el usuario vía menú.............38Ilustración 15: Dialogo de edición para propiedades de usuario..........................41Ilustración 16: Activación de la ayuda en línea al seleccionar el elemento de menú.................................................................................................................44Ilustración 17: ResourceBundleEditor editando Dialog.properties........................46Ilustración 18: Activación del dialogo de cambio de idioma................................46Ilustración 19: Evento de cambio de idioma....................................................47Ilustración 20: C2_16.jpg para títulos de ventanas en OpenMarkov....................51Ilustración 21: OpenMarkovSplashLogo.jpg para la aplicación OpenMarkov..........51Ilustración 22: Enerjy Software: Puntuación del paquete GUI = 8.8....................62Ilustración 23: Enerjy Software: Puntuación global de OpenMarkov = 8.8............62Ilustración 24: Página web de Enerjy Software: Puntuación de WEKA = 5.6.........62Ilustración 25: Relación de internacionalización................................................65Ilustración 26: Dialogo de usuario para cambio de lenguaje (por defecto)............65Ilustración 27: Cambio del texto ejemplo al seleccionar un idioma .....................66Ilustración 28: Idiomas permitidos en el cambio de lenguaje.............................66Ilustración 29: Colores usados en el menú principal y barra de herramientas.......68Ilustración 30: Herramienta Selección marcada................................................69Ilustración 31: Cursores correspondientes a las herramientas seleccionadas........69Ilustración 32: Colores usados al visualizar/editar redes....................................69Ilustración 33: Uso del color en las pantallas de dialogo con el usuario................70Ilustración 34: Colores en la edición de tablas de potenciales.............................71Ilustración 35: Gestión de ayuda al usuario.....................................................74Ilustración 36: Ayuda en línea para usuarios (en español).................................75

Informe Técnico CISIAD-10-03 Página 4 de 125

Informe Técnico CISIAD-10-03 Índice de tablas

Índice de tablas

Caso de uso 1: Inicio de la aplicación...................................................86Caso de uso 2: Finalización de la aplicación...........................................87Caso de uso 3: Creación de una red.....................................................88Caso de uso 4: Cierre de una red.........................................................88Caso de uso 5: Carga de una red.........................................................89Caso de uso 6: Almacenamiento de una red..........................................90Caso de uso 7: Almacenamiento de una red como..................................90Caso de uso 8: Selección de una red....................................................91Caso de uso 9: Selección de la red siguiente o anterior...........................92Caso de uso 10: Modificación de la disposición de las ventanas................92Caso de uso 11: Modificación de la presentación de los nodos..................93Caso de uso 12: Modificación del factor de escala – Forma 1....................93Caso de uso 13: Modificación del factor de escala a través de la caja de diálogo............................................................................................94Caso de uso 14: Elección del tipo de edición..........................................95Caso de uso 15: Actualización de los menús al cambiar la selección de los elementos........................................................................................96Caso de uso 16: Deselección de todos los elementos..............................97Caso de uso 17: Selección de todos los elementos.................................97Caso de uso 18: Selección de un solo nodo o enlace...............................98Caso de uso 19: Selección de un nodo más o de un enlace más...............98Caso de uso 20: Deselección de un solo nodo o enlace............................99Caso de uso 21: Selección de varios nodos con el rectángulo de selección100Caso de uso 22: Actualización de los menús al modificar una red............101Caso de uso 23: Creación de un nodo.................................................102Caso de uso 24: Deshacer o rehacer la creación de un nodo..................103Caso de uso 25: Creación de un enlace...............................................104Caso de uso 26: Deshacer la creación de un enlace..............................105Caso de uso 27: Rehacer la creación de un enlace................................105Caso de uso 28: Desplazamiento de varios nodos.................................106Caso de uso 29: Deshacer o rehacer el desplazamiento de varios nodos. .107Caso de uso 30: Eliminación de varios elementos.................................109Caso de uso 31: Deshacer la eliminación de varios elementos................110Caso de uso 32: Rehacer la eliminación de varios elementos..................110Caso de uso 33: Modificación de las propiedades de una red..................111Caso de uso 34: Deshacer la modificación de las propiedades de una red.112Caso de uso 35: Rehacer la modificación de las propiedades de una red. .112Caso de uso 36: Modificación de las propiedades de un nodo.................113Caso de uso 37: Deshacer la modificación de las propiedades de un nodo 114Caso de uso 38: Rehacer la modificación de las propiedades de un nodo..114Caso de uso 39: Copia de nodos al portapapeles..................................115Caso de uso 40: Corte de nodos al portapapeles..................................116

Informe Técnico CISIAD-10-03 Página 5 de 125

Informe Técnico CISIAD-10-03 Índice de tablas

Caso de uso 41: Deshacer el corte de nodos al portapapeles..................117Caso de uso 42: Rehacer el corte de nodos al portapapeles....................117Caso de uso 43: Pegado de nodos al portapapeles................................118Caso de uso 44: Deshacer el pegado de nodos del portapapeles.............119Caso de uso 45: Rehacer el pegado de nodos del portapapeles...............119Caso de uso 46: Cierre de la ventana de mensajes...............................119Caso de uso 47: Paso a primer plano de la ventana de mensajes............119Caso de uso 48: Copia del contenido de la ventana de mensajes............120Caso de uso 49: Limpieza de la ventana de mensajes...........................120Caso de uso 50: Abrir ventana de configuración de usuario....................120Caso de uso 51: Cerrar ventana de configuración de usuario..................121Caso de uso 52: Cerrar ventana de configuración de usuario con cancelación....................................................................................................121Caso de uso 53: Salvar configuración de usuario..................................121Caso de uso 54: Importar configuración de usuario...............................121Caso de uso 55: Exportar configuración de usuario...............................122Caso de uso 56: Abrir ventana principal de ayuda de la aplicación..........122Caso de uso 57: Abrir ayuda de una ventana o elemento.......................122Caso de uso 58: Buscar elementos de ayuda.......................................123Caso de uso 59: Cambiar lenguaje de la aplicación...............................123Caso de uso 60: Añadir un padre a un nodo........................................123Caso de uso 61: Eliminar padre de un nodo.........................................124Caso de uso 62: Cambiar el nombre de un nodo...................................124Caso de uso 63: Añadir un estado de un nodo......................................124Caso de uso 64: Eliminar un estado de un nodo...................................125Caso de uso 65: Cambiar el nombre a un estado de un nodo.................125

Informe Técnico CISIAD-10-03 Página 6 de 125

Informe Técnico CISIAD-10-03 Introducción

IntroducciónLos modelos gráficos probabilistas, tales como redes bayesianas y

diagramas de influencia, surgieron en la década de los 80 y se convirtieron

en una herramienta muy usada en el razonamiento con incertidumbre en los

problemas del mundo real. Fueron utilizadas por grupos especializados de

universidades, grandes empresas, etc.

Para poder manejarlas por un publico más general se necesitaban

sistemas que permitieran su uso de un modo sencillo. Durante los últimos

años, se han desarrollado aplicaciones software que han tratado de dar

solución a esta demanda mediante la creación y edición de modelos gráficos

probabilistas.

Unas son de “código abierto” que permiten que se modifique libremente

su código y son el resultado de uno o varios equipos de investigación con la

finalidad de servir de base para el desarrollo de nuevos modelos y

algoritmos. Ejemplos de este primer tipo son las aplicaciones BNT1, gR2,

Weka3 o Elvira [6].

Hay otro grupo de aplicaciones, normalmente comerciales, que no

permiten estas modificaciones de su código, como Hugin4 o Netica5, y son

únicamente interesantes para usuarios que desarrollen sistemas expertos

con técnicas ya conocidas, pero no para investigadores.

Finalmente, muchas otras aplicaciones6 no han llegado a ver la luz al

1 Bayes Net Toolkit (de Kevin Murphy) es un Toolbox de MATLAB que implementa redes bayesianas, diagramas de influencia, modelos dinámicos, aprendizaje e inferencia con variables discretas y continuas. Sus limitaciones se deben fundamentalmente a su lentitud, a no ser orientado a objetos y a la dependencia con el programa de pago MATLAB.

2 GR surgió como un subproyecto del lenguaje para cálculos estadísticos R.3 WEKA es un informe técnico de la Universidad de Waikato (Nueva Zelanda), orientado

fundamentalmente a la minería de datos. Tiene una buena documentación y muchos algoritmos implementados. Su principal limitación es no ser una aplicación de propósito general. Es el gran competidor de la aplicación OpenMarkov como software libre. Se puede obtener más información en HTTP://www.cs.waikato.ac.nz/ml/weka

4 Hugin es un programa de ayuda para la toma de decisión usando redes bayesianas y diagramas de influencia. Se puede encontrar más información en HTTP://www.hugin.com

5 Más información sobre Netica Bayesian Networks from Norsys en HTTP://www.norsys.com/netica.html

6 Para una información detallada de las aplicaciones ver la lista elaborada por Kevin Murphy en

Informe Técnico CISIAD-10-03 Página 7 de 125

Informe Técnico CISIAD-10-03 Introducción

abandonarse su desarrollo tales como Open Bayes, PNL7 y OBP8.

OpenMarkov surgió como un rediseño de la aplicación Elvira aunque

partiendo desde cero en su desarrollo [17]. Elvira fue fruto de un informe

técnico coordinado de I+D que se desarrolló entre los años 1997 y 2000 en

ocho universidades españolas. La principal limitación en el desarrollo de

Elvira ha sido que la búsqueda de resultados a corto plazo dificultó la

aplicación de los principios de la metodología de desarrollo de software [6].

El objetivo principal de OpenMarkov es conseguir una herramienta, similar

en funcionalidad, que sea usada para confeccionar modelos del mundo real

basados en los modelos gráficos probabilistas y cuya construcción esté

determinada por la utilización de unas buenas prácticas de desarrollo de

software en todas las fases del mismo.

Alcance del informe técnico

OpenMarkov es el sustituto del programa Elvira y, como tal, su

funcionalidad de cara a los usuarios debe ser similar.

Actualmente, OpenMarkov está en fase de desarrollo final y su diseño se

ha separado en varios bloques.

Este informe técnico está englobado dentro del bloque de construcción de

la interfaz de usuario para cubrir sus cuatro aspectos principales:

1) Elementos generales de la interfaz gráfica: marco, menús, ventanas...

2) Edición de tablas de probabilidad, utilidad y modelos canónicos.

3) Explicación de nodos y enlaces.

4) Análisis de sensibilidad.

Desarrollo de este trabajo

La herramienta OpenMarkov, que hasta mediados de 2010 se denominaba http://www.cs.ubc.ca/~murphyk/Software/bnsoft.html

7 Más información sobre Probabilistic Network Library en http://eng.itlab.unn.ru/?dir=1398 Más información sobre Open Bayes for Python en http://www.openbayes.org/

Informe Técnico CISIAD-10-03 Página 8 de 125

Informe Técnico CISIAD-10-03 Introducción

Carmen, fue el objeto de la tesis doctoral del Manuel Arias [20], profesor del

Dpto. de Inteligencia Artificial de la UNED, que tuvo como director al Prof.

Francisco Javier Díez.

La interfaz de esta herramienta fue construida inicialmente por José

Enrique Mendoza, como trabajo de fin de carrera, supervisado por ambos

profesores, entre 2006 y 2008. De abril a julio de 2008, Alberto M. Ruiz

Lafuente añadió algunas funcionalidades más.

Este informe técnico es una versión revisada de la memoria del proyecto

de fin de carrera de Juan Luis Gozalo, que fue realizado entre 2008 y 2010,

supervisado también por ambos profesores. El trabajo consistió realizar un

proceso de reingeniería sobre dicha interfaz aplicando principios de

mantenibilidad y usabilidad, amplía la interfaz con características multi-

idioma y ayudas en línea para el usuario final y revisa otros aspectos

orientados a la mantenibilidad futura del código.

Informe Técnico CISIAD-10-03 Página 9 de 125

Informe Técnico CISIAD-10-03 Requisitos de OpenMarkov

Requisitos de OpenMarkovLa creación de una interfaz de usuario es uno de los elementos de éxito

desde el punto de la usabilidad de cualquier programa informático. Este

informe técnico tiene como objetivo realizar el diseño de creación de la

interfaz de usuario para el programa OpenMarkov, añadiendo aquellas

funcionalidades necesarias, con el objetivo de permitir que su extensión

futura sea rápida y cómoda. Veamos en detalle cuáles son los objetivos

particulares que se deben cumplir:

• La interfaz debe disponer de un dialogo para la edición de

propiedades del nodo lo más independiente posible del resto de los

componentes de la aplicación.

• Al mismo tiempo, la interfaz debe disponer de un diálogo para la

edición de propiedades del nodo que sea modular de modo similar a los

elementos construidos en el resto del informe técnico.

• Debe ser capaz además de editar las tablas de probabilidad en las

redes bayesianas y diagramas de influencia.

• Debe proporcionar al usuario la posibilidad de crear nuevas tablas

de probabilidad mediante la presentación de valores por defecto

basadas en los atributos ya seleccionados del nodo tales como estados

de la variable asociada y los padres en el grafo.

• Debe permitir la carga de los dos tipos de modelos gráficos

probabilistas desde un fichero, cuyo contenido describirá el modelo

usando los formatos permitidos (Elvira, Hugin o el propio de

OpenMarkov). Una vez interpretado el contenido del archivo, el modelo

debe ser presentado en pantalla para su posterior edición por parte del

usuario. En particular, al extender en este informe técnico a la edición

de tablas debe comprobarse que todas los atributos relativos a los

potenciales son leídos correctamente.

• Asimismo, debe facilitar el almacenamiento de una red bayesiana,

Informe Técnico CISIAD-10-03 Página 10 de 125

Informe Técnico CISIAD-10-03 Requisitos de OpenMarkov

un diagrama de influencia o una cadena de Markov en un archivo,

utilizando el mismo formato citado en el párrafo anterior, incluyendo las

tablas de potenciales creadas y editadas por el usuario.

• El usuario debe tener la posibilidad de cambiar las propiedades

extendidas de la red incluidas en esta fase, tales como tablas de valores

discretizados y tablas de probabilidades.

• Para evitar que cualquier modificación sobre la red o alguno de

sus elementos sea definitiva, la interfaz debe extender las capacidades

actuales y dar al usuario la posibilidad de deshacer modificaciones así

como rehacer las modificaciones.

• Dado que este software será usado en diferentes países, los

módulos de internacionalización de los textos, que por defecto

presentan los literales de la interfaz en inglés, se deben extender para

permitir el cambio de idioma de presentación a decisión del usuario

durante el uso del programa. El software debe estar preparado para

permitir añadir textos en otros idiomas sin tener que modificar el código

fuente.

• Debe incluirse una ayuda de usuario teniendo en cuenta que dicho

usuario tiene conocimientos de técnicas de modelado gráfico de redes

de probabilidades pero también que puede no tenerlas. Asimismo, debe

incorporarse manuales para el futuro desarrollador de OpenMarkov

tanto en la ayuda interna del programa como en los manuales de los

que este documento es parte integrante.

• La interfaz de usuario debe ser intuitiva y fácil de usar, facilitando

un entorno de trabajo que use las tecnologías gráficas actuales.

Con todos estos elementos en cuenta, tanto la documentación externa

(este documento) como la documentación interna (ayuda en línea para

desarrollador y comentarios de código fuente, en inglés), deben ser

abundantes y aclaratorias para que otra persona pueda continuar con el

Informe Técnico CISIAD-10-03 Página 11 de 125

Informe Técnico CISIAD-10-03 Requisitos de OpenMarkov

trabajo. El diseño y la codificación del nuevo sistema deben estar preparados

para su posterior mantenimiento.

Informe Técnico CISIAD-10-03 Página 12 de 125

Informe Técnico CISIAD-10-03 Análisis del sistema

Análisis del sistemaDurante esta fase se revisa la documentación existente y se consigue la

información necesaria para poder continuar con el diseño del nuevo sistema.

Para ello, se deben obtener los requisitos que hagan que el nuevo software

cumpla los objetivos esperados [19].

En primer lugar se detallan los casos de uso que representan los

requisitos funcionales del sistema incluyendo como anexo el detalle general

de los casos de uso como parte de la documentación general del informe

técnico. Después se enumerarán los requisitos no funcionales que completan

el conjunto total de requisitos [19].

Casos de usoAntes de ver cada caso de uso en particular es necesario presentar los

diagramas resumen para ver cuáles son los casos de uso, las relaciones

entre ellos y como se han dividido en varios sub-diagramas correspondientes

a las áreas funcionales principales.

En la primera actividad realizada tras la lectura de la documentación de la

fase anterior, y con el objetivo de la mantenibilidad del sistema, se ordenan

los casos de uso bajo un prisma funcional:

• Apertura y Cierre de redes

• Gestión del espacio visual

• Gestión de selección de elementos visuales de una red

• Gestión de edición de redes (nodos y enlaces)

• Gestión de la ventana de mensajes a usuario

• Gestión de la configuración de usuario

• Gestión de ayuda de usuario

• Gestión de rehacer y deshacer acciones y su efecto en los menús

Informe Técnico CISIAD-10-03 Página 13 de 125

Informe Técnico CISIAD-10-03 Análisis del sistema

Con ello, se consigue una visión inicial mucho más cercana al

comportamiento funcional global de la interfaz visual sobre la que se puede

iniciar el análisis. Se muestran a continuación los diferentes esquemas

indicados.

Los casos de uso agrupados bajo el esquema de Apertura y cierre de

redes especifican las funcionalidades asociadas a la apertura y cierre de la

aplicación y a las relacionadas al realizar acciones de apertura y cierre de las

redes.

Informe Técnico CISIAD-10-03 Página 14 de 125

Ilustración 1: Apertura y cierre de redes

Informe Técnico CISIAD-10-03 Análisis del sistema

Los casos de uso agrupados bajo el esquema de Gestión de espacio visual

especifican las funcionalidades de la aplicación para la manipulación de

elementos visuales.

Informe Técnico CISIAD-10-03 Página 15 de 125

Ilustración 2: Gestión de espacio visual

Informe Técnico CISIAD-10-03 Análisis del sistema

Los casos de uso agrupados bajo el esquema de Gestión de selección de

elementos visuales en una red especifican las funcionalidades de la

aplicación asociadas a la manipulación visual de elementos de la red

Informe Técnico CISIAD-10-03 Página 16 de 125

Ilustración 3: Gestión de selección de elementos visuales en una red

Informe Técnico CISIAD-10-03 Análisis del sistema

Los casos de uso agrupados bajo el esquema de Gestión de edición de

redes (nodos y enlaces) especifican las funcionalidades de la aplicación

asociadas a la manipulación de nodos y enlaces

Informe Técnico CISIAD-10-03 Página 17 de 125

Ilustración 4: Gestión de edición de redes (nodos y enlaces)

Informe Técnico CISIAD-10-03 Análisis del sistema

Los casos de uso agrupados bajo el esquema de Gestión de ventana de

mensajes a usuario especifican las funcionalidades de la aplicación

asociadas a la manipulación de la ventana donde se le muestran al usuario

los mensajes de aviso o error de la aplicación.

Informe Técnico CISIAD-10-03 Página 18 de 125

Ilustración 5: Gestión de ventana de mensajes a usuario

Informe Técnico CISIAD-10-03 Análisis del sistema

Los casos de uso agrupados bajo el esquema de Gestión de ventana de

configuración de propiedades de usuario especifican las funcionalidades de la

aplicación asociadas a las acciones permitidas sobre la configuración

personalizable del usuario.

Informe Técnico CISIAD-10-03 Página 19 de 125

Ilustración 6: Gestión de configuración de propiedades de usuario

Informe Técnico CISIAD-10-03 Análisis del sistema

Los casos de uso agrupados bajo el esquema de Gestión de ayuda al

usuario especifican las funcionalidades de la aplicación asociadas a las

acciones disponibles para mostrar elementos de ayuda al usuario dentro de

la aplicación.

Los casos de uso agrupados bajo el esquema de Rehacer acciones y

Deshacer acciones especifican, respectivamente, las funcionalidades

permitidas para rehacer y deshacer acciones visuales dentro de las ventanas

de trabajo y la dependencia con la actualización de menús de la aplicación.

En el anexo se detallan la funcionalidad, en lenguaje natural, de cada caso de uso de los mostrados en los diagramas precedentes. Cada uno de ellos está descrito en una tabla con dos columnas: la primera describe el curso normal de ejecución y la segunda describe las alternativas, si existen, que pueden surgir en cada uno de los pasos.

Informe Técnico CISIAD-10-03 Página 20 de 125

Ilustración 7: Gestión de ayuda al usuario

Informe Técnico CISIAD-10-03 Análisis del sistema

Requisitos no funcionalesAdemás de cumplir los casos de uso, el nuevo sistema debe tener las

siguientes características que aseguren cumplimiento de los estándares de

calidad:

• Fácil de usar y ser intuitiva: el usuario debe encontrarse cómodo

cuando la esté usando y obtener el mayor beneficio de ella.

• Código abierto: Su código debe ser abierto y estar disponible para

cualquier persona que mantenga la aplicación o que desee aprender de

su diseño y codificación.

• Multiplataforma: para que pueda ser ejecutada en cualquier

sistema operativo sin ninguna modificación.

• Escalable: ya que debe trabajar con modelos gráficos

probabilistas muy pequeños y muy grandes.

• Extensible: para que permita acomodar nuevas funcionalidades

con el mínimo esfuerzo.

• Eficiente: para que en su ejecución haga un buen uso de los

recursos del sistema.

• Robusta: para que pueda continuar su ejecución aunque se

enfrente a situaciones anormales.

• Reusable: para que sus paquetes y clases sean usadas tanto en

éste como en otros desarrollos.

• Mantenible: para que su desarrollo esté orientado a los futuros

cambios realizando el menor número de modificaciones posibles y en el

menor tiempo posible, asegurando además que sea fácilmente

distribuible y actualizable.

Informe Técnico CISIAD-10-03 Página 21 de 125

Informe Técnico CISIAD-10-03 Diseño estático del sistema

Diseño estático del sistemaDespués de obtener los requisitos, es necesario iniciar el diseño del

sistema. Para ello se estructura esta fase en dos diferenciadas: visión

estática con la relación de paquetes y su marco de relaciones y después la

visión detallada del diseño con las clases integrantes de cada paquete y las

secuencias de llamada entre ellas [16]. Se reflejan las modificaciones

realizadas sobre la fase anterior [7]. Lo más importante es reseñar que, en

la descripción del diseño, se ha determinado reagrupar los elementos

dividendo la nueva aplicación en diferentes funcionalidades.

Así pues, en primer lugar se ve primero el diseño estático del sistema con

su división en paquetes usando para ello un diagrama UML de componentes

y después, se ve el diseño detallado del sistema donde se ve cada uno de

estos paquetes de forma detallada usando para ello, si es necesario, un

diagrama UML de clases y un diagrama UML de secuencias [16].

Como se acaba de indicar para el diseño estático, el sistema se organiza

en un conjunto de paquetes bien diferenciados que se relacionan entre sí

para conseguir que funcione el sistema completo. Para tener una perspectiva

global del sistema antes de ver cada paquete por separado, en el diagrama

de componentes global se puede ver cuáles son los paquetes y con cuáles se

relaciona cada uno. Para poder explicar mejor las razones de la reagrupación

de paquetes del GUI, se muestra primero el esquema inicial creado con los

primeros requisitos en una primera aproximación y luego el esquema final

tal y como queda una vez que todos los elementos se acaban de analizar:

Informe Técnico CISIAD-10-03 Página 22 de 125

Informe Técnico CISIAD-10-03 Diseño estático del sistema

En este diagrama no se muestra el paquete gui.localize (lenguaje) que

se elimina del diagrama para no complicarlo excesivamente, ya que todos

los paquetes, incluidos los sub-paquetes de edición, hacen uso de él.

La arquitectura de paquetes en uso al final de este informe técnico queda

Informe Técnico CISIAD-10-03 Página 23 de 125

Ilustración 8: Arquitectura de componentes del GUI en la fase 1

Informe Técnico CISIAD-10-03 Diseño estático del sistema

como se muestra en el esquema siguiente. Se ha optado por agrupar algunos de los paquetes en un nivel adicional de agregación para evitar una

excesiva diversidad en el primer nivel (paquetes resources, dialogs).

De hecho, la agrupación principal se produce en el paquete dialogs para

Informe Técnico CISIAD-10-03 Página 24 de 125

Ilustración 9: Arquitectura de paquetes del GUI al final de este informe técnico

Informe Técnico CISIAD-10-03 Diseño estático del sistema

englobar los sub-paquetes siguientes:

La manera que tienen de relacionarse unos con otros se ve en los

diagramas de clases que se muestran en el capítulo siguiente de Diseño

Detallado. Asimismo, se comenta la función y los objetivos de cada nuevo

paquete completando esta explicación con diagramas de clases y de

secuencias necesarios. Si un paquete no se ha modificado se indicará

específicamente haciendo referencia al trabajo inicial de los Proyectos Fin de

Carrera de José Enrique Mendoza [7]. y, en caso de haberse modificado, se

mostrará el diagrama de clases y/o de secuencias modificado junto con su

apariencia anterior si fuese conveniente.

Informe Técnico CISIAD-10-03 Página 25 de 125

Ilustración 10: Arquitectura de paquetes de gui.dialogs

Informe Técnico CISIAD-10-03 Diseño detallado del sistema

Diseño detallado del sistema

Paquete principal (openMarkov.gui.main)Este es el paquete principal de OpenMarkov encargado de lanzar la aplicación e inicializar los diferentes elementos auxiliares y ventanas de trabajo, que básicamente son el menú principal y un panel de contenidos donde se sitúan las barras de herramientas y el entorno multidocumento. Se ha revisado para incluir en el arranque la presentación de una ventana de carga (splash screen) en un hilo de ejecución independiente [5] y la posibilidad de carga de elementos de modo dinámico.

Diagrama de clasesNo se ha modificado el esquema de clases existente en este paquete con respecto al trabajo anterior [7] aunque se incluye a modo ilustrativo.

La clase “OpenMarkov” es la clase que arranca el programa desde la línea de comando y que está incluida en el paquete principal OpenMarkov.

De las clases indicadas en el diagrama solo MainGUI es accesible de modo

público.

Diagrama de secuenciasVeamos en el inicio de la aplicación cómo se ha modificado la llamada para hacer que se muestre una ventana de “splash”9 mientras se terminan de

9 La ventana de Splash da un aspecto más profesional a la aplicación y permite mantener entretenido al usuario haciéndole ver el grado de avance del inicio del programa. Es una buena practica de

Informe Técnico CISIAD-10-03 Página 26 de 125

Ilustración 11: Clases del componente principal.

Informe Técnico CISIAD-10-03 Diseño detallado del sistema

cargar e iniciar los diferentes elementos de la aplicación en un hilo paralelo

de ejecución.

diseño de interfaces de usuario.[21]

Informe Técnico CISIAD-10-03 Página 27 de 125

Ilustración 12: Arranque del splash

Informe Técnico CISIAD-10-03 Diseño detallado del sistema

Clases del Paquete• Clase MainGUI – Crea la ventana principal donde se ubica el panel

principal, usando la ventana de splash durante la carga de paquetes y leyendo las preferencias de una fuente externa.

• Clase MainPanel – Compone el panel de trabajo, con sus menús, áreas de trabajo, ventana de mensajes e iconos de herramientas.

• Clase MainPanelListenerAssistant – es una clase auxiliar para la gestión de los eventos del panel principal, mejorando la legibilidad del código de la clase anterior.

• Clase MainPanelMenuAssistant – es una clase auxiliar para la gestión de los eventos relacionados con las opciones de menú principal, iconos de herramientas y de menús contextuales al pulsar el botón derecho del ratón sobre ciertos elementos. Ayuda a la legibilidad del código de la clase anterior.

Paquete portapapeles (openMarkov.gui.clipboard)En este paquete, responsable de la gestión de las acciones de copia de elementos dentro de la misma red o entre diferentes redes [7], se han realizado pequeñas modificaciones. Cada instancia de OpenMarkov (suponiendo que se abran diferentes ejecuciones de la aplicación simultáneamente) tiene su propio portapapeles.

Diagrama de clasesNo se ha modificado ni el contenido del paquete ni su agrupación [7].

Diagrama de secuenciasNo se ha modificado el uso de este paquete en la aplicación [7]

Clases del paquete• Clase ClipboardContent. Se ha incorporado el patrón Singleton [1] [3]

y se han reajustado algunos de los métodos internos para asegurar que no tienen visibilidad innecesaria.

• Clase ClipboardManager. Se han restringido visibilidad de algunos métodos para cumplir las mejores prácticas y evitar errores de uso no intencionado.

• Clase ContentDataFlavor. No se ha alterado [7]• Clase ClipboardListener. No se ha alterado [7].

Paquete componentes (openMarkov.gui.components)Dentro del proceso de aseguramiento de la mantenibilidad, se crea el

Informe Técnico CISIAD-10-03 Página 28 de 125

Informe Técnico CISIAD-10-03 Diseño detallado del sistema

paquete de componentes. Es aquí donde se sitúan diferentes elementos visuales tales como tipos de tablas con comportamientos especiales, desplegables (combo-box) y elementos variados que pueden ser en el futuro encapsulados como beans para su uso de modo gráfico en paquetes de edición.

Clases del paqueteDentro de este paquete, podemos agrupar las diferentes clases según

cuatro categorías: Gestión de eventos, Gestión de elementos visuales,

Gestión de paneles y tablas; y clases no usadas creadas para uso futuro. Se

muestran a continuación:

Clases relacionadas con gestión de eventos:

• Clase ElementObservable – esta clase es una implementación del

patrón Observador-Observable [1] [3] entre paneles de propiedades del

nodo, específicamente para los eventos de cambio de nombre del nodo,

cambio de padres o cambio de estados del nodo y las tablas

correspondientes de probabilidad.

• Clase NodeNameChangeActionEvent - Es el evento que se lanza

cuando se cambia el nombre de un nodo en el dialogo correspondiente.

Es escuchado por la clase que extienda la clase base

ElementObservable.

• Clase ParentChangeActionEvent – Es el evento que se lanza

cuando se cambia un padre de un nodo en el dialogo correspondiente.

Es escuchado por la clase que extienda la clase base

ElementObservable.

• Clase StatesChangeActionEvent – Es el evento que se lanza

cuando se cambian los estados de un nodo en el dialogo

correspondiente. Es escuchado por la clase que extienda la clase base

ElementObservable.

Clases relacionadas con componentes visuales:

• Clase AlgorithmRelationTypes - Esta clase se usa en el panel de

Informe Técnico CISIAD-10-03 Página 29 de 125

Informe Técnico CISIAD-10-03 Diseño detallado del sistema

probabilidades del nodo para mostrar los algoritmos de relación posibles

para las probabilidades del nodo en el combo-box que está colocado en

dicho panel dependiendo del lenguaje. Si hay que añadir un nuevo

algoritmo, es necesario incluir aquí un nuevo elemento a mostrar en el

método fillList() así como incluir los correspondientes literales a mostrar

en los ficheros de recurso de cada lenguaje que use OpenMarkov. En

este momento, los elementos que se pueden mostrar son los

equivalentes a las relaciones siguientes “General”, “OR”, “MaxCausal”,

“MaxGeneral”, “AND”, "MINCausal" y "MINGeneral", aunque solamente

es usado en este momento la relación General.

• Clase DiscretizeLimitsComboBoxRenderer – clase auxiliar cuya

función es poner el color adecuado y el valor seleccionado dentro del

combo-box usado para mostrar los únicos valores permitidos en los

límites de los intervalos discretizados.

• Clase LastRecentFilesMenuItem – clase extendida de JmenuItem

para representar en el menú de la aplicación el fichero leído con

anterioridad (hasta la posición n que se determine). De este modo,

cuando se produce el evento de cambio de idioma, la aplicación conoce

que no debe actuar con este componente ya que no es dependiente de

idioma.

Clases relacionadas con gestión de paneles y tablas:

• Clase DiscretizeTableModel – esta clase guarda el modelo de la

tabla de valores discretizados bajo el modelo MVC10 usado para la

representación de tablas.

• Clase DiscretizeTablePanel – este es el componente que dibuja el

panel donde se incluye la tabla de presentación de valores

discretizados. Incluye los comportamientos de creación de tablas con

valores iniciales. Esta clase debería ser dividida en elementos más

10 Ver MVC en el glosario

Informe Técnico CISIAD-10-03 Página 30 de 125

Informe Técnico CISIAD-10-03 Diseño detallado del sistema

pequeños para cumplir con el criterio de menor tamaño posible de una

clase y menor número de métodos, lo que redundará en su mejor

mantenibilidad.

• Clase NodePotentialTable - Esta clase es la responsable de la

gestión gráfica y del modelo de datos de los potenciales del nodo tanto

para relación general como de modelos canónicos [10]. Los datos que

presenta al usuario son visualizados en diferentes modos, según el

parámetro solicitado, a saber:

• con valor de las probabilidades del nodo o valor simbólico del estado,• con valores deterministas (0's y 1's) o probabilistas (entre 0 y 1),• con todos los parámetros o sólo con los parámetros independientes,• con todos los valores o sólo con valores canónicos (sólo para datos de

modelos canónicos),• con valores netos o compuestos (sólo para datos de modelos

canónicos)• Clase NodePotentialTableCellRenderer – se ocupa de colorear la

tabla de relaciones potenciales, tanto la cabecera de los valores de los

padres, como la primera columna con los valores, como pintando en

colores alternos las filas para una mejor visualización. Esta clase es la

que se debe modificar en caso de determinar cambiar los colores,

fuentes o bordes de las celdas de la tabla.

• Clase NodePotentialTableModel – modelo para la tabla de

potenciales, definiendo que la primera columna no es visible (sólo es

para uso interno), los manejadores de datos para las columnas y los

métodos estándar en los modelos de tablas adaptados para este modelo

en particular.

• Clase PotentialsTablePanelOperations – es una clase auxiliar con

cinco métodos de calculo de apoyo:

• método checkIfPotentialsMustBeChanged – Comprueba si la lista de potenciales de un nodo dado deben ser cambiados cuando un evento de cambio de padres o de estados de un nodo se recibe.

• método doAddParent – este método auxiliar genera una nueva lista de potenciales de un nodo añadiendo una variable (un padre) a la lista previa que se le pasa en la llamada

Informe Técnico CISIAD-10-03 Página 31 de 125

Informe Técnico CISIAD-10-03 Diseño detallado del sistema

• método doDeleteParent – es el equivalente para eliminar un padre de una lista de potenciales

• calculate FirstEditableRow - calcula y devuelve la primera fila modificable de la tabla usando como parámetros el número de padres y el tipo de nodo. Es necesaria para que el gestor de la tabla sepa desde que fila puede permitir al usuario cambiar datos.

• método CalculateLastEditableRow – es el método equivalente para calcular la última fila modificable. Es necesario porque en el modelo de datos se almacena en la última fila los valores máximos de cada columna de potencial, con objeto de ser usados si el usuario elige ver la tabla como valores de estado en vez de como valores numéricos. Es un truco visual. Por tanto, esa última fila no es mostrada al usuario salvo en ese caso, y tampoco es modificable salvo en ese caso.

• método CheckIfNoPotential – comprueba si no hay potenciales para el nodo en uso

Clases no usadas:

Estas clases se han creado para evolución futura de los componentes de visualización de la aplicación:

• Clase NodePotentialFixedFirstColumnTableModel – esta clase

establece un modelo para un tipo de tabla de potenciales en el que la

primera columna, donde aparecen los nombres de las variables/nodos

no se desplazaría al realizar un desplazamiento lateral.

• Clase NodeUtilityTable – Clase para la representación de las tablas

de nodos de utilidad (y que debe ser completada su funcionalidad en la

siguiente fase de desarrollo)

Paquete diálogos (openMarkov.gui.dialogs)Ha sido necesario re-ordenar/rehacer el modo en que se habían organizado los paquetes y clases para crear y dibujar los diálogos y paneles con el objetivo de aislar elementos de visualización y hacerlos más fácilmente intercambiables. Para ello, en este paquete se han incluido todos los diferentes diálogos existentes en la aplicación, cada uno agrupado a su vez en un paquete. De este modo, será relativamente sencillo buscar los elementos a modificar en el futuro y se contribuye a seguir la regla de acoplamiento mínimo entre elementos [12].

Diagrama de clasesEn la figura se muestra cual es la relación de agregación de los diferentes

Informe Técnico CISIAD-10-03 Página 32 de 125

Informe Técnico CISIAD-10-03 Diseño detallado del sistema

paneles de edición de propiedades de un nodo. En el diseño se ha optado por encapsular cada sección de propiedades principales del nodo en clases independientes de dialogo, que permitan en un futuro su intercambio de un modo transparente e incluso dinámicamente. Estos diálogos usan en varios casos, componentes derivados de Jtable [2] [4] y de los elementos creados en la fase anterior de trabajo (KeyTable, KeyTablePanel, PrefixedKeyTablePanel y PrefixedDataTablePanel) y, al mismo tiempo, se ha considerado separar en diferentes elementos visuales independientes cada agrupación funcional (NodeDefinitionPanel, NodeDiscreteTablePanel, NodeDiscretizeTablePanel, NodeParentsPanel,

NodeProbsValuesPanel y NodeOtherPropsPanel) tal y como se ve aquí:

Informe Técnico CISIAD-10-03 Página 33 de 125

Ilustración 13: Jerarquía de clases de tablas y diálogos

Informe Técnico CISIAD-10-03 Diseño detallado del sistema

Diagrama de secuenciasCada vez que se invoca una de las opciones de menú para abrir un

dialogo, MainPanelListenerAssistant captura el evento para determinar la

acción a realizar:

• Al presionar la opción “Acerca de...”, mostrar el dialogo AboutBox

• Al presionar sobre el comentario de una red o un nodo, mostrar el

elemento de edición de comentarios HTML

• Al presionar la opción “Propiedades de red”, mostrar el dialogo

NetworkProperties

• Al presionar la opción “Propiedades del nodo”, mostrar el dialogo

NodeProperties

• Al presionar la opción “OpenMarkov Configuración”, mostrar el

dialogo Configuration

• Al presionar la opción “Cambiar idioma”, mostrar el dialogo

ChangeLanguage

Al arrancar la aplicación además se abre el dialogo Messages en la parte

inferior de la ventana principal

Dado que todos los lanzamientos de ventanas de dialogo con el usuario

son iguales, se incluye aquí el diagrama de secuencia de apertura del dialogo

de cambio de lenguaje a modo ilustrativo en el que se observa que una vez

que el asistente captura el evento del menú, obtiene del menú principal la

referencia del frame de donde se va a colgar la nueva ventana de dialogo

(son modales) y a continuación, invoca al dialogo correspondiente pasando

como parámetro de entrada el frame padre.:

Informe Técnico CISIAD-10-03 Página 34 de 125

Informe Técnico CISIAD-10-03 Diseño detallado del sistema

Paquetes y clases del paqueteSe ha creado un paquete para elementos base de algunos de los diálogos:

• paquete Common donde se ubican los componentes abstractos y las clases base en las que se apoyan los diálogos siguientes y en la que tan solo se ha añadido la clase PotentialsTablePanel.

y se ha creado un paquete por cada dialogo existente:• paquete About – dialogo para presentar los datos de “Acerca de...”

informativos del informe técnico.• paquete Comment – dialogo que se abre desde dentro de los paneles

de propiedades de redes y nodos para poner los comentarios de usuario final.

• paquete Configuration – dialogo para presentar las propiedades de usuario que se pueden personalizar (ver detalles más adelante en este documento en la sección correspondiente de configuración

• paquete Languages – dialogo para permitir al usuario el cambio de idioma durante el uso del programa.

• paquete Message – dialogo para mostrar la usuario diferentes mensajes durante el uso del programa.

• paquete Networks – dialogo para permitir la edición de propiedades de la red.

• paquete Nodes – dialogo para permitir la edición de propiedades del nodo.

• paquete Splash – ventana de splash que se muestra al arranque del

Informe Técnico CISIAD-10-03 Página 35 de 125

Ilustración 14: Activación de un dialogo elegido por el usuario vía menú

Informe Técnico CISIAD-10-03 Diseño detallado del sistema

programa.• paquete Zoom – dialogo para permitir la elección de grado de zoom de

visualización de las redes en pantalla.

De entre las clases existentes en este paquete, dada su importancia, es

necesario explicar las siguientes:

• Clase comment.CommentHTMLScrollPane – es el dialogo que se presenta al usuario cuando se hace doble click sobre la caja de comentario de los diálogos de edición de propiedades de redes y nodos. Usa las librerías eKit de Hexidec11 y el parser Jazzy encapsulado dentro del sub-paquete Swabunga12 de este paquete Comment seleccionadas en la etapa anterior de informe técnico.

• Clase about.AboutBoxDialog – es la responsable de presentar el logo, autores y algunas indicaciones básicas al usuario, y según el idioma seleccionado

• Clase common.PotentialsTablePanel – es la clase que genera el

panel usado para contener la tabla de edición de potenciales y que se

incluirá a su vez en el panel de edición de probabilidades. Esta clase es

equivalente a la clase KeyTablePanel cambiando la tabla KeyTable por la

tabla NodePotentialTable y eliminando la necesidad de botones de

adición/sustracción de filas que no son necesarias en este caso. La tabla

además tiene una primera fila editable en la posición donde comienzan

los valores de probabilidad, estando las filas entre la cero y esta fila

ocupadas por los valores de los estados de los padres de la variable.

Además, por diseño visual, las cabeceras de las columnas quedan

ocultas con altura 1 pixel.

• Clase configuration.PreferencesTableModel – es el modelo para manejar las preferencias de usuario y contiene los métodos necesarios para determinar el tipo de dato en la columna dada del modelo así como reiniciar y sincronizar las preferencias con las guardadas anteriormente en el sistema de ficheros del sistema operativo [5].

• Clase configuration.PreferencesEditorDialog – es la clase que

presenta el dialogo al usuario con una representación en forma de árbol

usando la clase PreferenceTreeNode del modelo existente en

11 Ekit es un software libre para la edición de codigo HTML desde aplicaciones o desde applets, creado por Howard Kistler, disponible en http://www.hexidec.com/home.php

12 Jazzy es un software libre que puede ser descargado desde http://sourceforge.net/projects/jazzy/

Informe Técnico CISIAD-10-03 Página 36 de 125

Informe Técnico CISIAD-10-03 Diseño detallado del sistema

PreferenceTableModel. En este dialogo se le da al usuario la posibilidad

de salvar las preferencias; reiniciar los valores por defecto de las

propiedades configurables; exportar o importar preferencias, y por

supuesto cancelar la acción.

• Clase languages.ChangeLanguageDialog – esta clase se explica en

detalle más adelante en el apartado de Internacionalización.

• Clase networks.NetworkPropertiesDialog – clase que presenta el

dialogo al usuario para modificar o establecer las propiedades generales

de una red, se ha modificado para separar en clases separadas la

gestión de los diferente panales de las propiedades por funcionalidad

(NetworkDefinition, NetworkVariables y NetworkOtherProperties)

correspondientes a cada pestaña del dialogo principal, siendo ahora

dicho componente principal responsable únicamente de leer y salvar los

datos al inicio y final de la secuencia.

• Clase splash.SplashScreenOpenMarkov - es la clase que se

menciona en el apartado de arranque de la aplicación.

• Clase nodes.CommonNodePropertiesDialog - es la clase que se

invoca cuando el usuario quiere editar las propiedades del nodo.

Informe Técnico CISIAD-10-03 Página 37 de 125

Ilustración 15: Dialogo de edición para propiedades de usuario

Informe Técnico CISIAD-10-03 Diseño detallado del sistema

Internamente extiende nodes.NodePropertiesDialog que, respecto a la

fase anterior, ha sido ampliado para incorporar la pestaña de edición de

probabilidades pero también reescrito con el fin de separar en clases

independientes y mejor mantenibles las diferentes pestañas de

propiedades como se indicó al inicio de esta sección, a saber,

• definición de nodo (NodeDefinitionPanel), • estados discretos del nodo (NodeDiscreteValuesTablePanel),• estados discretizados del nodo (NodeDiscretizeValuesTablePanel), • padres del nodo (NodeParentsPanel), • otras propiedades del nodo (NodeOtherPropertiesTablePanel), y• relaciones del nodo (NodeProbsValuesTablePanel)

Paquete editores (openMarkov.gui.edit)No se han realizado modificaciones a este paquete respecto al diseño de la fase anterior [7].

Paquete edición (openMarkov.gui.edition)Este paquete es el encargado de la edición de las redes en una ventana

del entorno multidocumento (MDI). Básicamente la edición se refiere a la

inserción y eliminación de nodos y enlaces en una red, así como la

modificación de las propiedades tanto de los nodos como de la red completa.

Se hace necesario recordar que este paquete, dada su complejidad, está

estructurado en varios subcomponentes (principal, visual y zoom).

Se han realizado pequeñas adaptaciones en este paquete para mejorar los

comentarios Javadoc, hacer llamadas a los ficheros de configuración de

propiedades de usuario (especialmente en el sub-paquete visual por el tema

de colores de los nodos y flechas de enlace) y para eliminar las llamadas a la

clase NodePropertiesDialogFactory el paquete principal una vez que se

decidió cambiar el diseño para no hacerlo vía patrón Factory [3].

Informe Técnico CISIAD-10-03 Página 38 de 125

Informe Técnico CISIAD-10-03 Diseño detallado del sistema

Paquete ayuda (openMarkov.gui.help)Este paquete es el responsable de la presentación de la ayuda en línea al usuario. Se explica en detalle en el capítulo 7.3.

Diagrama de clasesÚnicamente consta de una clase HelpViewer que presenta la ayuda.

Diagrama de secuenciasCuando el usuario, dentro del menú principal de trabajo selecciona la opción de menú de ayuda, como se muestra en la ilustración siguiente, la clase MainPanelListenerAssistant recoge la activación del elemento de menú y lanza la invocación del HelpViewer. Al realizarlo vía patrón Singleton [1] [3], en caso de que el usuario hubiese lanzado anteriormente la ayuda, no se crea una nueva instancia sino que se presenta la ya iniciada que se mantenía oculta en la aplicación.

Paquete entrada/salida (openMarkov.gui.io)Este paquete reúne las clases que se usan para que usuario pueda interactuar con el sistema de archivos tanto para leer como para escribir

Informe Técnico CISIAD-10-03 Página 39 de 125

Ilustración 16: Activación de la ayuda en línea al seleccionar el elemento de menú

Informe Técnico CISIAD-10-03 Diseño detallado del sistema

redes usando un dialogo estándar conocido. Se han realizado pequeñas adaptaciones en las clases de este paquete sobre la versión anterior [7] para mejorar los bucles FOR adaptándolos a las mejoras incluidas en Java 5.0 con lo que se consigue mejorar el rendimiento y el control de posibles excepciones al rebasar los límites. Se han incluido también nuevos comentarios Javadoc y se han revisado la visibilidad de los diferentes métodos (public, private, protected).Ninguna de estas adaptaciones ha modificado ni el diagrama de clases ni el diagrama de secuencias ya establecido en la versión anterior.

Paquete internacionalización (openMarkov.gui.localize)Los textos que aparecen en la interfaz gráfica de la aplicación serán visualizados en el idioma del sistema operativo sobre el que se ejecuta por primera vez la aplicación. Si el idioma no fuese ni español ni en inglés, y aplicando el principio de usabilidad de la internacionalización, se toma inglés por defecto.Este paquete se ha modificado para incluir los diferentes elementos que permiten ahora a OpenMarkov escuchar el evento que el usuario provoca al elegir el cambio de lenguaje y, en base a ese nuevo idioma, cambiar todas las etiquetas de los elementos de la aplicación. Esta personalización además se guarda en los archivos de configuración de modo que el usuario no tenga que volver a cambiarlo en sucesivas ocasiones.También se ha realizado una inclusión dentro del archivo Dialogs.properties de la mayor parte de las etiquetas13. Para realizar esto ha sido muy útil contar con el Plugin para Eclipse ResourceBundleEditor que permite editar al mismo tiempo los archivos de etiquetas de diversos idiomas y ver las inconsistencias entre ellos.

13 En la versión anterior, se crearon diferentes ficheros (Dialogs, Menús, Seleccionables, etc...) para separar las etiquetas según su diferente tipo de uso. Sin embargo, es más lógico agrupar las etiquetas según su agrupación funcional, independientemente de que se puedan repetir la misma cadena en diferentes etiquetas, con objeto de poder externalizar el componente como bean en el futuro.. Este es un trabajo de homogenización que debe continuar.

Informe Técnico CISIAD-10-03 Página 40 de 125

Informe Técnico CISIAD-10-03 Diseño detallado del sistema

Diagrama de secuenciasSe muestra primero el diagrama de activación del dialogo cuando el

usuario selecciona el elemento de menú correspondiente, obteniendo la

instancia del dialogo de cambio de idioma:

Una vez que el usuario cambia el idioma desde el dialogo, se produce la

Informe Técnico CISIAD-10-03 Página 41 de 125

Ilustración 18: Activación del dialogo de cambio de idioma

Ilustración 17: ResourceBundleEditor editando Dialog.properties

Informe Técnico CISIAD-10-03 Diseño detallado del sistema

siguiente serie de llamadas:

Clases del paquete• Clase Languages – es la clase que define que OpenMarkov soporta

dos idiomas en este momento (español e inglés) y se usa para cargar el

desplegable del dialogo de cambio de idioma. Si se añaden nuevos

idiomas debe incluirse en esta clase para ser mostrado como opción

nueva al usuario. (es una de las características que deberían ser

externalizadas en futuras fases del informe técnico para ser dinámico)

• Clase LocaleChangeAdapter – es una clase auxiliar para la clase

de LocaleChangeListener

• Clase LocaleChangeEvent – es el evento que se genera cuando el

usuario selecciona un cambio de idioma en el diálogo de Cambio de

Idioma

• Clase LocaleChangeListener – es el interfaz de escucha para

eventos de cambio de idioma que define el método

processLocaleChange que será invocado cuando se Acepte o se Aplique

Informe Técnico CISIAD-10-03 Página 42 de 125

Ilustración 19: Evento de cambio de idioma

Informe Técnico CISIAD-10-03 Diseño detallado del sistema

el cambio de idioma en el dialogo de usuario.

• Clase StringResource - se ha modificado para que siempre

devuelva una cadena y no genere una excepción. Si no encuentra el

elemento en los ficheros de idioma, devuelve una cadena del tipo ">>>

clave_buscada <<<“ al usuario, evitando que OpenMarkov finalice

inesperadamente y permitiendo al usuario final poder reportar el error.

• Clase StringResourceLoader - implementa ahora el interfaz

LocalChangeListener para regenerar los cambios de idioma en modo

dinámico.

• Interfaz StringResourceLocaleChangeListener - es el interfaz que

deben implementar las clases que tengan elementos dependientes de

lenguaje con el fin de ser notificados de los cambios que se produzcan.

En el apartado de internacionalización se detalla este comportamiento.

Paquete MDI (openMarkov.gui.mdi)No se han realizado modificaciones a este paquete respecto al diseño anterior [7].

Paquete menús y barra edición (openMarkov.gui.menutoolbar)Este paquete se encarga de la creación y gestión del menú principal, los

menús emergentes y la barra de herramientas. Por claridad, se estructura en

tres subpaquetes Common, Menu y Toolbar, agrupando en el paquete

Common las clases correspondientes a la gestión de constantes e

implementación de los menús, en el paquete Menu las clases de tipos de

menú (principal o emergente) y en el paquete ToolBar las clases que definen

las barras de herramientas.

Diagrama de clasesNo se ha modificado el esquema de clases respecto a la versión anterior [7].

Informe Técnico CISIAD-10-03 Página 43 de 125

Informe Técnico CISIAD-10-03 Diseño detallado del sistema

Diagrama de secuenciasNo se ha modificado el diagrama de secuencias respecto a la versión

anterior [7].

Clases del paquete modificadas• Clase common.ActionCommands - incluir los nuevos elementos de

menú para la ayuda y los cambios de lenguaje. Es en esta clase donde

se deben incluir las constantes que permiten al

MenuPanelListenerAssistant identificar las opciones de menú

correspondientes (ver página 138 de la documentación de la versión

anterior [7]) en tanto en cuanto no se cambie el diseño estático de

menús por uno dinámico.

• Clase MainMenu – se le ha añadido los menús de ayuda, se ha

eliminado el menú de visualización de nodos por nombre y se le ha

incorporado la visualización en el menú de los ficheros usados

recientemente (método getLastOpenFiles)

• Clase MainMenu, LinkPopUp, NetworkPopUp, NodePopUp – se han

incluido nombres a los diferentes elementos de menú para asegurar que

la función de cambio dinámico de idioma encuentra adecuadamente

dichos elementos en los archivos de properties correspondientes

dependientes de lenguaje.

• Clase PopUpMenuBasic – para asegurar el cambio de idioma en

tiempo de ejecución implementa la interfaz

StringResourceChangeListener.

Paquete redes (openMarkov.gui.networks)Este componente se encarga de realizar una abstracción sobre las clases que gestionan redes y nodos en el resto de paquetes de OpenMarkov, los cuales están fuera del alcance del informe técnico de interfaz. Son mayoritariamente envoltorios que aumentan las funcionalidades de las clases que envuelven principalmente ProbNode y ProbNet [20].

Informe Técnico CISIAD-10-03 Página 44 de 125

Informe Técnico CISIAD-10-03 Diseño detallado del sistema

Se ha modificado este paquete al ser necesario incluir nuevos atributos de los nodos y de las redes en los elementos NodeProperties, NodeWrapper y NetworkProperties.El resto de elementos no ha sido modificado salvo para eliminar usos incorrectos del lenguaje como se explica en el capítulo 5 sobre Mantenibilidad.

Diagrama de clasesNo se ha modificado la relación de clases de este paquete [7].

Diagrama de secuenciasNo se ha modificado la relación de llamadas entre paquetes hacia y desde este paquete creado en el trabajo anterior de Mendoza [7].

Paquete recursos (openMarkov.gui.resources)OpenMarkov, como cualquier aplicación con una interfaz visual de usuario, debe usar diferentes tipos de elementos visuales de apoyo (recursos). En la fase anterior, se crearon dos paquetes diferentes para los iconos y para los cursores que ahora están agrupados como sub-paquetes bajo este paquete y a los que se les ha añadido un nuevo paquete para las imágenes. Ha sido una de las re-estructuraciones sobre la fase anterior del informe técnico creando este paquete como contenedor de los otros.No se ha modificado el modo de uso de los cargadores [7].

Clases del paqueteAgrupadas en 3 paquetes principales y una clase:

• Clase OpenMarkovLogoIcon que se usa para cargar el icono de

OpenMarkov en las ventanas de dialogo

• Paquete Images

◦ almacena los ficheros de imágenes de los cursores que usa la aplicación principalmente los archivos de identificación de la aplicación en el titulo de la ventana principal y de cada red (C2_16.jpg); la imagen del Splash y del AboutBox de OpenMarkov (OpenMarkovSplashLogo.jpg) y la imagen usada en el AboutBox para separación de texto (lineSeparator.jpg). Otras imágenes han sido colocadas en este paquete pero no son estrictamente necesarias al ser para uso futuro para el paquete de desarrollo (las imágenes cuyo nombre comienza por “wizard...”).

◦ contiene la clase cargador ImagesLoader

Informe Técnico CISIAD-10-03 Página 45 de 125

Informe Técnico CISIAD-10-03 Diseño detallado del sistema

• Paquete Icons

◦ almacena los ficheros de iconos que usa la aplicación, basicamente los mismos que en la fase anterior.

◦ contiene la clase cargador IconLoader• Paquete Cursors

◦ almacena los ficheros de imágenes para los cursores que usa la aplicación. No se han modificado.

◦ contiene la clase cargador CursorLoader

Paquete deshacer (openMarkov.gui.undo)No se han realizado modificaciones sobre este paquete [7].

Paquete utilidades (openMarkov.gui.utils)En este paquete se agrupan dos grupos de clases diferentes. Las clases que gestionan las preferencias de usuario y las clases propiamente de utilidades.El usuario puede configurar ciertas propiedades. Para ello, OpenMarkov usa la funcionalidad existente en Java 6, Preferences, implantado en este paquete.

Diagrama de clases• Clase OpenMarkovPreferences que define cómo se accede a las

Informe Técnico CISIAD-10-03 Página 46 de 125

Ilustración 20: C2_16.jpg para títulos de ventanas en OpenMarkov

Ilustración 21: OpenMarkovSplashLogo.jpg para la aplicación OpenMarkov

Informe Técnico CISIAD-10-03 Diseño detallado del sistema

preferencias vía los diferentes métodos según sean valores de tipo

cadena, tipo integer, tipo boolean y tipo Color.

• Interface OpenMarkovPreferencesKeys define las constantes que

son externalizadas.

Diagrama de secuenciasEl acceso a las preferencias se realiza desde cualquiera de las clases que necesite un dato almacenado en la configuración externa. Este acceso se realiza mediante una invocación de la constante de modo directo y se recuperan los valores mediante las llamadas a los métodos get(key,...) correspondientes.

Paquetes pendientes: Paquete loader (openMarkov.gui.loader)Uno de los elementos que permitirá a OpenMarkov ser más mantenible y más extensible es la capacidad de definir nuevas funcionalidades mediante la adición en tiempo de ejecución de nuevos paquetes. Esto se realizará usando los elementos de carga de menús de manera dinámica en base a un fichero XML externo. Este comportamiento se define en este paquete y que también incluye una clase de ejecución de demostración.El objetivo de este paquete es que la mayor parte de los paquetes de OpenMarkov se carguen en el momento del lanzamiento del programa en vez de estar incorporados de manera integrada dentro del componente principal OpenMarkov.jar. Esto facilita la adicción de nuevas opciones en el menú mediante futuros “plug-in”.Este informe técnico no tenía inicialmente este desarrollo como objetivo, pero al analizar la mantenibilidad del informe técnico, se observó que uno de los puntos de mejora es permitir un modo ágil para añadir nuevas funcionalidades. Por ello, sólo se ha esbozado el paquete y se ha probado. Esta primera versión de ejemplo tan sólo crea los menús desde una fuente externa (OpenMarkovMenu.xml) en donde la definición del menú se almacena incluyendo los controladores para las acciones, pero en las próximas etapas del proceso de carga también podría permitir una carga dinámica de las ventanas e idiomas. Los futuros plug-in deberían estar colocados cada uno en su propio directorio debajo de un directorio específico bajo el directorio raíz de OpenMarkov, y en donde se copiarían las nuevas extensiones y las diferentes clases que apoyan los comportamientos de los controladores MenuItemHandler y ToolBarItemHandler . En el anexo de este documento se puede encontrar el fichero DTD de definición del cargador y el ejemplo usado para comprobar el comportamiento correcto del cargador. En esta versión del paquete, el

Informe Técnico CISIAD-10-03 Página 47 de 125

Informe Técnico CISIAD-10-03 Diseño detallado del sistema

cargador sólo está preparado para cargar menus según la siguiente tabla de atributos que pueden ser bien obligatorios (los señalados con X) o bien opcionales:

NAME LABEL MNEMONIC

SHORTCUT ICON ACTION

MENUS opcional

MENUBAR x

MENU X opcional X opcional

MENU ITEM X X opcional opcional opcional opcional

MENU SEPARATOR

POPUP MENU

X x

CHECKBOX MENUITEM

X X

TOOLBAR X opcional

TOOLBAR ITEM

X X opcional opcional opcional opcional

TOOLBAR SEPARATOR

• NAME = nombre interno del elemento de menu

• LABEL = etiqueta a mostrar al usuario en el menú por defecto

• SHORTCUT = combinación de teclado para activar este elemento

de menú (que puede ser una sola letra o bien CTRL+Letra o bien

ALT+Letra

• MNEMONIC = Una letra que activa el elemento de menú de una

lista ya desplegada (y debe ser única en la lista del mismo nivel)

• ICON = Icono que se puede mostrar junto al menú. Aquí se define

como el directorio completo y el nombre del fichero de extensión “gif” o

“jpeg”

• ACTION = Es la clase que resuelve la acción del elemento de

menú seleccionado. Debe indicarse el nombre completo cualificado de la

clase. Si la clase no existe, se rechaza en tiempo de ejecución no en

tiempo de compilación.

Informe Técnico CISIAD-10-03 Página 48 de 125

Informe Técnico CISIAD-10-03 Diseño detallado del sistema

Cómo usar el cargador para añadir un nuevo elemento de menú en un menú en particular14

Deben seguirse los siguientes pasos:

1. Crear la clase manejadora que gestionará el comportamiento del menú. Esta clase debe implementar la interfaz MenuItemHandler o el ToolbarItemHandler según corresponda:public interface MenuItemHandler {

/** * Called when a JMenuItem is activated. */public void itemActivated(JMenuItem item, ActionEvent event,

String sCommand);

/** * Called when a CheckboxMenuItem is deselected. */public void itemDeselected(JMenuItem item, ItemEvent event,

String sCommand);

/** * Called when a CheckboxMenuItem is selected. */public void itemSelected(JMenuItem item, ItemEvent event,

String sCommand);}

2. Crear un fichero XML según la especificación anterior:1. Escribir la cabecera 2. Escribir el elemento principal <MENUS>3. Escribir el elemento <MENUBAR ...>4. Escribir el elemento <MENU NAME=”...”> (donde el nombre debe

ser uno de los menús existentes en el informe técnico si lo que estás intentando es añadir un elemento de menú a dicho menú.

5. Escribir el elemento y sus atributos <MENUITEM NAME=”....” LABEL=”....” SHORTCUT=”...” MNEMONIC=”...” ICON=”...” ACTION=”nombre de la clase creada en el punto 1 anterior”

6. Escribir el cierre del elemento xml con “/>” o con </MENUITEM>7. Escribir el cierre del elemento de menú con </MENU>8. Escribir el cierre del elemento de barra de menús con

</MENUBAR>9. Escribir el cierre del elemento principal con </MENUS>

3. Salvar y cerrar el fichero XML.

14 De manera similar se crearían los nuevos separadores de menús, barras de iconos de menús (Toolbar), menús emergentes y diversos elementos de ventana.

Informe Técnico CISIAD-10-03 Página 49 de 125

Informe Técnico CISIAD-10-03 Diseño detallado del sistema

4. Finalmente, copiar un fichero JAR con los dos elementos (la clase manejadora y el XML en el directorio de plugins de OpenMarkov.

Paquetes pendientes: Paquete desarrollo (openMarkov.gui.development)

Uno de los grandes problemas en todo desarrollo de software es conseguir que todos los elementos son construidos de un modo semejante siguiendo las normas de codificación establecidas. En la medida de lo posible, esto debería ser conseguido con la creación del código de manera automática, o al menos dirigida, a través de herramientas de desarrollo incluidas en un ambiente de desarrollo específico para dicho informe técnico. En el caso particular de los desarrollos de las interfaces de usuario es un requisito aún más importante de cara a la futura mantenibilidad [13]. Este paquete es un mero embrión de dicha idea: facilitar una arquitectura de desarrollo de GUI al nuevo programador de OpenMarkov para que la generación de código o la modificación de ciertos elementos venga dirigida por estas herramientas de apoyo y siendo, de facto, una herramienta de generación de “cero código” al estilo de los paquetes de creación de elementos visuales en NetBeans o en WindowsBuilder.En el futuro este paquete debe ser extraído del proyecto base y replicado en su propio proyecto (¿OpenMarkovDevelopment?) tras la evaluación de conveniencia final por parte del equipo director. El entorno de desarrollo se visualizaría pues como una ventana de trabajo en el que el programador tendría a su disposición una serie de paquetes en una paleta, una representación en formato árbol de los elementos que configuran la interfaz con sus dependencias de integración y, finalmente, la representación visual del conjunto en tiempo real. Con un simple movimiento de los elementos en la parte visual se actualizaría el árbol de representación o viceversa, permitiendo una mejora en el tiempo de desarrollo pero, más importante, evitando al programador la tediosa tarea de realizar la codificación de dichos elementos para adaptarse a la nueva configuración. La construcción se basa en ficheros XML conformados en base a un DTD especifico que se interpretan en tiempo de ejecución para crear el entorno de trabajo del usuario final. Estos ficheros XML son los que se representan en la parte izquierda del entorno de trabajo al desarrollador.

PaquetesTiene seis paquetes principales en este momento

• Paquetes Actions (handlers) para manejar las acciones definidas

en un fichero XML de definición de menús de modo similar a lo

explicado en el paquete de gestión de menús. Es el sub-paquete más

Informe Técnico CISIAD-10-03 Página 50 de 125

Informe Técnico CISIAD-10-03 Diseño detallado del sistema

importante de este paquete de desarrollo. Se han incluido algunas

clases de ejemplo para la gestión de ficheros (apertura, cierre, etc...) y

visualización de la ayuda.

• Paquete Dialogs, al ser solo un embrión de informe técnico, sólo

contiene el dialogo AboutBoxDevEnv.

• Paquete Environment es el paquete principal que presenta la

interfaz descrita para modificar propiedades de desarrollo. Consta de

tres elementos:

▪ Clase OpenMarkovDevEnv es la clase principal que lanza el entorno e inicializa el fichero de trazas de los realizado (Logger) para asegurar que se puede realizar una depuración y reconstrucción de lo realizado en caso de necesidad.

▪ Clase OpenMarkovDevEnvFrame es el entorno visual en sí mismo donde se alojaron los diferentes menús de trabajo, paletas y arboles de representación.

▪ Clase OpenMarkovDevEnvProperties define las propiedades de configuración del entorno. Esta clase debe ser sustituida por el nuevo modo de trabajo existente en OpenMarkov para almacenar las preferencias usando Preferences.

• Paquete i18n es el paquete de internacionalización necesario para

que el ambiente de desarrollo pueda ser usado en diferentes países

[22].

• Paquete Resources es el paquete para contener los iconos de la

aplicación de desarrollo

• Paquete Tools es el paquete donde residen las clases auxiliares

◦ Clase OpenMarkovDevDOMTreeCellRenderer es el elemento para la gestión de los elementos contenidos en el árbol de representación de las propiedades. Debe ser extendido y mantenido apropiadamente en el futuro.

◦ Clase OpenMarkovDevTreeModel contiene la base para la representación visual del árbol de propiedades (iconos, letras, …).Nota: El fichero de definición del entorno de desarrollo está ubicado bajo el propio directorio src/OpenMarkov/gui/development en esta versión. Su ubicación viene determinada por el nombre del fichero OpenMarkovDevEnv.menu.xml (ver clase OpenMarkovDevEnvFrame)

Informe Técnico CISIAD-10-03 Página 51 de 125

Informe Técnico CISIAD-10-03 Mantenibilidad

MantenibilidadUno de los retos de OpenMarkov es asegurar la mantenibilidad futura. Se

han realizado tareas orientadas a la revisión del grado de esta, eliminando

aquellos usos incorrectos del lenguaje Java tales como llamadas incorrectas

o innecesarias al método super(), inclusión/eliminación de clausulas static,

clausulas Javadoc, etc. como se recoge a continuación:

Regla Fuentes que se han

alterado

Comentario

Eliminación de llamada innecesaria a super() sin parámetros

31 Una clase que extiende de otra no necesita poner como primera sentencia de su constructor super() ya que Java ejecuta siempre dicha orden en la creación del objeto extendido

Clausulas static 26 Los métodos y atributos que no son dependientes de las instancias de una clase deben definirse como static consiguiendo un mejor aprovechamiento de la memoria ocupada por el programa en ejecución

Javadoc modificado o completado 221 Este elemento es clave para asegurar que los futuros desarrolladores tengan documentación actualizada del comportamiento interno de una clase y sus atributos.

Eliminar mayúsculas en nombres de paquetes 8 Es una convención establecida en los estándares de SUN para la programación en Java

Eliminar llamadas a los métodos System.out y System.err

10 Modificación para hacer llamadas a la gestión en la ventana de mensajes

Eliminar captura de la excepción genérica Exception

17 Creación de excepciones particulares para gestionar con mensajes apropiados y evitar la llamada a printStackTrace()

Informe Técnico CISIAD-10-03 Página 52 de 125

Informe Técnico CISIAD-10-03 Mantenibilidad

Sin embargo, el trabajo está aún incompleto ya que hay elementos aún

con mejoras posibles, tanto dentro como fuera del paquete GUI, que tienen

mejoras posibles para conseguir que la calidad del software sea superior en

relación a los mencionados estándares de codificación. A continuación se

muestra un inventario de cambios que se deben efectuar:

Regla Fuentes que se deben alterar15

Comentario

Evitar captura de excepción genérica “Exception”...

56 ...creando una excepción especifica

Diversas reglas 2677 Las siguientes filas indican algunas de las reglas que, al aplicarse, mejoran la legibilidad y ejecución del código

Definir los tipos de los elementos contenidos en Contenedores de tipo Raw (ArrayList, Vector, Enumeration, Iterator, Collection, etc...) en el momento de definir dicho atributo dentro de una clase

1789 Realizar esta comprobación en tiempo de compilación evita problemas en tiempo de ejecución. Es una mejora al lenguaje Java en la versión 1.6.

Particularizar clases que heredan de clases base Raw para definir el tipo de los elementos

221 Realizar esta comprobación en tiempo de compilación evita problemas en tiempo de ejecución. Es una mejora al lenguaje Java en la versión 1.6.

Debe evitarse el uso de sentencias “import xxx.*;”

Deben usarse importaciones de las clases necesarias para reducir visibilidad innecesaria de objetos.

No utilizar interfaces para la definición de constantes (es un anti-patrón)

3 Usar clases finales que evitan futuros problemas de mantenimiento.

15 Este inventario está realizado contra la versión existente en el repositorio de fuentes a fecha 6 de mayo de 2010

Informe Técnico CISIAD-10-03 Página 53 de 125

Informe Técnico CISIAD-10-03 Mantenibilidad

Para poder determinar finalmente si este trabajo ha mejorado la calidad

global del producto en términos de seguimiento de las mejores prácticas de

codificación y, por tanto, mejora la mantenibilidad, se ha realizado una

valoración del software de OpenMarkov usando el evaluador gratuito que la

empresa Enerjy Software16 nos brinda. Este software se instala como plug-in

dentro de eclipse y permite la calificación en modo dinámico (“score”) tanto

del conjunto del informe técnico como de los paquetes e incluso de cada

clase. La puntuación conseguida con este trabajo ha sido de 8.8 puntos

(mejor que la publicada para WEKA de tan sólo 5.6 puntos en la página web

de Enerjy Software) como se muestra a continuación.

16 Enerjy es un plug-in gratuito para Eclipse de Enerjy Software. Puede encontrarse en http://www.enerjy.com/download/

Informe Técnico CISIAD-10-03 Página 54 de 125

Ilustración 24: Página web de Enerjy Software: Puntuación de WEKA = 5.6

Ilustración 23: Enerjy Software: Puntuación global de OpenMarkov = 8.8

Ilustración 22: Enerjy Software: Puntuación del paquete GUI = 8.8

Informe Técnico CISIAD-10-03 Usabilidad

UsabilidadOpenMarkov pretende ser un programa para ser ejecutado en los más

variados entornos y por diferentes tipos de usuarios. Por ello, deben

extremarse y cuidarse todos aquellos aspectos de usabilidad. La ISO/IEC17,

en su norma ISO 9126 para la evaluación del software, expresa que "la

usabilidad se refiere a la capacidad de un software de ser comprendido,

aprendido, usado y ser atractivo para el usuario, en condiciones específicas

de uso",

Durante este trabajo se ha revisado la interfaz gráfica para comprobar y asegurar que los principios de usabilidad se aplicaban. Entre ellos, mencionaremos el uso de tres elementos importantes: el lenguaje o internacionalización; el uso del color y la homogeneidad de las diferentes ventanas y, por último, la disponibilidad de ayudas de usuario. Estos son de los elementos más importantes para que un usuario pueda usar una aplicación de un modo intuitivo. En este apartado se describen cómo se han tenido en cuenta para el diseño de la interfaz.

InternacionalizaciónInternacionalización es el proceso de diseñar una aplicación para que

pueda ser adaptada a diferentes idiomas y regiones, sin necesitad de

cambios de ingeniería [22]. Algunas veces el término internacionalización se

abrevia i18n, porque en el idioma inglés hay 18 letras entre la "i" y la "n" de

Internacionalización.

Un programa internacionalizado tiene las siguientes características.

• Con la adición de datos de localización, el mismo ejecutable puede

ser ejecutado en cualquier lugar del mundo.

• El texto mostrado está en el idioma nativo del usuario final.

• Los elementos textuales como mensajes de estado y etiquetas de

elementos GUI no están codificadas dentro del programa. Son

almacenados fuera del código fuente y recuperados de forma dinámica.

17 Organización Internacional para la Estandarización (International Standards Organization)

Informe Técnico CISIAD-10-03 Página 55 de 125

Informe Técnico CISIAD-10-03 Usabilidad

• El soporte de nuevos idiomas no requiere re-compilación.

• Otros datos dependientes de la cultura, como fechas y monedas,

deben aparecer en el formato e idioma de la región del usuario final.

• Se pueden incorporar rápidamente nuevas especificidades locales

al país donde se quiera implantar (lo que se denomina “localización”)

OpenMarkov usa estos principios de internacionalización para poder ser

usada en cualquier país excepto los relacionados con las presentaciones de

datos numéricos, usando por defecto el modo español de presentación

usando el signo “,” como separador decimal.

ImplementaciónComo mejora al diseño de la fase anterior en que OpenMarkov definía el idioma a usar para presentar los elementos gráficos basándose en el que el usuario tenga seleccionado en su equipo de trabajo, se ha incorporado la posibilidad de que el propio usuario pueda cambiar en tiempo de ejecución el idioma en el que quiere trabajar sin depender del idioma del sistema operativo, y que la selección quede guardada como preferencia de usuario.Para ello, se han realizado tres tareas principales:

• Creación del diálogo de usuario para el cambio de lenguaje

• Creación de métodos para controlar y cambiar el idioma a todos

los elementos gráficos usando las propiedades de reflexión del lenguaje

Java.

• Modificación de las clases gráficas para escuchar por un posible

cambio de lenguaje en tiempo de ejecución

Informe Técnico CISIAD-10-03 Página 56 de 125

Ilustración 25: Relación de internacionalización

StringResource StringResourceLoader

LocaleChangeEvent StringResourceListener

Dialog PanelsChangeLanguageDialog

Informe Técnico CISIAD-10-03 Usabilidad

Pantalla de dialogo:

La pantalla de dialogo con el usuario queda como se ve en la siguiente donde se muestra el campo para elegir el idioma en el que queremos ver la aplicación junto con un texto de ejemplo antes de aceptar finalmente el

cambio. En caso de cambiar el idioma, vemos cómo cambia el dialogo.

Informe Técnico CISIAD-10-03 Página 57 de 125

Ilustración 26: Dialogo de usuario para cambio de lenguaje (por defecto)

Informe Técnico CISIAD-10-03 Usabilidad

Métodos añadidos para el cambio de idioma18

Para poder realizar cambios de idioma en tiempo de ejecución, el desarrollador debe incluir ciertos métodos y llamadas en las clases visuales que usen textos para que cuando el usuario cambie el idioma, el texto en dichas ventanas se actualice.Lo primero que debe hacer es definir la clase como oyente de los cambios de idioma incluyendo en su definición la implementación de “StringResourceLocaleChangeListener” y definiendo apropiadamente el método “processStringResourceLocaleChange” que es el que incluye realmente el cambio de los textos.Dado que se usa la introspección interna de Java, es responsabilidad del propio desarrollador dar al paquete el mismo nombre de la clase para que el método anterior pueda encontrar el literal correspondiente en el idioma seleccionado dentro de los diferentes ficheros de lenguaje definidos en

18 Para más idetalle, el desarrollador puede consultar la información de ayuda existente en el “Manual de Ayuda Online al Desarrollador”, en inglés, que se ha creado también como parte de este Informe técnico y que se puede consultar en uno de los anexos.

Informe Técnico CISIAD-10-03 Página 58 de 125

Ilustración 27: Cambio del texto ejemplo al seleccionar un idioma

Ilustración 28: Idiomas permitidos en el cambio de lenguaje

Informe Técnico CISIAD-10-03 Usabilidad

OpenMarkov.El efecto que estos dos cambios indicados produce desde el punto de vista del usuario es que, al cambiar el tipo de idioma, los textos del elemento visual cambian como se muestra en las figuras anteriores.

El uso del color

Principios a recordar para el uso del colorEl color ayuda y mejora la presentación de la interfaz permitiendo al

usuario comprender y manejar la complejidad. Según Shneiderman [21], se

establecen catorce puntos claves para la utilización efectiva del color en un

interfaz gráfica. Estos puntos se han revisado en OpenMarkov siendo los

más relevantes los siguientes:

• Limitar el número de colores utilizados y ser conservador al

momento de utilizarlos.

• No utilizar más de 4 ó 5 colores diferentes en una ventana y no

más de 7 en la interfaz total del sistema para evitar que su despliegue

sea confuso.

• Utilizar un cambio de color para mostrar cambio de estado del

sistema, por ejemplo, indicando con semáforos de alerta estados

normal o alarma

• Utilizar el código de colores para apoyar la tarea que los usuarios

están tratando de llevar a cabo, por ejemplo, un color para resaltar una

situación anómala, otro color para mostrar similitudes.

• Utilizar el código de colores en una forma consciente y

consistente, por ejemplo, si usamos el rojo para mostrar alarma,

mantener esa lógica durante todo el sistema.

• Ser cuidadoso al utilizar pares de colores pues dada la fisiología

del ojo, las personas no pueden enfocar el rojo y el azul

simultáneamente.

En general, el color no debe utilizarse para representar un significado

Informe Técnico CISIAD-10-03 Página 59 de 125

Informe Técnico CISIAD-10-03 Usabilidad

particular [21]. Por dos razones: la primera es que cerca del 10% de los

seres humanos no perciben el color y pueden malinterpretar su significado;

la segunda es que las percepciones del color son diferentes y existen

convenciones diversas para varias regiones y profesiones. Por ejemplo, el

rojo para sectores automovilísticos significa peligro, pero para sectores de

uso químico significa temperatura elevada no necesariamente peligrosa.

Aplicación del uso del color en OpenMarkovOpenMarkov aplica estos principios anteriores para ofrecer al usuario una experiencia amigable al usar las diferentes ventanas. A continuación se muestran los cuatro ambientes que un usuario puede encontrar: ventana principal con menús, área de trabajo con redes, diálogos de asignación de propiedades, y representación de tablas.La pantalla que se muestra a continuación nos muestra la zona superior de OpenMarkov en la que están los menús y la barra de herramientas:

Zona de menús y área de trabajo general:• Uso de seis colores: Azul, Amarillo, Verde, Gris, Negro y Blanco.

• Se reserva el color rojo para los mensajes de aviso crítico al

usuario en la ventana de mensajes.

• Titulo de ventana con letras en blanco sobre fondo azul para

favorecer el contraste y añadiendo en cabecera el icono del logotipo de

OpenMarkov.

• Fondo en gris claro para las áreas de menú con objeto de

distinguir de modo claro que no forman parte del área de las redes y

porque este color gris permite resaltar el color negro de los textos.

• Fondo blanco para el área de trabajo donde se abrirán las redes.

• Fondo de un elemento de diseño activado en blanco frente al color

Informe Técnico CISIAD-10-03 Página 60 de 125

Ilustración 29: Colores usados en el menú principal y barra de herramientas

Informe Técnico CISIAD-10-03 Usabilidad

gris de los no activado (en el ejemplo, aparece activado el elemento

FLECHA de selección de elementos en la red) para ayudar al usuario a

conocer qué herramienta esta usando. Al mismo tiempo el cursor

cambia su forma para adaptarse a dicha herramienta en uso.

Zona de visualización de una red:• Usa cinco colores: Azul, Amarillo, Verde, Negro y Blanco.

• Se reserva el color rojo para los mensajes de aviso crítico al

usuario en la ventana de mensajes.

• Titulo de ventana con letras en blanco sobre fondo azul para

favorecer el contraste y añadiendo en cabecera el icono del logotipo de

OpenMarkov.

• Fondo en blanco para el área de dibujo de la red para acentuar el

contraste de los colores a usar en los nodos (amarillo, azul y verde).

• Colores vivos [21] claramente diferenciados para los nodos de la

red y con forma diferente para evitar los problemas de los usuarios para

distinguir colores.

Informe Técnico CISIAD-10-03 Página 61 de 125

Ilustración 30: Herramienta Selección marcada

Ilustración 31: Cursores correspondientes a las herramientas seleccionadas

Ilustración 32: Colores usados al visualizar/editar redes

Informe Técnico CISIAD-10-03 Usabilidad

• Nombres de los nodos de la red en negro (al ser el color que

destaca de manera importante sobre los color de fondo de cualquier

nodo).

Diálogos con el usuario:En los diálogos para pedir al usuario la introducción de datos se usa un

entorno reducido de colores• Cuatro colores: Azul, Amarillo, Verde, Negro y Blanco

• Titulo de ventana con letras en blanco sobre fondo azul y con

icono del logotipo de OpenMarkov

• Fondo en blanco para el área de dibujo de la red para acentuar el contraste de los colores a usar en los nodos.

• Se reserva el color rojo para los mensajes de aviso crítico [21] al usuario en los diferentes campos cuyos valores no son permitidos

Finalmente, en el dialogo para la edición de tablas se ha optado por incluir un uso alternado de color en las filas para ayudar al usuario a distinguir [21] de que estado en particular se están editando los potenciales, y se ha alternado también el color de los estados del padre por la misma razón:

Informe Técnico CISIAD-10-03 Página 62 de 125

Ilustración 33: Uso del color en las pantallas de dialogo con el usuario

Informe Técnico CISIAD-10-03 Usabilidad

Ayuda en línea para el usuario final OpenMarkov pretende ser una herramienta de usuario final con una curva

de aprendizaje muy rápida debido a la sencillez de su interfaz. Sin embargo,

este requerimiento debe ir acompañado de la creación de un sistema de

ayuda ágil, dinámico, intuitivo y cómodo de mantener para el futuro.

Con la decisión de usar Java como un lenguaje de programación, se ha

necesitado un sistema de creación y presentación de elementos de ayuda

tan flexible como el propio lenguaje Java que permitiese a los usuarios del

programa un uso natural. Es por ello por lo que se ha decidido usar la

herramienta estándar de Java: JavaHelp.

Informe Técnico CISIAD-10-03 Página 63 de 125

Ilustración 34: Colores en la edición de tablas de potenciales

Informe Técnico CISIAD-10-03 Usabilidad

Introducción a JavaHelpJavaHelp19 es un sistema de ayuda en línea desarrollado por SUN

Corporation Inc. dentro de su suite de elementos para Java. Consta de una

tabla de contenidos (TOC20), indices y buscadores para encontrar y mostrar

las diferentes secciones de la ayuda, que están almacenadas en ficheros

HTML y que además permiten incorporar elementos gráficos como imágenes.

JavaHelp usa un sistema de visualización en una ventana auxiliar dividida

en tres partes: una zona para el panel de herramientas; una zona para el

panel de navegación de secciones y, por último, una zona para mostrar las

páginas de ayuda. Este ventana de tres zonas es el denominado “HelpSet

Viewer” y ofrece a los usuarios la habilidad de trabajar con las diferentes

opciones del sistema de ayuda, navegar por las secciones y ver las

diferentes páginas de ayuda al mismo tiempo sin tener que estar cambiando

de ventanas. Usando este panel que ofrece JavaHelp, el usuario es capaz de

seleccionar una ayuda del árbol de navegación y ver instantáneamente en el

panel de contenidos cuál es la correspondiente ayuda. Si además esa página

de ayuda tiene llamadas a otras páginas y el usuario pincha sobre dicho

vinculo, el panel de navegación se actualiza también de modo automático

permitiendo al usuario conocer en todo momento dónde se ubica la página

llamada. Los ficheros de sección JavaHelp son ficheros HTML y estos ficheros

HTML se comportan de un modo idéntico a como lo hacen en un navegador

web. Es decir, el “HelpSet Viewer” funciona como un navegador Web: tiene

controles parecidos, pero está diseñado específicamente para trabajar con

ficheros JavaHelp.

JavaHelp puede ser usado para presentar la ayuda en cuatro modos

diferentes a saber:

• Ayuda a nivel de aplicación

El usuario accede a alto nivel, tal como un Tópico de introducción o una

19 JavaHelp de Sun Microsystems es un sistema de ayuda en línea desarrollado para el lenguaje de programación Java.

20 TOC – Ver glosario

Informe Técnico CISIAD-10-03 Página 64 de 125

Informe Técnico CISIAD-10-03 Usabilidad

tabla de contenidos

• Ayuda a nivel de pantalla

El usuario pulsa un botón para lanzar el sistema de ayuda con una página

especifica que describirá la pantalla actual donde se encuentra el

usuario

• Ayuda a nivel de campo

El usuario selecciona un elemento especifico de la pantalla (como un

campo de texto o un botón o un desplegable) sobre el que desea

ayuda.

• Ayuda embebida

El sistema de ayuda se construye de modo directo sobre la interfaz

gráfica

OpenMarkov está usando en este momento la ayuda a nivel de aplicación

y está preparada para usar ayuda a nivel de pantalla y de campo si se

incorporan, por un lado, los marcadores en las paginas de ayuda y, por otro,

en cada pantalla las llamadas correspondientes a dichos marcadores.

DiseñoEl diseño de estos principios se ha definido mediante tres casos de uso,

como se muestra en la ilustración siguiente, siendo uno de los casos el

responsable de la apertura de la ayuda pero pudiendo ser llamado por el

usuario a través de los otros dos, dependiendo de si es una ayuda de

aplicación o de ventana:

Informe Técnico CISIAD-10-03 Página 65 de 125

Informe Técnico CISIAD-10-03 Usabilidad

Implementación en OpenMarkovPara poder usar JavaHelp dentro de OpenMarkov, y siguiendo los

principios marcados por SUN para su uso, se ha desarrollado una clase de

visualización (HelpViewer) que será la responsable de la presentación de la

ayuda.

El contenido de la ayuda se ha creado siguiendo un árbol de acceso que

permita al usuario final encontrar rápidamente lo que necesita.

Dentro de la ayuda en línea creada para el desarrollador se han incluido

Informe Técnico CISIAD-10-03 Página 66 de 125

Ilustración 36: Ayuda en línea para usuarios (en español)

Ilustración 35: Gestión de ayuda al usuario

Informe Técnico CISIAD-10-03 Usabilidad

apartados específicos para definir claramente como debe realizarse la

estructura de los ficheros HTML de la ayuda, las hojas de estilo usadas y las

convenciones usadas para los índices, tablas de contenidos y estructuras.

Debemos reseñar que la ayuda orientada al usuario final ha sido creada

en los dos idiomas actuales y todo nuevo idioma que se vaya a incorporar en

OpenMarkov debe incluir una traducción apropiada de la ayuda de usuario.

Sin embargo, ayuda orientada al desarrollador sólo se ha creado en inglés al

entender que los futuros colaboradores de OpenMarkov como software libre

pueden estar en cualquier lugar y que no tendrán problemas para leer la

documentación interna del informe técnico en dicho idioma.

Informe Técnico CISIAD-10-03 Página 67 de 125

Informe Técnico CISIAD-10-03 Tareas futuras

Tareas futurasLas tareas que se deben realizar a continuación para completar la creación

del ambiente gráfico de OpenMarkov, aportando nuevas funcionalidades se

enumeran a continuación, agrupadas en aquellos puramente de edición y las

que son más orientados a aspectos de usabilidad.

• orientadas a la edición de los modelos gráficos probabilistas:

✗ Incluir el manejo de potenciales en las tablas de probabilidad para los

nodos de decisión. Habría que considerar en dónde se guarda además

el atributo que define el tipo de decisión (optima, determinista o

probabilista)

✗ Completar el diálogo de edición de nodos de la red para permitir

hacer/deshacer el efecto que sobre las tablas de probabilidades tiene

la adición/sustracción de padres (o cambio del número de estado de

los padres), teniendo en cuenta que habría que recorrer todos los

potenciales donde exista dicha variable.

✗ Completar el diálogo de edición de nodos de la red para permitir

hacer/deshacer el efecto que sobre las tablas de probabilidades tiene

la adición/sustracción de estados de la variable asociada al nodo.

✗ Completar el diseño y la implementación que permita una actualización

dinámica de las tablas mostradas en pantalla mientras se van

ejecutando los algoritmos de inferencia seleccionados por el usuario

mediante los métodos edit/undo necesarios.

✗ Completar la unificación de métodos undo/redo en todas los elementos

de la interfaz gráfica en el momento del cambio por el usuario sin

esperar a la validación final de la ventana de dialogo.

✗ Incorporar explicación de nodos y enlaces dentro de la visualización de

la red.

Informe Técnico CISIAD-10-03 Página 68 de 125

Informe Técnico CISIAD-10-03 Tareas futuras

✗ Incorporar el análisis de sensibilidad a la red.

• orientadas a la mejora de la amigabilidad de la interfaz:

✗ Completar tabla de edición de probabilidades para distinguir en base a

códigos de colores los estados de los nodos padre, agrupando cada

estado de un padre en un color determinado.

✗ Completar el diálogo de propiedades de configuración de OpenMarkov

para visualizar los colores en vez de usar códigos numéricos RGB

usando un editor personalizado

✗ Completar el diálogo de propiedades de configuración de OpenMarkov

para visualizar las propiedades compuestas con editores

personalizados

✗ Completar la externalización de propiedades de configuración de

OpenMarkov para no dejar ninguna propiedad definida en código,

teniendo en cuenta que aquellas propiedades que no deben ser

modificables por un usuario final deben estar agrupadas bajo

SystemRoot y UserRoot.

✗ Completar la internacionalización para tener en cuenta los elementos

fecha y los elementos decimales (“.” vs. “,”)

✗ Completar la creación de manuales de ayuda orientados al usuario final

si procede con alguna pantalla adicional

✗ Completar la realización de menús usando el formato XML externo

definido según la arquitectura de OpenMarkovMenu.xml y en las clases

de ejemplo.

✗ Completar la arquitectura basada en Plug-ins

✗ Completar una arquitectura de desarrollo que permita la

lectura/escritura de componentes desde el repositorio de manera

controlada y supervisada para asegurar la calidad global del informe

técnico

Informe Técnico CISIAD-10-03 Página 69 de 125

Informe Técnico CISIAD-10-03 Tareas futuras

✗ Completar una arquitectura de actualización remota de versiones

orientada a usuario final en conexión del programa

✗ Unificar las dos clases de configuración que existen en el código

OpenMarkov.io.configuration.OpenMarkovConfiguration y

openMarkov.gui.utils.OpenMarkovPreferences

Informe Técnico CISIAD-10-03 Página 70 de 125

Informe Técnico CISIAD-10-03 Conclusiones

ConclusionesOpenMarkov es una herramienta software cuya finalidad es la creación y

edición de modelos gráficos probabilistas, muy útiles para representar

modelos del mundo real. En su construcción prima la aplicación de los

principios de la metodología de desarrollo del software, por los cuales se

está consiguiendo un software robusto, eficiente, escalable y extensible.

Como resultado de este informe técnico se diseña e implementa la interfaz

gráfica de usuario, mejorándola iterativamente y añadiendo elementos que

permitan una primera versión de la edición visual de tablas de probabilidad

de los nodos para el modelo general e incluyendo la documentación

necesaria para el mantenimiento posterior.

De forma general, los requisitos funcionales que se cumplen son:

• La interfaz permite la edición visual de tablas de probabilidad de

los nodos usando como base la información contenida en los nodos

(estados, padres, potenciales) y su lectura y almacenamiento en

ficheros.

• Las tablas que se manejan corresponden a los nodos de

probabilidad de redes probabilistas y a los nodos de elección, decisión y

utilidad en los diagramas de influencia teniendo en cuenta cada una de

sus particularidades.

• La edición de las tablas engloba la creación inicial, la modificación

de valores y la visualización según diferentes condiciones.

• Para facilitar el trabajo, el usuario continua disponiendo de los

mecanismos habituales en cualquier herramienta de edición, como son

la disponibilidad de un porta-papeles y la posibilidad de deshacer las

ediciones llevadas a cabo.

Informe Técnico CISIAD-10-03 Página 71 de 125

Informe Técnico CISIAD-10-03 Conclusiones

Como requisitos no funcionales, de este informe técnico se han

conseguido:

• Mejoras de la usabilidad y amigabilidad de la interfaz gráfica.

• Incorporación de un mecanismo de memoria de los últimos documentos abiertos que permita su re-apertura con el mínimo esfuerzo.

• Incorporación de diálogos para personalización de propiedades de usuario tales como colores y lenguaje

• Incorporación de ayudas de usuario.Como un punto importante a destacar dentro de los requisitos no

funcionales se ha dedicado un gran esfuerzo para realizar un diseño basado

en la simplicidad y la metodología de desarrollo del software, haciendo uso

de las técnicas de desarrollo actuales, como la orientación a objetos y los

patrones de diseño, que hacen que OpenMarkov sea más fácilmente

mantenible y se consigue que la evaluación de OpenMarkov en el

seguimiento de las mejores prácticas de programación bajo Java según los

estándares de SUN21, medido de manera gratuita por el software de la

empresa Enerjy Software, sea muy alto (8.8 puntos22), frente a la

puntuación conseguida de 5.6 puntos por el programa WEKA23. Este índice

alto indica la protección de este software frente a potenciales vicios ocultos

que podrían provocar fallos inesperados de ejecución y, al mismo tiempo,

permiten asegurar un uso eficiente del lenguaje y de los recursos de

máquina necesarios para ser ejecutada la aplicación.

Asimismo dentro de este estudio se cuidan todos los detalles para que la

documentación externa sea suficiente y clara, haciendo uso de los

mecanismos y diagramas del lenguaje de modelado UML y de las ventajas

que ofrece, e incluyendo una ayuda al desarrollador usando la utilidad

JavaHelp, intencionadamente en inglés para asegurar su lectura a nivel

21 Sun Corporation como creador de Java define una serie de mejores prácticas y convenciones para el buen uso del lenguaje que son usadas ampliamente.

22 Resultado del score a finales de abril 2010 incluyendo el total del informe técnico. El paquete gui recibe una puntuación de 8.8 también. Existiendo aún varias mejoras a realizar para conseguir el objetivo de 10.0

23 Se puede consultar esta puntuación de WEKA en http://www.enerjy.com/explorer/index.html. Lamentablemente no se indica la fecha en la que se ha realizado la evaluación ni la versión del programa.

Informe Técnico CISIAD-10-03 Página 72 de 125

Informe Técnico CISIAD-10-03 Conclusiones

universal, de modo que el futuro mantenimiento tanto de adaptación como

de nuevos desarrollos sea más sencillo y fácil.

Se añade una sección en la que se explica de forma general cuáles son los

paquetes que seguramente serán ampliados y cuál es la mejor forma para

llevar a cabo este mantenimiento funcional.

Como OpenMarkov se usará en países con idiomas diferentes se mejora

el paquete de internacionalización y se realiza tanto la incorporación de una

utilidad para permitir al usuario elegir el lenguaje de visualización en tiempo

de ejecución como una revisión de los textos a presentar en español o en

inglés.

Para facilitar la comprensión completa del código fuente, se tiene especial

interés en completar y añadir comentarios aclaratorios que hacen uso del

formato de Javadoc y que posibilita la creación de una documentación

basada en entorno web.

Podemos concluir que la interfaz de OpenMarkov está construida en su

mayor parte permitiendo su uso por usuarios finales, aunque aún esté

pendiente de incorporar nuevas funcionalidades que se realicen en las fases

siguientes con la terminación de la incorporación de representación de tablas

para modelos canónicos y con la explicación visual de inferencia en los

nodos. Estas fases se desarrollarán a continuación en el Departamento de

Inteligencia Artificial de la UNED.

AgradecimientosM. Arias y F. J. Díez han recibido apoyo de los proyectos TIN2006-11152

(Ministerio de Educación y Ciencia), TIN2009-09158 (Ministerio de Ciencia y

Tecnología) y FONCICYT nº 95185 (VII Programa Marco de la Unión Europea

y CONACYT, México).

Alberto M. Ruiz, que trabajó durante 4 meses en la interfaz gráfica de

OpenMarkov, estuvo contratado como becario del Dpto. de Inteligencia Artificial

Informe Técnico CISIAD-10-03 Página 73 de 125

Informe Técnico CISIAD-10-03 Conclusiones

de la UNED con cargo a un proyecto de investigación financiado por la Agencia

Laín Entralgo, de la Comunidad de Madrid.

Informe Técnico CISIAD-10-03 Página 74 de 125

Informe Técnico CISIAD-10-03 Listado siglas, abreviaturas y acrónimos

Listado siglas, abreviaturas y acrónimos GUI - Graphical User Interface – Dicese de los elementos gráficos de un sistema informático que interactúan con el usuario de dicho sistemaHTML – HyperText Markup Language – Lenguaje de uso común en Ingeniería Informática que se usa en OpenMarkov para los archivos de ayuda. IDE - Un entorno de desarrollo integrado o IDE (acrónimo en inglés de integrated development environment), es un programa informático compuesto por un conjunto de herramientas de programación.[19]i18n – Termino que se usa para indicar que un programa está preparado para ser usado en varios países. Es decir, es un programa internacional. Proviene de la distancia de 18 letras en el alfabeto inglés entre la letra "i" y la letra "n" de Internacionalización.ISO/IEC – International Organization for Standards – Es el organismo encargado de promover el desarrollo de normas internacionales de fabricación, comercio y comunicación para todas las ramas industriales a excepción de la eléctrica y la electrónica. Su función principal es la de buscar la estandarización de normas de productos y seguridad para las empresas u organizaciones a nivel internacional. La ISO es una red de los institutos de normas nacionales de 160 países.JAR – Un archivo JAR (por sus siglas en inglés, Java ARchive) es un tipo de archivo que permite ejecutar aplicaciones escritas en lenguaje Java. Las siglas están deliberadamente escogidas para que coincidan con la palabra inglesa "jar" (tarro). Existen tres operaciones básicas con este tipo de archivos: ver contenido, comprimir y descomprimir.MDI – Interfaz de múltiples documentos (en inglés Multi-Document Interface ) permite la exhibición de una aplicación y que el usuario trabaje con más de un documento de dicha aplicación a la vez. Si la aplicación no está programada para usar MDI y el usuario desea trabajar con múltiples documentos del mismo tipo (en este caso particular, con diferentes redes) de modo paralelo, debe cargarse la aplicación nuevamente para cada documento subsiguiente.MVC – El “Modelo-Vista-Controlador” (model-view-controller) es un estilo de arquitectura de software que separa los datos de un componente (el Modelo), la interfaz propia del usuario (la Vista) y la lógica de control (el Controlador) en tres componentes distintos.[3][5][14][18]TOC – Table Of Contents - Tabla de contenidos de un documento. XML – Siglas en inglés de Extensible Markup Language (lenguaje de marcas extensible), es un metalenguaje extensible de etiquetas desarrollado por el World Wide Web Consortium (W3C). Es una simplificación y adaptación del metalenguaje SGML y permite definir la gramática de lenguajes específicos (de la misma manera que HTML es a su vez un lenguaje definido por SGML). Por lo tanto XML no es realmente un lenguaje en particular, sino una manera de definir lenguajes para diferentes necesidades. Algunos de estos lenguajes

Informe Técnico CISIAD-10-03 Página 75 de 125

Informe Técnico CISIAD-10-03 Listado siglas, abreviaturas y acrónimos

que usan XML para su definición son XHTML24, SVG25, MathML26.

24 http://es.wikipedia.org/wiki/XHTML como alternativa para la sustitución de HTML en25 http://es.wikipedia.org/wiki/SVG para la definición de gráficos vectoriales26 http://es.wikipedia.org/wiki/MathML para la definición de elementos matemáticos

Informe Técnico CISIAD-10-03 Página 76 de 125

Informe Técnico CISIAD-10-03 Anexos

AnexosAnexo 1 - Casos de uso de la interfaz gráfica de OpenMarkov

Anexo 2 - OpenMarkovDTDSpec.xml para definir carga de OpenMarkov

Anexo 3 - OpenMarkovMenu.xml como ejemplo del cargador de

OpenMarkov

Anexo 4 - Documento de ayuda en línea al usuario

Informe Técnico CISIAD-10-03 Página 77 de 125

Informe Técnico CISIAD-10-03 Anexos

Anexo 1 - Casos de uso de la interfaz gráfica de OpenMarkovEste anexo contiene todos los casos de uso de la interfaz gráfica, tanto

provenientes de la fase 1 como de esta fase 2. Debe ser usado como

documento base de requerimientos para la interfaz gráfica y para expansión

a futuras fases, siendo parte integrante y fundamental de la documentación

de desarrollador.

Informe Técnico CISIAD-10-03 Página 78 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Inicio de la aplicaciónComentario: Caso de uso que se ejecutará cuando el usuario inicie la aplicación.Actor: UsuarioCurso Normal Alternativas1.El usuario inicia el programa sin parámetros.

1.1.Si el usuario introduce parámetros al arranque del programa, se ignoran y pasamos a punto 2

2.La aplicación lee el fichero de configuración del programa.3.Del fichero de configuración, se leen los atributos necesarios para configurar las posiciones de la ventana principal y de mensaje, los colores de los tipos de nodos, los directorios donde se ubican las redes, lenguajes y los recursos necesarios para la aplicación.

3.1.En caso de error (si no se puede leer el fichero de configuración), los elementos toman un valor por defecto.

4.Se establece el lenguaje para los textos de la aplicación usando el lenguaje guardado en el fichero de configuración como dato inicial.

4.1.Si no se encuentra el fichero de configuración, se establecen opciones de configuración por defecto. El lenguaje de visualización de la aplicación por defecto es el que el usuario tenga establecido en su sistema/equipo.

5.Si existen textos para el lenguaje elegido, este lenguaje se establecerá como lenguaje definitivo para los textos de la aplicación.

5.1.Si el lenguaje establecido no se puede usar por no existir textos para él, se usará el inglés (lenguaje por defecto) como lenguaje definitivo para los textos de la aplicación.

6.Se crea la ventana principal, el menú principal, las barras de herramientas y el entorno multi-documento.7.Se desactivan todas las opciones del menú principal y de las barras de herramientas excepto las siguientes: crear una nueva red, abrir una red existente y mostrar la ventana de mensajes.8.Se crea el portapapeles de la aplicación.9.Se crea la ventana de mensajes y se sustituyen los flujos estándar System.out y System.err para que los datos destinados a ellos se muestren en esta pantalla.

Informe Técnico CISIAD-10-03 Página 79 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso 1: Inicio de la aplicación

Caso de uso: Finalización de la aplicaciónComentario: Este caso de uso lo iniciará el usuario cuando quiera cerrar la aplicación.Actor: UsuarioCurso Normal Alternativas1.El usuario indica a la aplicación que desea salir de ésta.

2.Si hay alguna ventana en el entorno multi-documento, la cierra ejecutando el caso de uso Cierre de una red.

2.1.Si no hay ninguna ventana abierta, pasa al punto 4.

3.Si la ventana ha sido cerrada, pasa al punto 2.

3.1.Si la ventana no ha sido cerrada, no se puede finalizar la aplicación.

4.Se salvan las propiedades de configuración de usuario (lenguaje, posiciones de la ventana principal, directorios, últimos ficheros abiertos) y se cierra la aplicación.

Caso de uso 2: Finalización de la aplicación

Caso de uso: Creación de una redComentario: Este caso de uso, como su nombre indica, será el que inicie el usuario para crear una nueva red vacía.Actor: UsuarioCurso normal Alternativas1.El usuario indica a la aplicación que quiere crear una nueva red.

2.La aplicación solicita los datos necesarios para crear una nueva red.

2.1.Si el usuario no quiere crear la red, puede cancelar la operación, terminando el caso de uso.

3.La aplicación comprueba si los datos proporcionados por el usuario son correctos.

3.1.Si algún dato no es correcto, la aplicación informa al usuario y vuelve al punto 2.

4.La aplicación crea una nueva ventana asociada a la red en el entorno multidocumento, cuyo título será el nombre de la red.

5.Se activan (si no lo estaban ya) todas las opciones del menú relacionado con el entorno multidocumento.

6.Se crea un nuevo ítem en el menú dependiente del entorno multidocumento que estará asociado con la nueva ventana.

Informe Técnico CISIAD-10-03 Página 80 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Creación de una redComentario: Este caso de uso, como su nombre indica, será el que inicie el usuario para crear una nueva red vacía.Actor: Usuario7.Se selecciona la nueva ventana y se activa el caso de uso Selección de una red.

Caso de uso 3: Creación de una red

Caso de uso: Cierre de una redComentario: Caso de uso ejecutado cuando el usuario quiera cerrar una ventana del entorno multidocumento.Actor: UsuarioCurso normal Alternativas1.El usuario indica a la aplicación que quiere cerrar la ventana actual del entorno multidocumento.

2.Si la red ha sido modificada pero no se ha guardado, la aplicación solicita al usuario si quiere guardar la red, no guardarla o cancelar la operación.

2.1.Si la red no se ha modificado o si se ha guardado sin modificarla después, pasa al punto 4.

3.Si el usuario no desea guardarla, pasa al punto 4.

3.1.Si el usuario desea guardar la red, pasa al caso de uso Almacenamiento de una red.

3.2.Si el usuario elige no cerrar la ventana, termina el caso de uso.

4.La ventana es cerrada.

5.Se elimina de la lista de ventanas del menú dependiente del entorno multidocumento el ítem asociado a la ventana que se ha cerrado.

6.Se selecciona la ventana anterior de la lista de ventanas y se pasa al caso de uso Selección de una red.

6.1.Si no hay más redes en el entorno multidocumento, se desactivan todas las opciones del menú dependiente del entorno multidocumento y todas las del menú principal y de las barras de herramientas excepto las opciones para crear una nueva red, abrir una red y mostrar la ventana de mensajes.

Caso de uso 4: Cierre de una red

Informe Técnico CISIAD-10-03 Página 81 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Carga de una redComentario: Se llevará a cabo cuando el usuario quiera cargar una red almacenada en un archivo.Actor: UsuarioCurso normal Alternativas1.El usuario indica a la aplicación que quiere abrir una red existente.

2.La aplicación solicita al usuario que escriba o elija el archivo que contiene la información de la red.

3.El usuario elige un archivo o escribe su nombre.

3.1.Si el usuario no quiere abrir la red, puede cancelar la operación, terminando el caso de uso.

4.La aplicación lee la información del archivo y comprueba que es correcta.

4.1.Si la información del archivo no es correcta, la aplicación informa al usuario y termina la operación.

5.La aplicación crea una nueva ventana asociada a la red en el entorno multidocumento cuyo título será el nombre de la red.

6.Se activan (si no lo estaban ya) todas las opciones del menú relacionado con el entorno multidocumento.

7.Se crea un nuevo ítem en el menú dependiente del entorno multidocumento que estará asociado con la nueva ventana.

8.Se selecciona la nueva ventana y se activa el caso de uso Selección de una red.

Caso de uso 5: Carga de una red

Caso de uso: Almacenamiento de una redComentario: Caso de uso ejecutado cuando el usuario desee guardar la información de una red en el mismo archivodesde el que se ha cargado.Actor: UsuarioCurso normal Alternativas

Informe Técnico CISIAD-10-03 Página 82 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Almacenamiento de una redComentario: Caso de uso ejecutado cuando el usuario desee guardar la información de una red en el mismo archivodesde el que se ha cargado.Actor: Usuario1.El usuario indica a la aplicación que quiere guardar la información de la red.

2.Si la red tiene un archivo asociado, la aplicación guarda la información de la red en ese archivo.

2.1.Si la red no tiene un archivo asociado, la aplicación iniciará el caso de uso Almacenamiento de una red como.

3.Se modifica el título de la ventana que contiene la red para eliminar el asterisco que antepone al título, si la red no se había guardado.

4.Se deshabilita la opción de guardar una red en el menú principal y en las barras de herramientas.

Caso de uso 6: Almacenamiento de una red

Caso de uso: Almacenamiento de una red como...Comentario: Caso de uso ejecutado cuando el usuario desee guardar la información de una red en un archivo diferentedesde el que se ha cargado.Actor: UsuarioCurso normal Alternativas1.El usuario indica a la aplicación que quiere guardar la información de la red en un archivo distinto a su archivo asociado.

2.La aplicación solicita al usuario que escriba o elija el archivo donde será almacenada la información de la red.

2.1.Si el usuario no quiere guardar la red, puede cancelar la operación, terminando el caso de uso.

3.La aplicación asocia el archivo especificado a la red.

3.1.Si el archivo ya existe, informará al usuario y, si éste está conforme, pasará al punto 4 y, si no, al punto 2.

4.La aplicación inicia el caso de uso Almacenamiento de una red.

Caso de uso 7: Almacenamiento de una red como...

Informe Técnico CISIAD-10-03 Página 83 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Selección de una redComentario: Este caso de uso se activará cuando se seleccione una ventana diferente de la que esté actualmenteseleccionada en el entorno multidocumento.Actor: UsuarioCurso normal Alternativas

Informe Técnico CISIAD-10-03 Página 84 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Selección de una redComentario: Este caso de uso se activará cuando se seleccione una ventana diferente de la que esté actualmenteseleccionada en el entorno multidocumento.Actor: Usuario1.El usuario selecciona una ventana diferente a la actual en el entorno multidocumento.

2.En la lista del menú dependiente del entorno multidocumento, se marca el ítem correspondiente a la ventana seleccionada y se desmarcan los demás.

3.Si la red asociada a la ventana no está guardada y ha sido modificada, la aplicación activa la opción para guardar una red en el menú principal y en las barras de herramientas.

3.1.Si la red asociada a la ventana sí está guardada, la aplicación desactiva la opción para guardar una red del menú principal y de las barras de herramientas.

4.Se actualizan las opciones del menú principal y de las barras de herramientas relacionadas con el factor de escala con el que se visualiza la red.

5.Se actualizan las opciones del menú principal y de las barras de herramientas para reflejar el estado del portapapeles.

6.Se actualizan las opciones del menú principal y de las barras de herramientas relacionadas con las acciones de hacer y deshacer.

7.Se actualizan las opciones del menú principal y de las barras de herramientas relacionadas con los elementos (nodos y enlaces) que se pueden añadir a la red seleccionada27.

8.Se actualizan las opciones del menú principal relacionadas con la forma en que se visualizan los nodos (por nombre o por título).

9.Se actualizan las opciones del menú principal y de las barras de herramientas dependientes del número y tipo de elementos (nodos y enlaces) seleccionados28.

Caso de uso 8: Selección de una red

27 En una red bayesiana se puede añadir sólo nodos probabilistas y enlaces. En un diagrama de influencia se puede añadir cualquier tipo de nodo y enlaces.

28 Algunas opciones como editar las propiedades de un nodo sólo estarán disponibles cuando esté seleccionado un solo nodo y ningún enlace. Lo mismo pasa con las opciones copiar y cortar, que sólo estarán activas cuando haya nodos seleccionados y ningún enlace.

Informe Técnico CISIAD-10-03 Página 85 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Selección de la red siguiente/anteriorComentario: Éste engloba a los dos casos de uso donde se selecciona la ventana siguiente y la anterior a la actual en el entorno multidocumento. La descripción de este caso es la siguiente.Actor: UsuarioCurso normal Alternativas1.El usuario indica a la aplicación que quiere seleccionar la siguiente/anterior ventana a la que está actualmente seleccionada.

2.La aplicación selecciona la ventana indicada y pasa a ejecutar el caso de uso Selección de una red.

2.1. Si sólo hay una ventana en el entorno multidocumento, la aplicación no hace nada.

Caso de uso 9: Selección de la red siguiente o anterior

Caso de uso: Modificación de la disposición de las ventanasComentario: Este caso de uso realmente no existe. Es un nombre genérico para un conjunto de casos de uso similares que se usan para cambiar la disposición de las ventanas dentro del entorno multidocumento. Los casos de uso que engloba son: organizando en cascada, organizando en mosaico, minimizando todas y restaurando todas. El primero organiza las ventanas en cascada restaurando las que están minimizadas. El segundo rellena la totalidad del espacio de la ventana principal con las ventanas internas, de modo que ninguna se solape con las demás. El tercero minimiza todas las ventanas que no lo están y el cuarto restaura todas las minimizadas. En todos los casos, la ventana actualmente seleccionada lo sigue estando después de la operación.La descripción de cualquiera de estos casos se puede ver en la tabla.Actor: UsuarioCurso normal Alternativas1.El usuario indica a la aplicación que quiere cambiar la disposición de las ventanas (cascada, mosaico, minimizar todas o restaurar todas).

2.La aplicación realiza la operación indicada sobre las ventanas dejando seleccionada la ventana que lo está actualmente.

Caso de uso 10: Modificación de la disposición de las ventanas

Caso de uso: Modificación de la presentación de los nodosComentario: En este caso el usuario elige el contenido que aparecerá dentro de los nodos de la red actualmente seleccionada, esto es, su nombre o su título.Actor: UsuarioCurso normal Alternativas

Informe Técnico CISIAD-10-03 Página 86 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Modificación de la presentación de los nodosComentario: En este caso el usuario elige el contenido que aparecerá dentro de los nodos de la red actualmente seleccionada, esto es, su nombre o su título.Actor: Usuario1.El usuario activa una de las opciones para ver los nodos por su nombre o por su título.

2.En la red actual se establece el tipo de presentación para los nodos que ya hay y para los nuevos.

3.La opción elegida por el usuario es marcada en el menú.

4.Si el tipo de presentación ha cambiado, se actualiza el contenido de los nodos.

Caso de uso 11: Modificación de la presentación de los nodos

Caso de uso: Modificación del factor de escala – Forma 1Comentario: El usuario cambia el factor de escala de la red actualmente seleccionada. Existen tres formas de iniciar el cambio del factor de escala por parte del usuario, aunque el final es el mismo. Veamos primero la descripción completa del caso de uso con la primera forma de hacerlo.Actor: UsuarioCurso normal Alternativas1.El usuario elige en el menú principal o en la lista desplegable situada en la barra de herramientas estándar el factor de escala entre un conjunto fijo.

1.1.El usuario puede escribir un valor entero entre 10 y 500 en la lista desplegable.

2.La aplicación comprueba el valor elegido por el usuario.

2.1.Si el usuario ha decidido escribir un valor y el valor es incorrecto, la aplicación le informa del hecho y finaliza el caso de uso.

3.Se cambia el factor de escala de la red actual por el elegido por el usuario.

4.Se realizan los cambios en el menú principal y en la barra de herramientas para que reflejen el nuevo factor de escala.

5.La red es presentada con el factor de escala elegido.

Caso de uso 12: Modificación del factor de escala – Forma 1

Informe Técnico CISIAD-10-03 Página 87 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Modificación del factor de escala a través de la caja de diálogo – Forma 2Comentario: La segunda forma que tiene el usuario de cambiar el factor de escala es a través de dos botones con forma de lupa situados en la barra de herramientas estándar o en el menú principal. Estos botones aumentan o disminuyen el factor de escala en un 20% respectivamente. La descripción de esta otra forma se puede ver en la tabla.Actor: UsuarioCurso normal Alternativas1.El usuario elige en el menú principal la opción para cambiar el factor de escala usando una caja de diálogo.

2.La aplicación muestra una caja de diálogo con un conjunto fijo de factores de escala que puede elegir el usuario y una caja de texto donde podrá escribir un valor entero entre 10 y 500.

3.El usuario elige el valor deseado o escribe un nuevo valor.

3.1.Si el usuario no quiere cambiar el factor de escala, cancela la operación, terminando el caso de uso.

4.La aplicación comprueba el valor elegido por el usuario.

4.1.Si el usuario ha decidido escribir un valor y el valor es incorrecto, la aplicación le informa del hecho y vuelve al paso 3.

5.Continúa a partir del paso 3 de la tabla anterior.

Caso de uso 13: Modificación del factor de escala a través de la caja de diálogo

Informe Técnico CISIAD-10-03 Página 88 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Elección del tipo de ediciónComentario: En este caso de uso, el usuario podrá elegir una opción que indicará lo que pasará en el panel de red cuando se haga un clic sobre él. Cada una de las opciones será identificada por la forma del cursor del ratón. Las opciones disponibles son:· Selección de objetos. El usuario podrá seleccionar nodos y/o enlaces (cursor normal).· Creación de nodos probabilísticos. El usuario podrá crear con un clic un nuevo nodo probabilístico (cursor con forma de círculo).· Creación de nodos de decisión. Igual que el anterior para los nodos de decisión (cursor con forma cuadrada).· Creación de nodos de utilidad. Igual que el anterior para los nodos de utilidad (cursor con forma de rombo).· Creación de enlaces. El usuario podrá crear un nuevo enlace entre dos nodos (cursor con forma de enlace).La descripción de este caso de uso se puede ver en la tabla.Actor: UsuarioCurso normal Alternativas

Informe Técnico CISIAD-10-03 Página 89 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Elección del tipo de ediciónComentario: En este caso de uso, el usuario podrá elegir una opción que indicará lo que pasará en el panel de red cuando se haga un clic sobre él. Cada una de las opciones será identificada por la forma del cursor del ratón. Las opciones disponibles son:· Selección de objetos. El usuario podrá seleccionar nodos y/o enlaces (cursor normal).· Creación de nodos probabilísticos. El usuario podrá crear con un clic un nuevo nodo probabilístico (cursor con forma de círculo).· Creación de nodos de decisión. Igual que el anterior para los nodos de decisión (cursor con forma cuadrada).· Creación de nodos de utilidad. Igual que el anterior para los nodos de utilidad (cursor con forma de rombo).· Creación de enlaces. El usuario podrá crear un nuevo enlace entre dos nodos (cursor con forma de enlace).La descripción de este caso de uso se puede ver en la tabla.Actor: Usuario1.El usuario elige en el menú principal o en la barra de herramientas de edición el tipo de edición para la ventana actual.

2.Se cambia la imagen del cursor del ratón para que represente el tipo de edición elegido.

3.Se deseleccionan todos los objetos (nodos y enlaces) de la red de la ventana actual.

4.Se actualiza el menú principal y los menús emergentes, deshabilitando las opciones que están activas cuando hay algún objeto seleccionado.

5.El nuevo tipo de edición queda establecido para la red actual.

6.El tipo de edición es marcado o seleccionado en el menú principal y en la barra de herramientas de edición.

Caso de uso 14: Elección del tipo de edición

Informe Técnico CISIAD-10-03 Página 90 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Actualización de los menús al cambiar la selección de los elementosComentario: Este caso de uso es ejecutado por un actor abstracto llamado Actualizador de menús. Se ha creado este actor abstracto y este caso de uso porque las opciones cortar, copiar, eliminar y propiedades del nodo siempre están activadas o desactivadas en función del número y tipo de elementos que haya seleccionados. Por tanto, todos los casos de uso relacionados con el cambio en la selección de elementos incluyen a éste, como se verá en las siguientes secciones. La descripción del caso se observa en la tabla. Las opciones especificadas se habilitan o deshabilitan en los menús emergentes de la red, el menú principal y en la barra de herramientas de edición.Actor: UsuarioCurso normal Alternativas1.El actualizador de menús inicia el proceso de actualización.

2.Si en la red hay algún elemento seleccionado, se habilita la opción eliminar.

2.1.Si no hay ningún elemento seleccionado, se deshabilita la opción eliminar.

3.Si hay nodos seleccionados pero ningún enlace, se habilitan las opciones de copiar y cortar.

3.1.Si además de los nodos hay algún enlace seleccionado o si no hay nodos seleccionados, se deshabilitan las opciones copiar y cortar29.

4.Si sólo hay un nodo seleccionado y ningún enlace, se habilita la opción propiedades del nodo.

4.1.Si no hay ningún nodo seleccionado, si hay más de uno seleccionado o si hay algún enlace seleccionado, se deshabilita la opción propiedades del nodo.

5.Si sólo hay un enlace seleccionado y ningún nodo, se habilita la opción propiedades del enlace.

5.1.Si no hay ningún enlace seleccionado, si hay más de uno seleccionado o si hay algún nodo seleccionado, se deshabilita la opción propiedades del enlace.

Caso de uso 15: Actualización de los menús al cambiar la selección de los elementos

29 Hay que tener en cuenta, como se comentará más adelante, que cuando un nodo se copia en el portapapeles, también serán copiados todos sus enlaces, independientemente de que se copien los nodos con los que está enlazado. Al pegar el nodo, sus enlaces serán creados siempre que se pegue el nodo del otro extremo o éste ya esté creado en la red. Al pegar el nodo, al menos uno de los extremos de cada enlace existirá. Por este motivo, no se permite copiar un enlace aislado, ya que al pegarlo puede que no exista ninguno de sus extremos

Informe Técnico CISIAD-10-03 Página 91 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Deselección de todos los elementosComentario: Este caso de uso es llevado a cabo por la aplicación cuando el usuario pulsa sobre el fondo del panel de red. De este modo, todos los nodos y enlaces que hubiera seleccionados dejarán de estarlo. Los pasos que se suceden son los siguientes.Actor: UsuarioCurso normal Alternativas1.Cuando el tipo de edición es la selección de objetos, el usuario hace un clic con el botón izquierdo del ratón, sin pulsar ninguna tecla, sobre el fondo vacío de la red que se está editando.

2.La aplicación deselecciona todos los elementos que antes estaban seleccionados.

3.Se ejecuta el caso de uso Actualización de los menús al cambiar la selección de los elementos.

Caso de uso 16: Deselección de todos los elementos

Caso de uso: Selección de todos los elementosComentario: Este caso de uso lo inicia el usuario cuando desea seleccionar todos los elementos (nodos y enlaces) de la red. Los pasos son los siguientes.Actor: UsuarioCurso normal Alternativas1.Cuando el tipo de edición es la selección de objetos, el usuario indica a la aplicación que desea seleccionar todos los elementos de la red actual.

2.Se seleccionan todos los nodos y enlaces.

3.Se ejecuta el caso de uso Actualización de los menús al cambiar la selección de los elementos.

Caso de uso 17: Selección de todos los elementos

Informe Técnico CISIAD-10-03 Página 92 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Selección de un solo nodo (o enlace)30

Comentario: Este caso de uso lo inicia el usuario cuando quiere seleccionar un solo nodo, deseleccionando todos los demás elementos. La descripción se puede observar en la tabla.Actor: UsuarioCurso normal Alternativas1.Cuando el tipo de edición es la selección de objetos, el usuario hace un clic con el botón izquierdo del ratón, sin pulsar ninguna tecla, sobre un nodo de la red que no esté seleccionado.

2.La aplicación deselecciona todos los elementos seleccionados ejecutando el caso de uso Deselección de todos los elementos.

3.Se selecciona el nodo sobre el que se ha pulsado.

4.Se ejecuta el caso de uso Actualización de los menús al cambiar la selección de los elementos.

Caso de uso 18: Selección de un solo nodo o enlace

Caso de uso: Selección de un solo nodo más (o de un enlace más)31

Comentario: Este caso de uso es iniciado por el usuario cuando se pincha sobre un nodo no seleccionado con la tecla MAYÚSCULAS pulsada. La descripción se puede ver en la tabla siguiente.Actor: UsuarioCurso normal Alternativas1.Cuando el tipo de edición es la selección de objetos, el usuario hace un clic con el botón izquierdo del ratón, con la tecla MAYÚSCULAS pulsada, sobre un nodo no seleccionado de la red.

2.La aplicación selecciona el nodo pinchado.

3.Se ejecuta el caso de uso Actualización de los menús al cambiar la selección de los elementos.

Caso de uso 19: Selección de un nodo más o de un enlace más

30 Para selección de un enlace es lo mismo cambiando nodo por enlace en el caso de uso31 El caso para enlace es igual cambiando la palabra nodo por enlace

Informe Técnico CISIAD-10-03 Página 93 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Deselección de un nodo (o enlace)32

Comentario: Este caso de uso es iniciado por el usuario cuando se pincha sobre un nodo que está seleccionado con la tecla MAYÚSCULAS pulsada. La descripción se puede ver en la tabla siguiente.Actor: UsuarioCurso normal Alternativas1.Cuando el tipo de edición es la selección de objetos, el usuario hace un clic con el botón izquierdo del ratón, con la tecla MAYÚSCULAS pulsada, sobre un nodo no seleccionado de la red.

2.La aplicación deselecciona el nodo pinchado.

3.Se ejecuta el caso de uso Actualización de los menús al cambiar la selección de los elementos.

Caso de uso 20: Deselección de un solo nodo o enlace

32 El caso para enlace es igual cambiando la palabra nodo por enlace

Informe Técnico CISIAD-10-03 Página 94 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Selección de varios nodos con el rectángulo de selecciónComentario: Si el usuario hace clic sobre el fondo de una red y arrastra el cursor sin soltar el botón del ratón, aparecerá un rectángulo de selección, que se podrá agrandar o empequeñecer según los movimientos del cursor del ratón. Los nodos (no enlaces) que estén dentro del rectángulo quedarán automáticamente seleccionados y los que estén fuera, deseleccionados. Los pasos se detallan en la siguiente tabla.Actor: UsuarioCurso normal Alternativas1.Cuando el tipo de edición es la selección de objetos, el usuario pulsa (sin soltar) con el botón izquierdo del ratón, sin pulsar ninguna tecla, sobre el fondo vacío de la red que se está editando.

2.Se ejecuta el caso de uso Deselección de todos los elementos para que no quede nada seleccionado.

3.El cursor del ratón toma la forma estándar de selección con precisión.

4.En la posición donde se ha pulsado con el cursor del ratón, aparecerá un rectángulo de tamaño 0 dibujado con trazo discontinuo.

5.Si el usuario mueve el cursor del ratón, el rectángulo cambiará de tamaño. Este rectángulo tendrá un vértice fijo en la posición en la que pulsó el usuario y el vértice opuesto en la posición del cursor del ratón.

5.1.Si el usuario no mueve el ratón, el caso de uso permanecerá en el punto 5.

5.2.Si el usuario suelta el botón del ratón, saltará al punto 8.

6.Si ningún nodo deja de estar dentro del rectángulo o ninguno deja de estar fuera, vuelve al punto 5.

6.1.Si el punto central de un nodo que no estaba seleccionado queda dentro de este rectángulo, se selecciona ejecutando el caso de uso Selección de un nodo más.

6.2.Si el punto central de un nodo que estaba seleccionado queda fuera de este rectángulo, se deselecciona ejecutando el caso de uso Deselección de un nodo.

7.Vuelve al punto 5.

8.El cursor del ratón retoma su aspecto normal.

9.El rectángulo de selección desaparece y los nodos mantienen su estado de selección.

Caso de uso 21: Selección de varios nodos con el rectángulo de selección

Informe Técnico CISIAD-10-03 Página 95 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Actualización de los menús al modificar una red

Comentario: Este caso de uso es ejecutado por el actor abstracto Actualizador de menús. Se ha creado porque las opciones hacer y deshacer estarán activadas o desactivadas en función de si se puede o no deshacer y si se puede o no rehacer. La opción para guardar la red se activará siempre que ésta sea modificada. Por tanto, todos los casos de uso relacionados con la modificación de una red, incluyen a éste, como se verá en las siguientes secciones. La descripción del caso se observa en la tabla. Las opciones especificadas se habilitan o deshabilitan en el menú principal y en la barra de herramientas de edición.

Actor: Usuario

Curso normal Alternativas

1.El actualizador de menús inicia el proceso de actualización.

2.La opción deshacer estará activa si hay alguna modificación en la red actual que aún no se haya deshecho.

2.1.La opción deshacer estará desactivada si no se han hecho modificaciones en la red.

2.2.La opción deshacer estará desactivada si se han deshecho todas las modificaciones de la red.

3.La opción rehacer estará activa si queda por rehacer alguna de las modificaciones deshechas.

3.1.La opción rehacer estará desactivada si no se han hecho modificaciones en la red.

3.2.La opción rehacer estará desactivada si no se ha deshecho ninguna modificación o todas las modificaciones deshechas ya se han rehecho.

4.Se activa la opción para guardar la red.

Caso de uso 22: Actualización de los menús al modificar una red

Informe Técnico CISIAD-10-03 Página 96 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Creación de un nodoComentario: Aunque existen tres tipos de nodos en la aplicación, el proceso de creación es el mismo para los tres. La diferencia radica en que se creará un tipo determinado de nodo según el tipo de edición. 33

Actor: UsuarioCurso Normal Alternativas1.Cuando el tipo de edición es la creación de nodos (cualquier tipo), el usuario pulsa con el botón izquierdo del ratón, sin pulsar ninguna otra tecla, sobre el fondo vacío de al red que se está editando.

2.La aplicación crea un nodo visual, con todos los campos por defecto, cuyo tipo es función del tipo de edición.

3.El nodo tiene en sus propiedades una tabla de probabilidad vacía, al no tener aún estados en el momento de la creación, y no tener asociado ningún nodo padre

4.Se crea un nuevo punto para deshacer y rehacer la creación del nodo

5.Se ejecuta el caso de uso Actualización del menús al modificar una red

6.La red se marca como modificada (si no lo estaba ya) anteponiendo un asterisco al titulo de la ventana en la que se edita.

7.Si el nodo se ha creado fuera de los límites del panel de red, éste se agranda para albergar completamente el nuevo nodo

Caso de uso 23: Creación de un nodo

33 Al crear un nuevo nodo, la propia aplicación le asigna un nombre automáticamente que depende el tipo de nodo que se vaya a crear y que no podrá coincidir con el nombre de ningún otro nodo, independientemente de cuál sea su tipo. Según el tipo de nodo que se quiera crear, los nombres se asignarán de la siguiente forma:

Cuando se crea un nodo probabilístico, se le intenta asignar el nombre “A”. Si existe algún nodo con ese nombre, se intenta con “B”. Si también existe un nodo, se intenta con “C”. Y así sucesivamente hasta que se llegue al final del abecedario. Si aún no se le ha asignado un nombre, se intenta con “A1”, “B1”, etc. Si se llega al final del abecedario, se intenta con “A2”, “B2”, etc. Se sigue así hasta que se encuentre un nombre que no esté asignado a ningún otro nodo.

De las posibles letras que se pueden asignar a los nodos probabilísticos quedan excluidas la “D” y la “U”.Cuando se crea un nodo de decisión, se le intenta asignar el nombre “D”, “D1”, “D2”, etc., hasta que se

encuentre un nombre que no esté asignado a otro nodo.Cuando se crea un nodo de utilidad, se le intenta asignar el nombre “U”, “U1”, “U2”, etc., hasta que se

encuentre un nombre que no esté asignado a otro nodo.

Informe Técnico CISIAD-10-03 Página 97 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Deshacer la creación de un nodo (o rehacer)34

Comentario: Al deshacer la creación de un nodo, la red se queda en el mismo estado en el que estaba justo antes de la modificación. La opción para activar la acción de deshacer la creación del nodo es la misma que para el resto de acciones de deshacer. Dependiendo del orden en el que se hayan hecho las modificaciones, deshará una u otra.Actor: UsuarioCurso normal Alternativas1.Sin importar cuál es el tipo de edición y cuando la última acción no deshecha sea la creación de un nodo, el usuario pulsa sobre la opción para deshacer.

2.Se deseleccionan todos los elementos de la red actual.

3.Se ejecuta el caso de uso Actualización de los menús al cambiar la selección de los elementos.

4.Se elimina el último nodo creado en la red.

5.Se ejecuta el caso de uso Actualización de los menús al modificar una red.

6.La red se marca como modificada (si no lo estaba ya), anteponiendo un asterisco al título de la ventana en la que se edita.

Caso de uso 24: Deshacer o rehacer la creación de un nodo

34 Como se verá en este caso de uso y en los siguientes, los pasos a seguir en una acción de deshacer o rehacer son similares a los que se siguen en la tabla del caso de uso Deshacer la creación de un nodo. La excepción está únicamente en el punto 4 de la tabla. El resto es exactamente igual. En este caso, en el punto 4 debería figurar: “Se crea de nuevo el mismo nodo que se acaba de eliminar”. Se supone que este nodo se ha eliminado ejecutando el caso de uso para deshacer su creación.

Informe Técnico CISIAD-10-03 Página 98 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Creación de un enlace35

Actor: UsuarioCurso normal Alternativas1.Cuando el tipo de edición es crear enlaces, el usuario pulsa sobre un nodo de la red con el botón izquierdo del ratón sin pulsar ninguna tecla

2.Aparece un nuevo enlace cuyo inicio está en el punto central del nodo seleccionado y cuyo fin, en forma de punta de flecha, está en la posición del cursor.

3.Si el usuario mueve el ratón, el extremo final del enlace cambiará a la nueva posición del cursor del ratón y el caso de uso volverá a este mismo punto

3.1.Si el usuario no mueve el ratón, el caso de uso permanecerá en el punto 3.

3.2.Si el usuario suelta el botón del ratón, el caso de uso saltará al punto 4.

4.Si el usuario suelta el botón cuando el cursor del ratón estaba sobre un nodo, pasa al punto 5

4.1.Si el usuario suelta el botón cuando el cursor estaba sobre el mismo nodo sobre el que se ha pinchado o sobre el fondo vacío del panel de red, termina el caso de uso

5.Si el enlace no estaba creado, no había otro enlace en sentido contrario, no se crean ciclos y el nuevo enlace está permitido, lo crea, pintando un nuevo enlace entre los dos nodos en el sentido que ha elegido el usuario

5.1.Si el enlace ya estaba creado, había otro enlace en sentido contrario, se crean ciclos y el nuevo enlace no está permitido, no lo crea y termina el caso de uso.

6.Se modifican las tablas de potencial en el nodo destino con los valores correspondientes al nuevo padre asignado y sus estados correspondientes

6.1.Si en la creación de las tablas se detecta un error, el nuevo enlace no se crea y termina el caso de uso.

7.Se crea un nuevo punto para deshacer y rehacer la creación del enlace

8.Se ejecuta el caso de uso de Actualización de los menús al modificar una red.

9.La red se marca como modificada (si no lo estaba ya) anteponiendo un asterisco al titulo de la ventana en la

35 Un enlace sólo podrá ser creado si, además de otras restricciones, está permitido. Un enlace estará permitido o no dependiendo del tipo de nodos a los que una. Los enlaces permitidos son los siguientes:

•Entre un nodo probabilístico y otro de cualquier tipo.•Entre un nodo de decisión y otro de cualquier tipo.•Entre un nodo de utilidad y otro de utilidad.•Los enlaces entre un nodo de utilidad y otro nodo que no sea de utilidad no están permitidos.

Informe Técnico CISIAD-10-03 Página 99 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Creación de un enlaceActor: UsuarioCurso normal Alternativasque se edita.

Caso de uso 25: Creación de un enlace

Caso de uso: Deshacer la creación de un enlaceComentario: Al igual que se ha comentado en el caso de uso para deshacer la creación de un nodo, cualquier acción de deshacer o rehacer se ejecuta como se detalla en la tabla del caso de uso Deshacer la creación de un nodo, diferenciándose en el punto indicado a continuaciónActor: UsuarioCurso Normal Alternativas4.Se elimina el último enlace creado en la red y los potenciales asociados en los nodos hijo.

Caso de uso 26: Deshacer la creación de un enlace

Caso de uso: Rehacer la creación de un enlaceAl igual que se ha comentado en el caso de uso para rehacer la creación de un nodo, cualquier acción para deshacer o rehacer se ejecuta como se detalla en la tabla del caso de uso Rehacer la creación de un nodo, diferenciándose en el punto indicado a continuaciónActor: UsuarioCurso Normal Alternativas4.Se crea de nuevo el mismo enlace que se acaba de eliminar y los potenciales asociados en los nodos hijo.

Caso de uso 27: Rehacer la creación de un enlace

Informe Técnico CISIAD-10-03 Página 100 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Desplazamiento de varios nodosComentario: Después de haber seleccionado uno o varios nodos, el usuario puede moverlos todos a la vez tal como se indica en la siguiente tabla.Actor: UsuarioCurso normal Alternativas1.El usuario selecciona uno o varios nodos usando alguno de los casos de uso comentados con anterioridad. No importa si hay algún enlace seleccionado.

2.Cuando el tipo de edición es la selección de objetos, el usuario pincha (sin soltar) con el botón izquierdo del ratón, sin pulsar ninguna tecla, sobre un nodo de la red que ya esté seleccionado.

3.El cursor del ratón toma la forma de una cruz con puntas de flecha.

4.Si el usuario mueve el ratón, se moverán todos los nodos seleccionados, adaptando los enlaces que parten o terminan en ellos. El caso de uso se mantiene en este punto.

4.1.Si el usuario no mueve el ratón, el caso de uso permanecerá saltará al punto 4.

4.2.Si el usuario suelta el botón del ratón, el caso de uso saltará al punto 5.

5.El cursor del ratón retoma su aspecto normal.

6.Se crea un nuevo punto para deshacer y rehacer el movimiento de los nodos.

7.Si es necesario, se cambia el tamaño del panel de red para que albergue a la totalidad de la red.

8.Se ejecuta el caso de uso Actualización de los menús al modificar una red.

9.La red se marca como modificada (si no lo estaba ya), anteponiendo un asterisco al título de la ventana en la que se edita.

Caso de uso 28: Desplazamiento de varios nodos

Informe Técnico CISIAD-10-03 Página 101 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Deshacer el desplazamiento de varios nodos (o rehacer)36

Comentario: Actor: UsuarioCurso normal Alternativas1.Sin importar cuál es el tipo de edición y cuando la última acción no deshecha sea la creación de un nodo, el usuario pulsa sobre la opción para deshacer.

2.Se deseleccionan todos los elementos de la red actual.

3.Se ejecuta el caso de uso Actualización de los menús al cambiar la selección de los elementos.

4.Los nodos se colocan en su posición justo antes de moverlos”

5.Se ejecuta el caso de uso Actualización de los menús al modificar una red.

6.La red se marca como modificada (si no lo estaba ya), anteponiendo un asterisco al título de la ventana en la que se edita.

Caso de uso 29: Deshacer o rehacer el desplazamiento de varios nodos

36 En el punto 4 debería figurar: “Los nodos se colocan en su posición justo después de moverlos

Informe Técnico CISIAD-10-03 Página 102 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Eliminación de varios elementosComentario: Después de haber seleccionado uno o varios elementos (nodos y/o enlaces), el usuario puede eliminarlos todos.Actor: UsuarioCurso normal Alternativas1.El usuario selecciona uno o varios elementos usando alguno de los casos de uso comentados con anterioridad.

2.Cuando el tipo de edición es la selección de objetos, el usuario pulsa la tecla SUPRIMIR o usa la opción para eliminar que hay el menú principal, en la barra de herramientas estándar o en los menús emergentes.

3.Se eliminan todos los enlaces seleccionados.

4.Se eliminan todos los enlaces que salen o entran a alguno de los nodos seleccionados.

5.Se eliminan los nodos seleccionados.

6.Se ejecuta el caso de uso Actualización de los menús al cambiar la selección de los elementos.

7.Se crea un nuevo punto para deshacer y rehacer la eliminación de los elementos.

8.Se ejecuta el caso de uso Actualización de los menús al modificar una red.

9.La red se marca como modificada (si no lo estaba ya), anteponiendo un asterisco al título de la ventana en la que se edita.

Caso de uso 30: Eliminación de varios elementos

Informe Técnico CISIAD-10-03 Página 103 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Deshacer la eliminación de varios elementosComentario: En este caso, en el punto 4 de la tabla del caso de uso Deshacer la creación de un nodo debería figurar: “Se crean los nodos eliminados, los enlaces que partían o llegaban a éstos y después los enlaces independientes”.

Caso de uso 31: Deshacer la eliminación de varios elementos

Caso de uso: Rehacer la eliminación de varios elementosComentario: En este caso, en el punto 4 de la tabla del caso de uso Deshacer la creación de un nodo debería figurar: “Se eliminan los enlaces independientes, los enlaces que partían o llegaban a los nodos y después los propios nodos que se habían creado después de eliminarlos”.

Caso de uso 32: Rehacer la eliminación de varios elementos

Caso de uso: Modificación de las propiedades de una redComentario: En cualquier momento de la ejecución, se pueden cambiar las propiedades de una red realizando los siguientes pasos.Actor: UsuarioCurso normal Alternativas

Informe Técnico CISIAD-10-03 Página 104 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Modificación de las propiedades de una redComentario: En cualquier momento de la ejecución, se pueden cambiar las propiedades de una red realizando los siguientes pasos.Actor: Usuario1.Cuando el tipo de edición es la selección de objetos, el usuario hace doble clic sobre el fondo vacío del panel de red o usa la opción para editar las propiedades de un nodo que hay el menú principal o en el menú emergente.

2.Aparece una caja de diálogo donde se pueden modificar las propiedades de la red excepto su tipo y el tipo de variables de los nodos.

3.El usuario cambia las propiedades que desee escribiendo o seleccionando nuevos valores.

3.1.El usuario puede cancelar la operación y terminará el caso de uso.

4.El usuario acepta los cambios de las propiedades.

4.1.El usuario puede cancelar la operación y terminará el caso de uso.

5.La aplicación comprueba si los datos proporcionados por el usuario son correctos.

5.1.Si algún dato no es correcto, la aplicación informa al usuario y vuelve al punto 3.

6.Si se ha cambiado el nombre de la red, se verá reflejado en el título de la ventana donde se está editando y en la lista de ventanas del menú dependiente del entorno multidocumento en el menú principal.

7.Se crea un nuevo punto para deshacer y rehacer la modificación de las propiedades de la red.

8.Se ejecuta el caso de uso Actualización de los menús al modificar una red.

9.La red se marca como modificada (si no lo estaba ya), anteponiendo un asterisco al título de la ventana en la que se edita.

Caso de uso 33: Modificación de las propiedades de una red

Informe Técnico CISIAD-10-03 Página 105 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Deshacer la modificación de las propiedades de una redComentario: En este caso, en el punto 4 de la tabla del caso de uso Deshacer la creación de un nodo se divide en varios con el siguiente texto cada uno: “El valor de las propiedades se establece a su valor antes de la modificación”.“Si se había cambiado el nombre de la red, también se modificará el título de la ventana que la alberga y el texto del menú dependiente del entorno multidocumento que la representa”.

Caso de uso 34: Deshacer la modificación de las propiedades de una red

Caso de uso: Rehacer la modificación de las propiedades de una redComentario: En este caso, en el punto 4 de la tabla del caso de uso Deshacer la creación de un nodo se divide en varios con el siguiente texto cada uno:“El valor de las propiedades se establece a su valor después de la modificación”.“Si se había cambiado el nombre de la red, también se modificará el título de la ventana que la alberga y el texto del menú dependiente del entorno multidocumento que la representa”.

Caso de uso 35: Rehacer la modificación de las propiedades de una red

Caso de uso: Modificación de las propiedades de un nodoComentario: Para editar las propiedades de un nodo, es necesario que sólo haya un nodo seleccionado y nada más, siguiendo los pasos que se detallan en la tabla.Actor: UsuarioCurso normal Alternativas1.El usuario selecciona un solo nodo y ningún enlace usando alguno de los casos de uso comentados con anterioridad.

2.Cuando el tipo de edición es la selección de objetos, el usuario hace doble clic sobre un nodo o usa la opción para editar las propiedades de un nodo que hay el menú principal o en el menú emergente.

3.Aparece una caja de diálogo donde se pueden modificar las propiedades del nodo excepto su nombre, su tipo y el tipo de su variable.

4.El usuario cambia las propiedades que desee escribiendo o seleccionando nuevos valores.

4.1.El usuario puede cancelar la operación y terminará el caso de uso

Informe Técnico CISIAD-10-03 Página 106 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Modificación de las propiedades de un nodoComentario: Para editar las propiedades de un nodo, es necesario que sólo haya un nodo seleccionado y nada más, siguiendo los pasos que se detallan en la tabla.Actor: Usuario5.El usuario puede añadir o eliminar nodos de la tabla de los nodos padre del nodo que se está editando. En esta tabla no podrán aparecer ni el nodo que se está editando ni sus hijos directos.

5.1.El usuario puede cancelar la operación y terminará el caso de uso.

6.El usuario acepta los cambios de las propiedades.

6.1.El usuario puede cancelar la operación y terminará el caso de uso.

7.La aplicación comprueba si los datos proporcionados por el usuario son correctos.

7.1.Si algún dato no es correcto, la aplicación informa al usuario y vuelve al punto 4.

8.Si se ha cambiado el título del nodo, se verá reflejado en el nodo de la red según el tipo de presentación de los nodos (por nombre o por título).

9.Se eliminan los enlaces entre el nodo en cuestión y los nodos que se han eliminado de la lista de padres del nodo.

10.Se añaden enlaces entre los nodos que se han añadido a la lista de padres y el nodo en cuestión.

11.Se crea un nuevo punto para deshacer y rehacer la modificación de las propiedades del nodo.

12.Se ejecuta el caso de uso Actualización de los menús al modificar una red.

13.La red se marca como modificada (si no lo estaba ya), anteponiendo un asterisco al título de la ventana en la que se edita.

14.Si es necesario, se cambia el tamaño del panel de red para que albergue a la totalidad de la red.

Caso de uso 36: Modificación de las propiedades de un nodo

Informe Técnico CISIAD-10-03 Página 107 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Deshacer la modificación de las propiedades de un nodoComentario: En este caso, en el punto 4 de la tabla del caso de uso Deshacer la creación de un nodo se divide en varios con el siguiente texto cada uno:“El valor de las propiedades se establece a su valor antes de la modificación”.“Si se había modificado el texto del nodo, se cambia a su valor original”.“Se eliminan los enlaces que no existían antes de la modificación y que se habían añadido a la lista de nodos padre”.“Se crean los enlaces que sí existían antes de la modificación y que se habían eliminado de la lista de nodos padre”.

Caso de uso 37: Deshacer la modificación de las propiedades de un nodo

Caso de uso: Rehacer la modificación de las propiedades de un nodoComentario: En este caso, en el punto 4 de la tabla del caso de uso Deshacer la creación de un nodo se divide en varios con el siguiente texto cada uno:“El valor de las propiedades se establece a su valor después de la modificación”.“Si se había modificado el texto del nodo, se cambia a su nuevo valor”.“Se crean los enlaces que no existían antes de la modificación y que se habían añadido a la lista de nodos padre”.“Se eliminan los enlaces que sí existían antes de la modificación y que se habían eliminado de la lista de nodos padre”.

Caso de uso 38: Rehacer la modificación de las propiedades de un nodo

Caso de uso: Copia de nodos al portapapelesComentario: Este caso de uso permite al usuario copiar algunos nodos al portapapeles de la aplicación para poder pegarlos después. La opción de copiar sólo estará disponible si hay algún nodo seleccionado y ningún enlace. Se copiará al portapapeles la información de esos nodos y la de los enlaces que salen y entran a ellos.Actor: UsuarioCurso normal Alternativas1.Cuando el tipo de edición es la selección de objetos y sólo hay nodos seleccionados, el usuario pulsa la

Informe Técnico CISIAD-10-03 Página 108 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Copia de nodos al portapapelesComentario: Este caso de uso permite al usuario copiar algunos nodos al portapapeles de la aplicación para poder pegarlos después. La opción de copiar sólo estará disponible si hay algún nodo seleccionado y ningún enlace. Se copiará al portapapeles la información de esos nodos y la de los enlaces que salen y entran a ellos.Actor: Usuariocombinación de teclas CONTROL+C o elige la opción para copiar que está disponible tanto en el menú principal como en la barra de herramientas estándar o pulsa sobre la opción del menú emergente del nodo.

2.La aplicación copia en el portapapeles la información de todos los nodos seleccionados y de todos los enlaces que salen y entran a ellos, incluyendo los enlaces que los unen con otros nodos que no son copiados. Esta información sustituye a la que hubiese almacenada en el portapapeles.

3.Se activa la opción para pegar que hay en el menú principal, en la barra de herramientas estándar y en el menú desplegable de los nodos.

Caso de uso 39: Copia de nodos al portapapeles

Caso de uso: Corte de nodos al portapapelesComentario: Este caso es similar al anterior, salvo que los nodos y todos los enlaces que salen o entran a ellos son eliminados.Actor: UsuarioCurso normal Alternativas1.Cuando el tipo de edición es la selección de objetos y sólo hay nodos seleccionados, el usuario pulsa la

Informe Técnico CISIAD-10-03 Página 109 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Corte de nodos al portapapelesComentario: Este caso es similar al anterior, salvo que los nodos y todos los enlaces que salen o entran a ellos son eliminados.Actor: Usuariocombinación de teclas CONTROL+X o elige la opción para cortar que está disponible tanto en el menú principal como en la barra de herramientas estándar o pulsa sobre la opción del menú emergente del nodo.

2.La aplicación copia en el portapapeles la información de todos los nodos seleccionados y de todos los enlaces que salen y entran a ellos, incluyendo los enlaces que los unen con otros nodos que no son copiados. Esta información sustituye a la que hubiese almacenada en el portapapeles.

3.Se activa la opción para pegar que hay en el menú principal, en la barra de herramientas estándar y en el menú desplegable de los nodos.

4.Se eliminan todos los enlaces que salen o entran a alguno de los nodos seleccionados.

5.Se eliminan los nodos seleccionados.

6.Se ejecuta el caso de uso Actualización de los menús al cambiar la selección de los elementos.

7.Se crea un nuevo punto para deshacer y rehacer el corte de los nodos.

8.Se ejecuta el caso de uso Actualización de los menús al modificar una red.

9.La red se marca como modificada (si no lo estaba ya), anteponiendo un asterisco al título de la ventana en la que se edita.

Caso de uso 40: Corte de nodos al portapapeles

Caso de uso: Deshacer el corte de nodos al portapapelesComentario: En este caso, en el punto 4 de la tabla del caso de uso Deshacer la creación de un nodo debería figurar: “Se crean los nodos que se habían cortado y después los enlaces que entraban y salían de ellos”.

Informe Técnico CISIAD-10-03 Página 110 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso 41: Deshacer el corte de nodos al portapapeles

Caso de uso: Rehacer el corte de nodos al portapapelesComentario: En este caso, en el punto 4 de la tabla del caso de uso Deshacer la creación de un nodo debería figurar: “Se eliminan los enlaces que entraban y salían de los nodos que inicialmente se habían cortado y después dichos nodos”.

Caso de uso 42: Rehacer el corte de nodos al portapapeles

Caso de uso: Pegado de nodos al portapapelesComentario: Este caso de uso permite pegar la información que hay en el portapapeles a la red actual.Actor: UsuarioCurso normal Alternativas1.Cuando el tipo de edición es la selección de objetos y si el portapapeles contiene información, el usuario pulsa la

Informe Técnico CISIAD-10-03 Página 111 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Pegado de nodos al portapapelesComentario: Este caso de uso permite pegar la información que hay en el portapapeles a la red actual.Actor: Usuariocombinación de teclas CONTROL+V o elige la opción para pegar que está disponible tanto en el menú principal como en la barra de herramientas estándar o pulsa sobre la opción del menú emergente del fondo del panel de red.

2.Se deseleccionan todos los elementos.

3.Se ejecuta el caso de uso Actualización de los menús al cambiar la selección de los elementos.

4.La aplicación coge un nodo del portapapeles y, si es apto para la red37, lo crea en su ubicación original.

4.1.Si el nodo existe, prueba a crearlo añadiendo “_X” al nombre hasta que se pueda crear. X es un número entero a partir de uno que se incrementa hasta que no haya un nodo con ese nombre. El nuevo nodo se crea un poco desplazado de su ubicación original.

5.Mientras haya nodos en el portapapeles, vuelve al punto 4.

5.1.Si no hay más nodos para crear, pasa al punto 6.

6.La aplicación coge un enlace del portapapeles y lo crea uniendo los dos nodos tanto si se han pegado como si ya estaban en la red.

6.1.Si uno de los nodos que unen el enlace no se ha copiado en el portapapeles y ya no existe, el enlace no es creado.

7.Mientras haya enlaces en el portapapeles, vuelve al punto 6.

7.1.Si no hay más enlaces para crear, pasa al punto 8.

8.Se seleccionan todos los nodos creados.

9.Se ejecuta el caso de uso Actualización de los menús al cambiar la selección de los elementos.

10.Se crea un nuevo punto para deshacer y rehacer el pegado de los nodos.

11.Se ejecuta el caso Actualización de los menús al modificar una red.

12.La red se marca como modificada (si no lo estaba ya), anteponiendo un asterisco al título de la ventana en la que se edita.

Caso de uso 43: Pegado de nodos al portapapeles

37 Un determinado nodo es apto para una red si puede ser creado en ella. Por ejemplo, los nodos de decisión y utilidad no

son aptos para las redes bayesianas pero sí para los diagramas de influencia. [8]

Informe Técnico CISIAD-10-03 Página 112 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Deshacer el pegado de nodos del portapapelesComentario: En este caso, en el punto 4 de la tabla del caso de uso Deshacer la creación de un nodo debería figurar: “Se eliminan los enlaces que entraban y salían de los nodos pegados y después dichos nodos”.

Caso de uso 44: Deshacer el pegado de nodos del portapapeles

Caso de uso: Rehacer el pegado de nodos del portapapelesComentario: En este caso, en el punto 4 de la tabla del caso de uso Deshacer la creación de un nodo debería figurar: “Se crean los nodos que inicialmente se habían pegado y después los enlaces que entraban y salían de ellos”.

Caso de uso 45: Rehacer el pegado de nodos del portapapeles

Caso de uso: Cierre de la ventana de mensajesComentario: Este caso de uso lo iniciará el usuario cuando quiera que se deje de ver la ventana de mensajes.Actor: UsuarioCurso normal Alternativas1.El usuario cierra la ventana de mensajes.

2.La ventana de mensajes se vuelve invisible.

Caso de uso 46: Cierre de la ventana de mensajes

Caso de uso: Paso a primer plano de la ventana de mensajesComentario: Este caso de uso lo iniciará el usuario cuando quiera que se vea en la pantalla la ventana donde aparecen los mensajes de la aplicación.Actor: UsuarioCurso normal Alternativas1.El usuario indica a la aplicación que quiere ver la ventana de mensajes.

2.La aplicación hace visible la ventana de mensajes y la pasa al primer plano.

Caso de uso 47: Paso a primer plano de la ventana de mensajes

Informe Técnico CISIAD-10-03 Página 113 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Copia del contenido de la ventana de mensajesComentario: Este caso de uso lo inicia el usuario cuando quiere copiar el contenido de la ventana de mensajes en el portapapeles del sistema.Actor: UsuarioCurso normal Alternativas1.El usuario indica a la ventana de mensajes que quiere copiar el contenido de la ventana de mensajes al portapapeles del sistema operativo.

1.1.Si la ventana de mensajes no se ve, el usuario debe ejecutar el caso de uso Paso a primer plano de la ventana de mensajes.

2.La aplicación copia el contenido de la ventana de mensajes en el portapapeles del sistema operativo.

Caso de uso 48: Copia del contenido de la ventana de mensajes

Caso de uso: Limpieza de la ventana de mensajes

Comentario: Este caso de uso lo inicia el usuario cuando quiere borrar el contenido de la ventana de mensajes.

Actor: Usuario

Curso normal Alternativas

1.El usuario indica a la ventana de mensajes que quiere limpiar su contenido.

1.1.Si la ventana de mensajes no se ve, el usuario debe ejecutar el caso de uso Paso a primer plano de la venta de mensajes.

2.La aplicación borra el contenido de la ventana de mensajes.

Caso de uso 49: Limpieza de la ventana de mensajes

Caso de uso: Abrir ventana de configuración de propiedades personalizables de usuarioActor: UsuarioCurso Normal Alternativas1.Se selecciona la apertura de la configuración de la aplicación en el menú principal2.Se leen las propiedades de configuración desde el fichero de propiedades3.Se presenta el árbol contraído de propiedades al usuario junto con las opciones permitidas para operar (salvar, exportar, importar, restaurar opciones por defecto, cancelar)

Caso de uso 50: Abrir ventana de configuración de usuario

Informe Técnico CISIAD-10-03 Página 114 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Cerrar ventana de configuración de propiedades personalizables de usuarioActor: UsuarioCurso Normal Alternativas1.El usuario selecciona cerrar la edición de propiedades.2.Si hay cambios sin guardar, se realiza el salvado de ellos antes de cerrar la ventana.

2.1.Si no hay cambios sin guardar, se cierra la ventana.

3.La ventana de configuración de propiedades de usuario se cierra.

Caso de uso 51: Cerrar ventana de configuración de usuario

Caso de uso: Cerrar ventana de configuración de propiedades personalizables de usuario con cancelaciónActor: UsuarioCurso Normal Alternativas1.El usuario cancela la edición de propiedades.2.Si hay cambios sin guardar, se pierden.

2.1.Si no hay cambios sin guardar, se cierra la ventana.

3.La ventana de configuración de propiedades de usuario se cierra.

Caso de uso 52: Cerrar ventana de configuración de usuario con cancelación

Caso de uso: Salvar elementos de configuración de propiedades personalizables de usuarioActor: UsuarioCurso Normal Alternativas2.Si hay cambios sin guardar, se realiza el salvado de ellos.

2.1.Si no hay cambios sin guardar, no se hace nada.

Caso de uso 53: Salvar configuración de usuario

Caso de uso: Importar configuración de propiedades personalizables de usuario desde un fichero externoActor: UsuarioCurso Normal Alternativas1.Se presenta una ventana para seleccionar el fichero externo de configuración de propiedades personalizables de usuario.2.Si el fichero es valido y contiene propiedades personalizables de usuario, se importan en la aplicación actual.

2.1.Si el fichero no es valido, se da mensaje de error y no se realiza la importación.

3.Se refresca en la ventana el árbol de propiedades configurables

3.1Si no ha habido cambios, no se realiza refresco.

Caso de uso 54: Importar configuración de usuario

Informe Técnico CISIAD-10-03 Página 115 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Exportar configuración de propiedades personalizables de usuario a un fichero externoActor: UsuarioCurso Normal Alternativas1.Se presenta una ventana para introducir el nombre del fichero externo.2.Si el nombre de fichero es valido, se exportan la configuración de propiedades personalizables de usuario.

2.1.Si el fichero no es valido, se da mensaje de error y no se realiza la exportación.

3.Se cierra la ventana de exportación quedando en la ventana de propiedades.

Caso de uso 55: Exportar configuración de usuario

Caso de uso: Abrir ventana principal de ayuda de la aplicaciónActor: UsuarioCurso Normal Alternativas1.Se selecciona la apertura de la ventana de ayuda de la aplicación en el menú principal.2.Se lee el fichero de ayuda según el lenguaje que el usuario tenga en uso en la aplicación.3.Se presenta la ayuda de la aplicación, con el menú contraído y la ventana de Introducción.

Caso de uso 56: Abrir ventana principal de ayuda de la aplicación

Caso de uso: Abrir ventana de ayuda de una ventana o elemento en la aplicaciónActor: UsuarioCurso Normal Alternativas1.El usuario pulsa F1 sobre una ventana de la aplicación o dentro de un elemento de un diálogo.2.Si el elemento o ventana tiene definida la propiedad de ayuda en línea, se abre la ventana de ayuda en la posición de la ayuda requerida.

2.1.Si el elemento o ventana no tiene definida la propiedad de ayuda en línea, no se abre ninguna ventana.

Caso de uso 57: Abrir ayuda de una ventana o elemento

Caso de uso: Buscar elementos de ayudaActor: UsuarioCurso Normal Alternativas1.Dentro de la ventana de ayuda, el usuario busca una palabra en el índice.2.La ayuda presenta las páginas donde la palabra aparece.

Informe Técnico CISIAD-10-03 Página 116 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso 58: Buscar elementos de ayuda

Caso de uso: Cambiar lenguaje de la aplicaciónActor: UsuarioCurso Normal Alternativas1.Se selecciona la apertura de la ventana de cambio de lenguaje de la aplicación en el menú principal.2.Se presenta la ventana de cambio de lenguaje, con un texto de ejemplo en el lenguaje actual, y mostrando en un desplegable los lenguajes definidos.3.El usuario selecciona el lenguaje requerido.4.La ventana se actualiza en base al nuevo lenguaje seleccionado.5.Si el usuario acepta, se genera una orden para actualizar todos los elementos de texto visuales de la aplicación en el nuevo lenguaje y se marca este lenguaje como lenguaje preferido por el usuario en las propiedades personalizables.

5.1.Si el usuario no acepta, se pasa a punto 6.

6.Se cierra la ventana.

Caso de uso 59: Cambiar lenguaje de la aplicación

Caso de uso: Añadir un padre a un nodoActor: UsuarioCurso Normal Alternativas1.Durante la edición de propiedades de un nodo se añade un nodo como padre del nodo en edición de entre los padres permitidos.2.Se genera un enlace visual.3.Se actualiza la tabla de potencial del nodo en edición para añadir los valores correspondientes al nodo padre añadido.4.Se crea un nuevo punto para deshacer y rehacer la adicción del padre al nodo.

Caso de uso 60: Añadir un padre a un nodo

Caso de uso: Eliminar un padre de un nodoActor: UsuarioCurso Normal Alternativas1.Durante la edición de propiedades de un nodo se elimina un nodo como padre del nodo en edición de entre los padres permitidos.

Informe Técnico CISIAD-10-03 Página 117 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Eliminar un padre de un nodoActor: UsuarioCurso Normal Alternativas2.Se elimina el enlace visual.3.Se actualiza la tabla de potencial del nodo en edición para eliminar los valores asociados al nodo padre eliminado.4.Se crea un nuevo punto para deshacer y rehacer la eliminación del padre al nodo.

Caso de uso 61: Eliminar padre de un nodo

Caso de uso: Cambiar el nombre de un nodoActor: UsuarioCurso Normal Alternativas1.Durante la edición de propiedades de un nodo se cambia el nombre del nodo en edición.2.Notifica a sus nodos hijo el cambio de nombre para actualizar las diferentes tablas de potenciales.3.Se crea un nuevo punto para deshacer y rehacer el cambio de nombre del nodo.

Caso de uso 62: Cambiar el nombre de un nodo

Caso de uso: Añadir un estado de un nodoActor: UsuarioCurso Normal Alternativas1.Durante la edición de propiedades de un nodo se añade un estado de la variable del nodo en edición.2.Notifica a sus nodos hijo la adicción de un nuevo estado para actualizar las diferentes tablas de potenciales.3.Se crea un nuevo punto para deshacer y rehacer la adicción del estado al nodo.

Caso de uso 63: Añadir un estado de un nodo

Caso de uso: Eliminar un estado de un nodoActor: UsuarioCurso Normal Alternativas1.Durante la edición de propiedades de un nodo se elimina un estado de la variable del nodo en edición.2.Notifica a sus nodos hijo la eliminación de un estado para

Informe Técnico CISIAD-10-03 Página 118 de 125

Informe Técnico CISIAD-10-03 Anexos

Caso de uso: Eliminar un estado de un nodoActor: UsuarioCurso Normal Alternativasactualizar las diferentes tablas de potenciales.3.Se crea un nuevo punto para deshacer y rehacer la eliminación del estado del nodo.

Caso de uso 64: Eliminar un estado de un nodo

Caso de uso: Cambiar el nombre a un estado de un nodoActor: UsuarioCurso Normal Alternativas1.Durante la edición de propiedades de un nodo se cambia el nombre de un estado de la variable del nodo en edición.2.Notifica a sus nodos hijo el cambio de nombre de un estado para actualizar las diferentes tablas de potenciales.3.Se crea un nuevo punto para deshacer y rehacer el cambio de nombre del estado del nodo.

Caso de uso 65: Cambiar el nombre a un estado de un nodo

Informe Técnico CISIAD-10-03 Página 119 de 125

Informe Técnico CISIAD-10-03 Anexos

Anexo 2 – OpenMarkovDTDSpec.xml para definir carga de OpenMarkov

<!-- OpenMarkov DTD configuration @author jlgozalo @version 1.2 22/Apr/2009 @version 1.1 07/Dic/2008 @version 1.0 30/Nov/2008 Changes in 1.1 Add ToolBar definition to the menus entry and suppress Mnemonic and Shortcut to the Toolbaritem Changes in 1.2 Add Windows definitions to allow automatic creation from the OpenMarkovDevEnv tool --><!ELEMENT configuration (menus|windows|languages)*> <!ELEMENT menus (menubar | toolbar | popupmenu)*>

<!ATTLIST menus name CDATA #IMPLIED><!ELEMENT menubar (menu)* >

<!ATTLIST menubar name CDATA #REQUIRED><!ELEMENT menu (menuitem | menuseparator | menu)* >

<!ATTLIST menu name CDATA #REQUIRED label CDATA #IMPLIED mnemonic CDATA #REQUIRED action CDATA #IMPLIED>

<!ELEMENT menuitem EMPTY><!ATTLIST menuitem

name CDATA #REQUIREDlabel CDATA #REQUIREDmnemonic CDATA #IMPLIEDshortcut CDATA #IMPLIEDaction CDATA #IMPLIEDicon CDATA #IMPLIED>

<!ELEMENT menuseparator EMPTY> <!ELEMENT toolbar (toolbaritem | toolbarseparator)* >

<!ATTLIST toolbar name CDATA #REQUIRED><!ELEMENT toolbaritem EMPTY>

<!ATTLIST toolbaritem name CDATA #REQUIREDlabel CDATA #REQUIREDaction CDATA #IMPLIEDicon CDATA #REQUIRED>

<!ELEMENT toolbarseparator EMPTY><!ELEMENT popupmenu (menuitem | menuseparator | menu)* >

<!ATTLIST popupmenu name CDATA #REQUIRED><!ELEMENT window (dialog)*> <!ATTLIST window name CDATA #REQUIRED><!ELEMENT dialog (panel)*> <!ATTLIST dialog name CDATA #REQUIRED><!ELEMENT panel (fields | panellayout)*> <!ATTLIST panel name CDATA #REQUIRED><!ELEMENT fields (field)*> <!ATTLIST fields name CDATA #REQUIRED><!ELEMENT field EMPTY> <!ATTLIST field name CDATA #REQUIRED

Informe Técnico CISIAD-10-03 Página 120 de 125

Informe Técnico CISIAD-10-03 Anexos

label CDATA #REQUIRED mnemonic CDATA #IMPLIED type CDATA #REQUIRED

action CDATA #REQUIRED><!ELEMENT panellayout (horizontal|vertical)><!ELEMENT horizontal (parallelgroup|sequentialgroup|component)*><!ELEMENT vertical (parallelgroup|sequentialgroup|component)*><!ELEMENT parallelgroup (sequentialgroup | component)*><!ELEMENT sequentialgroup (containergap | parallelgroup | preferedgap | component)*><!ELEMENT group (parallelgroup*)><!ELEMENT containergap EMPTY ><!ELEMENT preferedgap EMPTY ><!ELEMENT component EMPTY> <!ATTLIST component name CDATA #REQUIRED><!ELEMENT languages (language)*><!ELEMENT language EMPTY>

<!ATTLIST languagename CDATA #REQUIREDlabel CDATA #REQUIREDlocale CDATA #REQUIREDresourcefile CDATA #REQUIRED>

<!-- ELEMENT windows (window)* --><!-- ELEMENT window EMPTY -->

<!-- end of DTD -->

Informe Técnico CISIAD-10-03 Página 121 de 125

Informe Técnico CISIAD-10-03 Anexos

Anexo 3 – OpenMarkovMenu.xml como ejemplo del cargador de OpenMarkov

<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE configuration SYSTEM "OpenMarkovDTDSpec.dtd"><configuration> <menus> <!-- The menu bar at the top of the frame that is going to be displayed → <menubar name="TopMenu">

<menu name="File" action="FileHandler" mnemonic="F"><menuitem name="FileNew" label="New" shortcut="CTRL+N" mnemonic="N"

action="openMarkov.gui.loader.menus.DynamicMenuItemHandler" /><menuitem name="FileOpen" label="Open" shortcut="CTRL+O" mnemonic="0" /><menuseparator /><menuitem name="FileSave" label="Save" shortcut="CTRL+S" mnemonic="S" /><menuitem name="FileSaveAs" label="Save As..." mnemonic="A" /><menuseparator /><menuitem name="FileClose" label="Close" mnemonic="C" /><menuitem name="FileNetworkSettings" label="Network Settings" mnemonic="W" /><menuseparator /><menuitem name="FilePrint" label="Print" shortcut="CTRL+P" mnemonic="P" /><menuseparator /><menuitem name="FileExit" label="Exit" shortcut="ALT+F4" mnemonic="E" />

</menu><menu name="Edit" action="EditHandler" mnemonic="E">

<menuitem name="EditCut" label="Cut" shortcut="CTRL+X" mnemonic="C" /><menuitem name="EditCopy" label="Copy" shortcut="CTRL+C" mnemonic="O" /><menuitem name="EditPaste" label="Paste" shortcut="CTRL+V" mnemonic="P" /><menuitem name="EditDelete" label="Delete" shortcut="Supr" mnemonic="D" /><menuseparator /><menuitem name="EditUndo" label="Undo" shortcut="CTRL+Z" mnemonic="U" /><menuitem name="EditUndo" label="Redo" shortcut="CTRL+Y" mnemonic="R" /><menuseparator /><menuitem name="EditSelectAll" label="Select All" shortcut="CTRL+E"

mnemonic="A" /><menuseparator /><menuitem name="EditSelectObjects" label="Select objects" mnemonic="J" /><menuitem name="EditInsertProbabilityNode" label="Insert probability node"

mnemonic="B" /><menuitem name="EditInsertDecissionNode" label="Insert decission node"

mnemonic="S" /><menuitem name="EditInsertUtilityNode" label="Insert utility node"

mnemonic="Y" /><menuitem name="EditInsertLinks" label="Insert links" mnemonic="L" /><menuseparator /><menuitem name="EditNodeSettings" label="Node settings" mnemonic="N" />

</menu><menu name="View" action="ViewHandler" mnemonic="V">

<menu name="ViewNodes" label="Nodes" action="ViewNodesHandler" mnemonic="N">

<menuitem name="ViewNodesByName" label="By name"shortcut="CTRL+C" mnemonic="N" />

<menuitem name="ViewNodesByTitle" label="By Title"shortcut="CTRL+V" mnemonic="T" />

</menu><menu name="ViewZoom" label="Zoom" action="ViewZoomHandler"

mnemonic="Z"><menuitem name="ViewZoomEnlarge" label="Enlarge"

shortcut="CTRL + +" mnemonic="E" /><menuitem name="ViewZoomReduce" label="Reduce"

Informe Técnico CISIAD-10-03 Página 122 de 125

Informe Técnico CISIAD-10-03 Anexos

shortcut="CTRL + -" mnemonic="R" /><menuseparator /><menuitem name="ViewZoom500%" label="500%" /><menuitem name="ViewZoom200%" label="200%" /><menuitem name="ViewZoom150%" label="150%" /><menuitem name="ViewZoom100%" label="100%" /><menuitem name="ViewZoom75%" label="75%" /><menuitem name="ViewZoom50%" label="50%" /><menuitem name="ViewZoom25%" label="25%" /><menuitem name="ViewZoom10%" label="10%" /><menuseparator /><menuitem name="ViewZoomOther" label="Other(100%)..."

mnemonic="0" /></menu><menuseparator /><menuitem name="ViewMessageWindow" label="Message Window"

mnemonic="M" /></menu><menu name="Tools" action="ToolsHandler" mnemonic="T">

<menuitem name="ToolsLearning" label="Learning" mnemonic="L" /><menuseparator /><menuitem name="ToolsLanguage" label="Language" mnemonic="G" /><menuitem name="ToolsPreferences" label="Preferences" mnemonic="S" />

</menu><menu name="Window" action="WindowHandler" mnemonic="W">

<menuitem name="WindowOrganizeTile" label="Tile organization" mnemonic="T" /><menuitem name="WindowOrganizeMosaic" label="Mosaic organization"

mnemonic="M" /><menuitem name="WindowMinimizeAll" label="Minimize all" mnemonic="I" /><menuitem name="WindowMaximizeAll" label="Maximize all" mnemonic="A" /><menuseparator /><menuitem name="WindowPrevious" label="Previous" shortcut="CTRL+UP"

mnemonic="P" /><menuitem name="WindowNext" label="Next" shortcut="CTRL+DOWN"

mnemonic="N" /></menu><menu name="Help" action="HelpHandler" mnemonic="H">

<menuitem name="HelpTopics" label="Topics..." mnemonic="O" /><menuitem name="HelpTutorial" label="Tutorial" mnemonic="T" /><menuseparator /><menuitem name="HelpAbout" label="About OpenMarkov Project" mnemonic="A" />

</menu> </menubar> <toolbar name="Main">

<toolbaritem label="Open" name="FileOpen"icon="/gui/images/openfile.gif"action="openMarkov.gui.loader.menus.DynamicMenuItemHandler" />

<toolbarseparator /><toolbaritem label="Close" name="FileClose"

icon="/gui/icons/close.gif"action="openMarkov.gui.loader.menus.DynamicMenuItemHandler" />

</toolbar> </menus> <languages>

<language name="Spanish" label="Español" locale="es_ES" resourcefile="xxxxxx" /><language name="English" label="English" locale="en_EN" resourcefile="xxxxxx" />

</languages></configuration>

Informe Técnico CISIAD-10-03 Página 123 de 125

Informe Técnico CISIAD-10-03 Anexos

Anexo 4 – Documento de ayuda en línea al usuarioSe puede acceder al sitio web del proyecto para obtener en formato PDF el

contenido de la ayuda disponible y visible desde dentro de la aplicación

OpenMarkov al seleccionar la opción de Ayuda para usuario. Este documento

PDF se genera de manera automática por el programa de autor Helen2000©

con el que también se han realizado las pantallas de ayuda en línea.

Informe Técnico CISIAD-10-03 Página 124 de 125

Informe Técnico CISIAD-10-03 Bibliografía

Bibliografía[1] A. SHALLOWAY y J. R. TROTT. Design Patterns Explained: A New Perspective on Object-Oriented Design (2ª edition). Addison-Wesley, 2004.[2] B. ECKEL. Piensa en Java (2ª edición). Prentice Hall, 2002.[3] B. ECKEL. Thinking in Patterns. www.mindviewinc.com/Books. 2003.[4] C. S. HORSTMANN y G. CORNELL. Core Java 2 Volume I: Fundamentals (8ª edition revised for Java SE 6). Prentice Hall, 2006.[5] C. S. HORSTMANN y G. CORNELL. Core Java 2 Volume II: Advanced Features (8ª edition revised for Java SE 6). Prentice Hall, 2006.[6] Descripción, documentación técnica y enlaces relacionados con el informe técnico Elvira, disponibles en www.ia.uned.es/investig/proyectos/elvira.[7] J.E. MENDOZA. informe técnico . Interfaz Gráfica para OpenMarkov. 2008[8] E. CASTILLO, J. M. GUTIÉRREZ y A. S. HADI. Sistemas Expertos y Modelos de Redes Probabilistas. Academia de Ingeniería, Madrid, 1997.[9] F. J. DÍEZ. Introducción al Razonamiento Aproximado. Dpto. de Inteligencia Artificial, UNED, 2004.[10] F. J. DÍEZ y S. F. GALÁN. Guía de Estudio de Técnicas Avanzadas de Razonamiento. Dpto. de Inteligencia Artificial, UNED, 2005.[11] G. BOOCH, J. RUMBAUGH y I. JACOBSON. El Lenguaje Unificado de Modelado. Addison-Wesley, 2000.[12] G. BOOCH, J. RUMBAUGH y I. JACOBSON. El Proceso Unificado de Desarrollo de Software. Addison-Wesley, 2000.[13] H. M. DEITEL y P. J. DEITEL. Java: How to program (6ª edición). Prentice Hall, 2004.[14] H. M. DEITEL, P. J. DEITEL y S. E. SANTRY. Advanced Java 2 Platform: How to program. Prentice Hall, 2002.[15] M. ROBINSON y P. VOROBIEV. Swing (2ª edición). Manning, 2003.[16] M. ARIAS. Adenda Didáctica de Análisis, Diseño y Mantenimiento del Software. Dpto. de Inteligencia Artificial, UNED, 2002.[17] M. ARIAS y F. J. DÍEZ. OpenMarkov: A software tool for probabilistic graphical models. Disponible en HTTP://www.ia.uned.es/personal/fjdiez/docencia/proyectos-etsii/informe técnico-OpenMarkov.pdf. Dpto. de Inteligencia Artificial, UNED, 2006.[18] M. ARIAS, OpenMarkov Code Conventions. Disponible en el repositorio de OpenMarkov[19] R. S. PRESSMAN. Ingeniería del Software: un enfoque práctico (5ª edición). McGraw-Hill, 2001.[20] M. ARIAS, Carmen: una herramienta de software libre para modelos gráficos probabilistas. Tesis Doctoral. Dpto. Inteligencia Artificial, UNED, Madrid, 2010. http://www.cisiad.uned.es/tesis/Tesis-MArias.pdf[21] SHNEIDERMAN, B., PLAISANT, C.: Designing the User Interface: Strategies for Effective Human-Computer Interaction; Addison-Wesley, 1987. Fourth edition with Catherine Plaisant as co-author 2004: ISBN 0-321-26978-0. [22] Internacionalización (traducción: J. A. Palos): http://www.programacion.com/java/tutorial/i18n/2/

Informe Técnico CISIAD-10-03 Página 125 de 125