Page 80
__rendered_path__11
Proyecto Fin de Carrera
Desarrollo de aplicaciones para dispositivos móviles sobre la plataforma Android de Google
4.1.2 Casos de uso
En este apartado se utilizan los casos de uso como forma de acercar al lector las
funcionalidades que la aplicación ContactMap va a desempeñar frente al usuario. Sin
embargo, no se va a profundizar demasiado en las posibilidades que ofrece esta técnica,
sino que se limitará solamente en aquellos aspectos que son más ilustrativos y concisos
para el lector y que le ayuden a comprender mejor qué es lo que realiza la aplicación.
Como recordatorio se dirá que, en ingeniería del software, un caso de uso representa un
uso típico que se le da al sistema. La técnica de los casos de uso permite capturar y
definir los requisitos que debe cumplir una aplicación, y describe las típicas
__rendered_path__11
interacciones que hay entre el usuario y esta. Dicha técnica es utilizada con frecuencia
por los ingenieros del software para, entre otras cosas, mostrar al cliente de forma clara
y sencilla qué tipo de acciones podrá realizar su futuro sistema.
A continuación se muestra un diagrama con los casos de uso asociados a ContactMap,
utilizando el estándar UML 2.0 [35].
Jaime Aranaz Tudela
80
Ingeniería en Informática

Page 81
__rendered_path__11
__rendered_path__13__rendered_path__19__rendered_path__49
Proyecto Fin de Carrera
__rendered_path__14__rendered_path__19__rendered_path__57
Desarrollo de aplicaciones para dispositivos móviles sobre la plataforma Android de Google
__rendered_path__15__rendered_path__24__rendered_path__53__rendered_path__67
__rendered_path__16__rendered_path__14
__rendered_path__11__rendered_path__18Image_459_0__rendered_path__27__rendered_path__35__rendered_path__68__rendered_path__71
__rendered_path__12InlineImage3017__rendered_path__30__rendered_path__38__rendered_path__69__rendered_path__72
Figura 16. Diagrama de casos de uso de ContactMap.
InlineImage3016__rendered_path__18Image_459_0__rendered_path__42__rendered_path__73
Image_460_0__rendered_path__46__rendered_path__74__rendered_path__77
__rendered_path__23Image_461_0__rendered_path__48Image_469_0__rendered_path__60__rendered_path__75__rendered_path__78
En diagrama mostrado en la Figura 16, el sistema, (es decir, la aplicación ContactMap)
__rendered_path__26Image_462_0Image_464_0InlineImage3021__rendered_path__62__rendered_path__76__rendered_path__79
está representado por una caja que contiene los casos de uso. Cada caso de uso consiste
__rendered_path__29Image_463_0__rendered_path__34__rendered_path__52Image_470_0__rendered_path__56Image_470_0Image_474_0Image_475_0__rendered_path__80
en un óvalo con un nombre descriptivo en su interior. Fuera del sistema se encuentra los
InlineImage3018__rendered_path__37Image_465_0Image_471_0Image_472_0InlineImage3023__rendered_path__81
actores que pueden interactuar con él. En este caso, a pesar de estar representado por
InlineImage3019InlineImage3020__rendered_path__66__rendered_path__82
dos figuras por motivos de espacio y legibilidad, existe un único actor de nombre
__rendered_path__41Image_466_0InlineImage3024__rendered_path__83
“usuario” que es el que realiza todos los casos de uso.
Image_467_0
__rendered_path__45Image_468_0
A continuación se ofrece una breve descripción del cometido de cada uno de los casos
__rendered_path__59Image_473_0
de uso mostrados en el diagrama:
InlineImage3021
Mostrar ubicación propia: mostrar en el mapa la ubicación actual del usuario.
__rendered_path__109
Jaime Aranaz Tudela
81
Ingeniería en Informática

