Informe Proyecto “TweetPad”
ELO329 - Diseño y Programación Orientados a Objeto
24-11-2011

Integrantes:

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:


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



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