Informe
Proyecto “TweetPad”
ELO329 - Diseño y
Programación Orientados a Objeto
24-11-2011
Integrantes:
Valentin Bondoux
Thomas Guerneve
Guillermo Plaza
Vicente Almonacid
1.-
Descripción del problema
El problema surge
a partir de la gran cantidad de información que una persona
debe manejar actualmente en su vida cotidiana, ya sea en su trabajo,
estudios, tramitaciones, viajes, etc. Consideraremos como primer
problema la necesidad de manejar grandes volúmenes de
información. Un segundo problema surge cuando una persona
tiene trastornos severos a la memoria, y se le hace imposible manejar
la información de su entorno cotidiano por sí misma o
con las herramientas comunes.
2.-
Análisis del problema, descripción del sistema y casos
de uso.
El problema planteado sugiere la creación
de una aplicación que permita dar soporte al usuario para
almacenar y recuperar información. En términos simples,
el software desarrollado es una herramienta de ayuda-memoria. Éste
entrega la posibilidad de guardar eventos con información de
individuos, lugares, fechas, etc. y ser recuperados en el futuro. La
característica más importante que ofrece la aplicación
es la opción de hacer consultas, la cual no solo permite
buscar por alguna persona en particular o algún tag guardado,
si no que además posibilita encontrar relaciones entre ellos,
obteniendo información más especifica.
Como la idea
es ayudar, no complicar al usuario, se presenta el software con una
interfaz simple e intuitiva que contiene 3 secciones principales:
New Notes: Panel donde se ingresan los nuevos eventos que se quieran guardar.
My Notes: Panel donde se muestran los eventos guardados ordenados desde el más nuevo y donde se despliegan los resultados de las búsquedas.
Search: Sector donde se ingresan los parámetros de búsqueda.
La manera en como el
sistema interactúa con el usuario es muy simple y puede
resumirse con el siguiente diagrama:
Figura 1 "Diagrama del
sistema"
2.1 Casos de uso:
La sintaxis para escribir notas está basada en la que se usa en redes sociales, de esta manera es más fácil familiarizarse con el modo en que funciona la aplicación.
2.1.1
Nombre:Ingresar
nota.
Propósito:
El usuario desea ingresar a la base de datos una nota.
Actor:
Usuario.
Pre-condición:
Existe una base de datos adecuada.
Evento:
El usuario ingresa una nota.
Post-condición:
La nota queda guardada en la base de datos.
Tipo:
Manual.
Curso normal del evento.
1.- El usuario ingresa la
nota en el cuadro “New Note” y aprieta el botón
“send”.
2.- La interfaz se conecta con la base de
datos.
3.- La base de datos guarda la nota ingresada.
2.1.2
Nombre:
Consulta por personas.
Propósito: Encontrar notas en la
base de datos que tengan presentes la o las personas buscadas.
Actor:
Usuario.
Pre-condición: Existe una base de datos
adecuada.
Evento: Se ingresa una búsqueda en la zona de
búsqueda.
Post-condición: La interfaz se logra
comunicar con la base de datos.
Tipo: Manual.
Curso normal
del evento.
1.- El usuario ingresa el carácter “@”
antes del nombre que desea buscar. Por ejemplo, "@jperez" o
"@jperez @pablo" para buscar notas con varias personas.
2.-
La base de datos reconoce la petición del carácter “@”
y retorna las notas que contengan a la o las personas buscadas.
3.-
La interfaz despliega las notas encontradas en la zona “My
Notes”.
2.1.3
Nombre:
Consulta por tags.
Propósito: Encontrar notas en la base de
datos que tengan presente el o los tags buscados.
Actor:
Usuario.
Pre-condición: Existe una base de datos
adecuada.
Evento: Se ingresa una búsqueda en la zona de
búsqueda.
Post-condición: La interfaz se logra
comunicar con la base de datos.
Tipo: Manual.
Curso normal
del evento.
1.- El usuario ingresa el carácter “#”
antes del tag que desea buscar. Por ejemplo, "#elo329" o
"#elo329 #proyecto" para buscar notas con varios tags.
2.-
La base de datos reconoce la petición del carácter “#”
y retorna las notas que contengan el o los tags buscados.
3.-
La interfaz despliega las notas encontradas en la zona “My
Notes”.
2.1.4
Nombre:
Consulta por relaciones entre personas y tags.
Propósito:
Encontrar notas en la base de datos que tengan presente la o las
personas y el o los tags buscados.
Actor: Usuario.
Pre-condición:
Existe una base de datos adecuada.
Evento: Se ingresa una búsqueda
en la zona de búsqueda.
Post-condición: La interfaz
se logra comunicar con la base de datos.
Tipo: Manual.
Curso
normal del evento.
1.- El usuario ingresa el carácter “@”
antes del nombre y “#” para el tag que se desea buscar.
Por ejemplo, "#elo329 @jperez" para buscar notas con
varios tags.
2.- La base de datos reconoce la petición de
los caracteres “@” y “#” y retorna las notas
que contengan el o los tags y personas buscados.
3.- La interfaz
despliega las notas encontradas en la zona “My Notes”.
2.2 Ejemplos y resultados de casos de uso
2.2.1
Ingreso de notas
Consideremos una situación cualquiera en
la que el usuario quiera guardar cierta información
recurrente. Supongamos que el usuario esté cursando la
asignatura elo329 e ingresa las siguientes notas:
1 |
"el profesor de este semestre es @agustingonzalez #elo329" |
2 |
"la #tarea 2 será publicada la próxima semana #elo329" |
3 |
"mi compañero @jperez ya terminó su parte de la #tarea #elo329" |
4 |
"mi compañeros de proyecto son @jperez y @pablo #elo329" |
Tabla 1 "Ejemplo de ingreso de notas"
Esto se vería así en la interfaz:
Figura 2 "Ejemplo de
ingreso de notas"
2.2.2 Consulta por personas
Ejemplo consulta por "@jperez":
Figura 3 "Ejemplo
busqueda por persona"
2.2.3 Consulta por tags
Ejemplo consulta por "#elo329". Como en la tabla 1 se
ve que todas las notas contienen este tag, se obtienen todas.
Figura 4 "Ejemplo
busqueda por tag"
2.1.4 Consulta por relaciones
entre personas y tags
Si el usuario consulta en algún
tiempo muy posterior por: “@jperez #elo329”, recordará
que jperez fue su compañero de trabajo en elo329.
Figura 5 "Ejemplo
busqueda por persona y tag"
3.- Diagramas de diseño de la aplicación
Primero fue necesario diseñar un modelo de datos que permita almacenar la información es forma conveniente para luego ser tratada de acuerdo a como la aplicación lo requiera. El diagrama final se muestra a continuación.
Figura 6 "Diagrama de
modelo de base de datos"
Por otro lado, y para mantener independencia entre la aplicación y los datos, existe un modelo de clases diferente para la aplicación java (figura 7).
Figura
7 "Diagrama de clases"
Se muestra el diagrama de secuencia para el caso en que se ingresa una nueva nota(figura 8).
Figura 8 "Diagrama de
secuancia de ingreso de nueva nota"
4.- Principales dificultades
Dificultad 1: Que
el programa brinde opciones de auto-llenado al momento de poner un
“@” (lo que indica una persona) o un “#”
(que indica la presencia de un tag) con información
anteriormente almacenada en la base de datos durante las notas
antiguas. Por ejemplo al escribir @j que muestre toda opción
de personas que tengan presente la “j” en el nombre.
Solucion 1: Investigando en internet se encontró
código en el que apoyarse para llegar a la solución
deseada.
Dificultad 2:
Diseñar una interfaz simple que sea intuitiva y permita el
correcto respaldo de información en pocos pasos.
Solucion
2: Se hizo una interfaz de pocas secciones y opciones, pero bien
indicadas, con el objetivo de no confundir al usuario.
Dificultad 3:
Diseñar un buen modelo de datos y obtener información
semántica de las notas que ingresa el usuario.
Solucion
3: Usar la sintaxis típica que se usa actualmente en las
redes sociales (anteponer @ al querer indicar un nombre de una
persona y # cuando se quiere ingresar un tag), de esta forma se
logra que la detección de estos dos parámetros sea más
simple y por lo mismo facilite el posterior análisis de
datos. Una vez realizado esto fue más fácil diseñar
el modelo de datos.
5.-
Instrucciones de Instalacción
1.
La aplicación requiere una base de datos para almacenar la
información. Se debe instalar primero MySQL Server. En el
sitio http://dev.mysql.com/downloads/mysql/
puede
elegir la versión correspondiente a su plataforma. En este
paso se establece una contraseña para acceder a la base de
datos, ésta será necesaria posteriormente.
2.
Luego es necesario crear la base de datos, para ello es necesario
usar el modelo que se especifica en el archivo tweetpad.sql.
Este archivo se puede ejecutar en cualquier aplicación que
sirva para gestionar una base de datos, o bien, usando la herramienta
MySQL desde la consola:
shell>
mysql < tweetpad.sql
Hay
que tener cuidado pues este archivo debe ejecutarse sólo la
primera vez que se instala la aplicación, de otra manera si la
base de datos ya existe será eliminada y creada
nuevamente.
3.
Luego es imperativamente necesario modificar el código antes
de compilarlo, pues es necesario establecer la contraseña de
la base de datos. En la clase TweetPadUI.java, modificar la
línea:
dbI
= new DBInteraction("tweetpad", "root",
"<PASSWORD_BD>");
4.
A continuación debe asegurarse que el driver Java para
conectarse a MySQL esté en el CLASSPATH. Una manera de hacer
esto es la siguiente: descomprima el archivo
mysql-connector-java-5.1.13.tar.gz,
que viene incluido en la carpeta del proyecto, y copie el archivo
mysql-connector-java-5.1.13-bin.jar en la ruta por defecto de java,
en windows es en general C:\Program
Files\Java\jre6\lib\ext
5.
Finalmente, resta compilar el código fuente que se encuentra
en el directorio \src y luego ejecutar la clase principal Main.
Desde linux se puede usar:
>
make
>
make run
Para
más información sobre cómo trabajar con Java y
MySQL, puede revisar el siguiente tutorial
http://www.chuidiang.com/java/mysql/mysql-java-basico.php
Sobre
cómo configurar el CLASSPATH de la máquina virtual
java:
http://docs.oracle.com/javase/tutorial/essential/environment/paths.html