Page 82
Proyecto Fin de Carrera
Siguiendo el mismo criterio, el siguiente diagrama expresa los
servidor al que se conecta la aplicación para gestionar la inf
Jaime Aranaz Tudela
Ingeniería en Informática
__rendered_path__11
Desarrollo de aplicaciones para dispositivos móviles sobre la plataforma Android de Google
Mostrar ubicación contactos: mostrar en el mapa las ubicaciones de los
__rendered_path__12
contactos del usuario, siempre y cuando se disponga de información de
localización.
Cambiar tipo de mapa: alternar la imagen entre la vista de satélite (fotografía
__rendered_path__12
aérea) y vista de callejero.
Desplazar mapa: desplazar el mapa en el sentido pulsado por el usuario.
__rendered_path__12
Hacer zoom in/out: acerca o alejar el nivel de zoom del mapa.
__rendered_path__12
Listar contactos: listar en orden alfabéticos todos aquellos contactos para los
__rendered_path__11__rendered_path__12
que se disponga de información de localización.
Seleccionar un contacto: elegir un contacto, centrando en él el mapa y
__rendered_path__12
haciéndole objeto de las diferentes acciones.
Seleccionar contacto siguiente: elegir al contacto siguiente por orden alfabético
__rendered_path__12
al actual, centrando en él el mapa y haciéndole objeto de las diferentes acciones.
Seleccionar contacto anterior: elegir al contacto anterior por orden alfabético
__rendered_path__12
al actual, centrando en él el mapa y haciéndole objeto de las diferentes acciones.
Llamar a contacto: realizar una llamada telefónica al contacto actual.
__rendered_path__12
Enviar SMS a contacto: enviar un mensaje de texto al contacto actual.
__rendered_path__12
Enviar correo electrónico a contacto: enviar un correo electrónico al contacto
__rendered_path__12
actual.
Ver información de contacto: visualizar la fecha y hora de la última vez que el
__rendered_path__12
contacto actualizó su localización.
casos de uso asociados al
ormación de localización:
82

Page 83
__rendered_path__11
__rendered_path__13
Proyecto Fin de Carrera
__rendered_path__14
Desarrollo de aplicaciones para dispositivos móviles sobre la plataforma Android de Google
__rendered_path__15__rendered_path__19
__rendered_path__16__rendered_path__23__rendered_path__30
__rendered_path__12Image_488_0__rendered_path__25
__rendered_path__11Image_487_0__rendered_path__18Image_489_0Image_491_0
Figura 17. Diagrama de casos de uso del servidor de ContactMap
__rendered_path__22Image_490_0InlineImage3025
Image_489_0Image_492_0
Image_493_0
En el diagrama de la Figura 17, el único actor que realiza los casos de uso es la propia
aplicación ContactMap, ya que es la que establece la conexión con el servidor. Los
casos de uso considerados son:
Actualizar localización: actualizar los datos de localización del usuario.
__rendered_path__45
Conocer localización: obtener los datos de localización del usuario solicitado.
__rendered_path__45
Es importante recalcar que los casos de uso simplemente expresan el punto de vista del
usuario sobre cómo debe funcionar la aplicación y qué puede realizar a través de ella, y
son una forma de facilitar su comprensión. No tiene porqué existir ninguna
correspondencia entre los casos de uso y la clases finalmente implementadas, más allá
de que las clases en su conjunto, como sistema completo, realizan aquello que los casos
de uso expresan.
4.1.3 Intercambio de información con XML
ContactMap obtiene la información de localización de los contactos del usuario
conectándose a un servidor, donde además actualiza su propia ubicación para que esté
disponible para otros usuarios. Estos intercambios de información entre aplicación y
servidor se realizan utilizando documentos XML. Como seguramente conocerá el lector,
el lenguaje de marcado XML permite expresar de forma sencilla y abierta diferentes
estructuras de datos, manteniendo intacta su semántica y contenidos.
El uso de XML entre otras alternativas responde principalmente a dos criterios. Por un
lado, se trata de un estándar regulado y ampliamente utilizado, lo que facilita su
comprensión y la posible ampliación o interconexión con otros servicios en un futuro.
Por otro, es una tecnología muy fácil de usar y cuenta con diferentes API en Java que
convierten en algo automático la lectura y composición de este tipo de documentos. En
concreto, tanto en el lado servidor como en el lado de la aplicación en Android, se
utiliza la biblioteca SAX.
Jaime Aranaz Tudela
83
Ingeniería en Informática

Page 84
__rendered_path__11
Proyecto Fin de Carrera
Desarrollo de aplicaciones para dispositivos móviles sobre la plataforma Android de Google
Cuando se desea utilizar documentos XML que cuenten siempre con una misma
estructura, como es el caso que nos ocupa, se suelen definir unas plantillas que expresan
la forma en la que debe ser construido este documento XML para ser considerado
válido. Una de estas plantillas es la que se denomina DTD, y expresa de forma muy
clara qué tipo de elementos e información puede contener un determinado documento
XML.
En ContactMap se definen dos tipos distintos de documentos XML: el de petición y el
de respuesta. El siguiente DTD define un documento de petición:
__rendered_path__33
__rendered_path__11__rendered_path__33
<!ELEMENT contactmap-request (me, contact*)>
__rendered_path__34
<!ELEMENT me (number, latitude, longitude, date)>
__rendered_path__33
<!ELEMENT number (#PCDATA)>
__rendered_path__33
<!ELEMENT latitude (#PCDATA)>
__rendered_path__35
<!ELEMENT longitude (#PCDATA)>
__rendered_path__35
<!ELEMENT date (#PCDATA)>
__rendered_path__37
<!ELEMENT contact (#PCDATA)>
__rendered_path__37
__rendered_path__39
__rendered_path__39
Código 14. DTD para peticiones
__rendered_path__41
__rendered_path__41
__rendered_path__39
Un documento de petición consta de dos partes. En la primera, de carácter obligatorio,
__rendered_path__39
el usuario notifica sus datos para ser actualizados en el servidor: el número de teléfono
__rendered_path__39
que lo identifica, los datos de localización expresados en una latitud y una longitud, y la
__rendered_path__39
fecha actual consistente en día, mes, año, hora, minutos y segundos. En la segunda parte
__rendered_path__41
del documento de petición, de carácter opcional, se incluyen los números de teléfono de
__rendered_path__41
aquellos contactos para los que solicita conocer su ubicación.
__rendered_path__39
__rendered_path__39
El Código 15 muestra un documento de petición válido y aceptado por el servidor. En
__rendered_path__33__rendered_path__47
él, el usuario actualiza sus datos de localización y además solicita la localización de tres
__rendered_path__33__rendered_path__47
de sus contactos:
__rendered_path__34
__rendered_path__33
__rendered_path__33
__rendered_path__33
<?xml version="1.0" encoding="UTF-8"?>
__rendered_path__33
<!DOCTYPE contactmap-request SYSTEM "contactmap-request.dtd">
__rendered_path__34
__rendered_path__33
<contactmap-request>
__rendered_path__33
__rendered_path__47
<me>
__rendered_path__47
<number>660854377</number>
__rendered_path__39
<latitude>40.425970</latitude>
__rendered_path__39
<longitude>-3.696010</longitude>
__rendered_path__41
<date>2008-01-04 18:30:42</date>
__rendered_path__41
</me>
__rendered_path__39
__rendered_path__39
__rendered_path__39
Jaime Aranaz Tudela
84
__rendered_path__39__rendered_path__41__rendered_path__41__rendered_path__39__rendered_path__39__rendered_path__37__rendered_path__37__rendered_path__37__rendered_path__37__rendered_path__39__rendered_path__39__rendered_path__37__rendered_path__37__rendered_path__37__rendered_path__37__rendered_path__37__rendered_path__37__rendered_path__39__rendered_path__39__rendered_path__33__rendered_path__33__rendered_path__34__rendered_path__33__rendered_path__33__rendered_path__47__rendered_path__47
Ingeniería en Informática

Page 85
__rendered_path__11
Proyecto Fin de Carrera
Desarrollo de aplicaciones para dispositivos móviles sobre la plataforma Android de Google
__rendered_path__13
__rendered_path__13
<contact>647889034</contact>
__rendered_path__14
<contact>688403241</contact>
__rendered_path__13
<contact>654312526</contact>
__rendered_path__13
__rendered_path__15
</contactmap-request>
__rendered_path__15
__rendered_path__17
__rendered_path__17
Código 15. Ejemplo de petición XML válida
__rendered_path__17
__rendered_path__17
__rendered_path__20
Los documentos de respuesta deben, por su parte, cumplir lo definido en la plantilla
__rendered_path__20
DTD mostrada en el Código 16:
__rendered_path__11__rendered_path__17
__rendered_path__17
__rendered_path__23
__rendered_path__23
<!ELEMENT contactmap-response (contact+ | error)>
__rendered_path__13__rendered_path__25
<!ELEMENT contact (number, latitude, longitude, date)>
__rendered_path__13__rendered_path__25
<!ELEMENT error (#PCDATA)>
__rendered_path__14
<!ELEMENT number (#PCDATA)>
__rendered_path__13
<!ELEMENT latitude (#PCDATA)>
__rendered_path__13
<!ELEMENT longitude (#PCDATA)>
__rendered_path__13
<!ELEMENT date (#PCDATA)>
__rendered_path__13
__rendered_path__14
__rendered_path__13
Código 16. DTD para respuestas
__rendered_path__13
__rendered_path__25
__rendered_path__25
En el documento de respuesta viajan los datos de localización de aquellos contactos que
__rendered_path__23
hayan actualizado en algún momento su ubicación en el servidor. Dicho de otro modo,
__rendered_path__23
pueden existir contactos solicitados por la aplicación ContactMap en su documento de
__rendered_path__23
petición para los cuales no existan datos de localización disponibles, por lo que no serán
__rendered_path__23
incluidos en el documento de respuesta. En caso de haber ocurrido algún error no se
__rendered_path__23
adjunta información de ningún contacto, sino que se describe el error acaecido.
__rendered_path__23
__rendered_path__23
El siguiente documento de respuesta es un documento válido según la plantilla DTD
__rendered_path__23
anteriormente mostrada. En él, se comunican a la aplicación los datos de dos de los tres
__rendered_path__17
contactos solicitados según la petición del Código 15, al ser los únicos disponibles. El
__rendered_path__17
primer contacto probablemente está utilizando en este momento ContactMap, ya que la
__rendered_path__23
hora de actualización es casi contemporánea a la comunicada por el usuario de la
__rendered_path__23
petición (ver Código 15). El segundo contacto actualizó por última vez su posición el
__rendered_path__23
día anterior.
__rendered_path__23
__rendered_path__45__rendered_path__15
__rendered_path__45__rendered_path__15
__rendered_path__46
<?xml version="1.0" encoding="UTF-8"?>
__rendered_path__45
<!DOCTYPE contactmap-response SYSTEM "contactmap-response.dtd">
__rendered_path__45
<contactmap-response>
__rendered_path__45
__rendered_path__45
__rendered_path__46
__rendered_path__45
Jaime Aranaz Tudela
85
__rendered_path__45__rendered_path__15__rendered_path__15__rendered_path__23__rendered_path__23__rendered_path__23__rendered_path__23__rendered_path__23__rendered_path__23__rendered_path__23__rendered_path__23__rendered_path__17__rendered_path__17__rendered_path__45__rendered_path__45__rendered_path__46__rendered_path__45__rendered_path__45__rendered_path__15__rendered_path__15
Ingeniería en Informática

Page 86
__rendered_path__11
Proyecto Fin de Carrera
Desarrollo de aplicaciones para dispositivos móviles sobre la plataforma Android de Google
__rendered_path__13
__rendered_path__13
<contact>
__rendered_path__14
<number>647889034</number>
__rendered_path__13
<latitude>40.425968</latitude>
__rendered_path__13
<longitude>-3.976010</longitude>
__rendered_path__15
<date>2008-01-04 18:29:15</date>
__rendered_path__15
</contact>
__rendered_path__17
__rendered_path__17
<contact>
__rendered_path__17
<number>688403241</number>
__rendered_path__17
<latitude>40.428974</latitude>
__rendered_path__20
<longitude>-3.717503</longitude>
__rendered_path__20
<date>2008-01-03 11:49:00</date>
__rendered_path__17
</contact>
__rendered_path__17
__rendered_path__11__rendered_path__23
</contactmap-response>
__rendered_path__23
__rendered_path__23
__rendered_path__23
Código 17. Ejemplo de respuesta XML válida
__rendered_path__17
__rendered_path__17
4.1.4 Servidor
__rendered_path__23
__rendered_path__23
El servidor al que se conecta ContactMap realiza dos funciones principales: actualizar
__rendered_path__23
información de localización del usuario y enviarle la información de localización de los
__rendered_path__23
usuarios (esto es, sus contactos) solicitados. Mediante la actualización, un usuario
__rendered_path__23
cualquier envía sus datos (latitud, longitud y fecha, además de su número de teléfono
__rendered_path__23
identificativo) y estos son almacenados en una base de datos. En la consulta, el servidor
__rendered_path__17
lee los contactos solicitados y devuelve la información de todos aquellos que estén
__rendered_path__17
presentes en esta misma base de datos.
__rendered_path__23
__rendered_path__23
En la composición del servidor funcionan en realidad tres componentes básicos:
__rendered_path__23
__rendered_path__23
Una base de datos, que almacena toda la información de localización que envían
__rendered_path__17
los usuarios.
__rendered_path__17
Un servlet, que atiende la petición recibida, la procesa y envía la respuesta
__rendered_path__20
correspondiente.
__rendered_path__20
Un servidor web, donde reside y se ejecuta el servlet, y que permanece a la
__rendered_path__35__rendered_path__37
espera de conexiones HTTP entrantes.
__rendered_path__35__rendered_path__37
__rendered_path__36
Para la base de datos se utiliza el gestor MySQL 5.0, usándolo bajo la licencia gratuita
__rendered_path__35
que permite su explotación para desarrollos no lucrativos, como es la aplicación que
__rendered_path__35
ocupa este proyecto. En él se ha implementado una sencilla base de datos llamada
__rendered_path__61
ContactMapBD que cuenta con una única tabla; en esta se almacena para cada usuario
__rendered_path__61
el número de teléfono que lo identifica, su latitud y longitud, así como la fecha completa
__rendered_path__61
de actualización. El siguiente script es el utilizado para generar dicha base de datos.
Jaime Aranaz Tudela
86
Ingeniería en Informática

Page 87
__rendered_path__11
Proyecto Fin de Carrera
Desarrollo de aplicaciones para dispositivos móviles sobre la plataforma Android de Google
__rendered_path__14
__rendered_path__14
--
__rendered_path__15
-- Crear la base de datos `ContactMapBD`
__rendered_path__14
--
__rendered_path__14
DROP DATABASE `ContactMapBD`;
__rendered_path__16
CREATE DATABASE `ContactMapBD`
__rendered_path__16
DEFAULT CHARACTER SET latin1
__rendered_path__18
COLLATE latin1_spanish_ci;
__rendered_path__18
USE `ContactMapBD`;
__rendered_path__18
__rendered_path__18
-- --------------------------------------------------------
__rendered_path__21
--
__rendered_path__21
-- Estructura de tabla para la única tabla `friend`
__rendered_path__11__rendered_path__18
--
__rendered_path__18
__rendered_path__24
CREATE TABLE IF NOT EXISTS `friend` (
__rendered_path__24
`number` bigint NOT NULL,
__rendered_path__24
`latitude` float (8,6) NOT NULL,
__rendered_path__24
`longitude` float (8,6) NOT NULL,
__rendered_path__18
`date` datetime NOT NULL,
__rendered_path__18
PRIMARY KEY (`number`)
__rendered_path__24
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci;
__rendered_path__24
__rendered_path__24
__rendered_path__24
Código 18. Script SQL de la base de datos del servidor
__rendered_path__24
__rendered_path__24
__rendered_path__18
El servlet es el componente que procesa las peticiones que envían los usuarios.
__rendered_path__18
Actualiza la información del usuario, accede a la base de datos en busca de los contactos
__rendered_path__24
solicitados, y devuelve la respuesta. Como información para el lector, se dirá que un
__rendered_path__24
servlet no es más que un componente Java, generalmente pequeño e independiente de la
__rendered_path__24
plataforma, que se ejecuta en un servidor web al que extiende su funcionalidad. El
__rendered_path__24
servlet implementado recibe el nombre de ContactMapServlet y es al que van dirigidas
__rendered_path__18
las conexiones.
__rendered_path__18
__rendered_path__21
Cuando recibe una petición, el servlet utiliza la librería SAX de Java para leer el
__rendered_path__21
documento XML completo. En primer lugar, actualiza en la base de datos la
__rendered_path__18
localización comunicada por el usuario. A continuación, consulta en la base de datos
__rendered_path__18
todos aquellos contactos que el usuario ha indicado en la petición recibida. Esta
__rendered_path__24
consulta la realiza gracias a las librerías de JDBC y MySQL de Java. Por último, el
__rendered_path__24
servlet compone y envía a su vez una respuesta en un nuevo documento XML, donde
__rendered_path__24
incluirá los datos de localización de todos aquellos contactos que estén presentes en la
__rendered_path__24
base de datos.
__rendered_path__18
__rendered_path__18
Por su parte, el servidor web utilizado es Apache Tomcat (también en su distribución
__rendered_path__24
gratuita) y es el entorno donde se ejecuta el servlet, quedando siempre a la espera de
__rendered_path__24
recibir conexiones HTTP. Todas las comunicaciones entre la aplicación ContactMap y
__rendered_path__24
el servidor se envían a través de dicho protocolo. En las peticiones, el método HTTP
__rendered_path__24
utilizado es POST, correspondiente al envío de datos, y se encapsula el documento
__rendered_path__45__rendered_path__16
Jaime Aranaz Tudela
87
__rendered_path__45__rendered_path__46__rendered_path__45__rendered_path__45__rendered_path__16
Ingeniería en Informática