| |
Trabajos
Ejercicio 5: Foliotracker,
1ª Parte
PLAZO DE ENTREGA: 6ª semana
Le aconsejamos que lea todos los
problemas antes de comenzar a trabajar.
Introducción
En los dos ejercicios siguientes,
usted construirá Foliotracker,
un programa de aplicación para seguir el comportamiento
de una cartera de títulos valores. El primer
ejercicio debe estar hecho y entregado para calificación
antes de empezar con el segundo.
En los dos primeros ejercicios, decidirá la funcionalidad
básica de su programa. Para ello diseñará
una interfaz gráfica de usuario (GUI), y especificará
una interfaz para la programación de aplicaciones
(API), a
través de la cual, la GUI accederá a los
componentes del código que obtienen la cotización
de las acciones y que mantienen
una base de datos de valores y demás. La ventaja
de dividir esta
aplicación en dos partes (una GUI
front-end y la implementación back-end),class="revisarojo"
creando una API bien definida, es permitir que distintos
tipos de clientes front-end accedan
a su sistema y hagan uso de su funcionalidad. De hecho,
no va a escribir todo el código que implemente
a la API; en su lugar, escribirá un stub:
es decir, una parte de código que se usa para
testear a un cliente de la API, pero que proporciona
sólo una funcionalidad muy limitada. Por ejemplo,
usted puede hacer que el stubno
compute nada y que simplemente busque los valores en
una tabla fija.
Este stub
le permitirá montar y testear la GUI y le asegurará
que la funcionalidad es aceptable. En el segundo ejercicio,
implementará la funcionalidad de la API propiamente
dicha. No es preciso que haga cambios en la GUI o en
la API.
El primer ejercicio centra su interés el diseño
de la API y la implementación de la GUI. Necesitará
aprender a utilizar Swing. El tutorial en línea
de Java, que se encuentra en http://java.sun.com/docs/books/tutorial/
, incluye una sección sobre Swing y las clases
de la Fundación Java;class="revisarojo"
lo encontrará en http://java.sun.com/docs/books/tutorial/uiswing/
.
El segundo ejercicio hace hincapié en el diseño
del back-endy su implementación.
No será necesario que aprenda nada nuevo, pero
tendrá la oportunidad de refinar sus habilidades
de diseño con tipos de datos abstractos, modelos
de objetos, etc. No necesita implementar el código
para obtener la cotización de las acciones; le
proporcionaremos una clase con un método simple
que toma un símbolo de transacción como
una cadena y devuelve una cotización.
Ejercicio 5
El programa Foliotracker permite
al usuario seguir los contenidos y el comportamiento
de diversas carteras de valores. Un Foliotracker se
puede utilizar para gestionar y mantener diversas
carteras de valores, una cartera es una
colección de títulos valores. Un cartera
podría también contener meta-datos class="revisarojo"
sobre la historia de las transacciones de una persona,
sobre las estadísticas, etc. Foliotracker descubre
el valor actual de las acciones consultando, a través
de la web, con un servidor de cotizaciones de títulos
valores. Su tarea principal consiste en determinar la
funcionalidad de Foliotracker. Como mínimo, debería
ser posible:
- crear múltiples portafolios;
- ver las posiciones (nombre
de la acción, número de acciones suscritas,
cotización por acción y valor de la
participación), en una cartera de valores;
- aumentar y disminuir el número
de acciones;
- ver el valor total de
una cartera.
Le hemos facilitado algunas
capturas de pantalla de
posibles funcionalidades.
Aquí tiene algunas características posibles
que podría tener en cuenta e incluir en su diseño:
- guardar la información
de la cartera en disco;
- indicar si la cotización
está subiendo o bajando, marcando quizás
el texto con colores o utilizando pequeñas
flechas de color;
- permitir que el usuario introduzca
el precio al que se compró la acción
para calcular ganancias y pérdidas;
- mantener un seguimiento de las
fluctuaciones;
- colocar centinelas que realicen
una acción cuando los valores aumenten o disminuyan;
- ordene las posiciones atendiendo
al valor, al símbolo de transacción,
etc.
Le recomendamos que elija un
conjunto de características que esté pensando
implementar y que las ordene según la dificultad
y las ganas que tenga de implementarlas. Considere detenidamente
qué desecharía si las cosas se complicaran
más de lo que piensa.
Sobre todo tendrá que examinar cuestiones básicas
como las siguientes:
- cómo se identificarán
las carteras de valores (¿mediante los nombres
que los usuarios faciliten?);
- cuándo se actualizarán
las cotizaciones de las acciones (¿cada cierto
tiempo?, ¿por orden explícita?);
- cómo tratar casos excepcionales
tales como símbolos de
transacción que no se ajusten a las acciones,
o qué hacer cuando el sito web no responda;
- si pueden mostrarse varias carteras
al mismo tiempo;
- si están permitidas varias
vistas simultáneas de la misma cartera.
Estos temas deben tenerse en
cuenta al principio; si los aplaza, será mucho
más difícil tratarlos.
En el diseño de la API, también tendrá
que resolver algunas cuestiones básicas. Dos de
las más importantes son:
- si la API será pasiva,
en el sentido en que la aplicación simplemente
la utiliza como fuente de información, o si
será activa y, por ejemplo, tendrá funcionalidad
para hacer callbacks periodicos;
- qué tipos se presentarán
en la interfaz.
La especificación de su
API será una descripción completa de la
funcionalidad del programa y lo único que se
obviará será la cuestión de cómo
el programa y el usuario se comunican mediante la GUI.
Debe utilizar una interfaz Java para la API. Su
GUI debería resultar atrayente, fácil
de usar, y de construcción sencilla. Es posible
que quiera utilizar un poco el Swing para tener una
idea de cómo se hacen las cosas y qué
es posible hacer antes de proyectar este ejercicio.
Debería entregar las siguientes ítems:
(a) Visión general.
[Una página o menos] Una descripción escueta
y concreta sobre cuál es el propósito
de la aplicación; qué tipo de funcionalidad
presenta; cómo es su GUI y cómo se va
a utilizar. Considere esta sección como si fuese
un manual de usuario condensado: el tipo de resumen
de una aplicación que normalmente se encuentra
en los folletos de marketing.
(b) Un modelo de objeto del
problema. [Una página] Un modelo de objeto
que resuma el estado abstracto de la aplicación
desde el punto de vista del usuario. Los objetos aquí
pertenecerán al dominio del problema (como acciones
y cotizaciones), y no serán objetos concretos tomados
del código. Intente mantener esto lo más
abstracto posible, evitando detalles de implementación.
Para comprobar si su modelo está completo, pregúntese
a sí mismo si el estado de su sistema
contiene la información necesaria para producir
los comportamientos que tiene en mente. Exponga de manera
informal cualquier restricción que surja de las
propiedades del mismo problema y que no se pueda mostrar
gráficamente.
(c) Especificación de
la API. [Dos páginas o menos] Una visión
general de la API que especifique la interacción
general de alto nivel con su sistema. También,
una especificación detallada que describa cada
método con la forma estándar requires/ensures/modifies.
(d) Capturas de pantalla del
GUI. Un conjunto de capturas de su GUI que muestren
cómo está organizada y qué funciones
ofrece.
(e) Código. Su código
incluirá el código de la GUI, la interfaz
de Java para la API, una clase stub que implemente
la interfaz de la API y cualquier código de testeo
que haya escrito. Debería completar su código
hasta el punto en que pueda poner a prueba todas las
interacciones básicas entre la interfaz y el
usuario, mostrar resultados visibles convincentes y
ejercer la conexión entre el GUI y la API. Las
clases de su GUI no requieren una especificación
extensa, pero deberían estar cuidadosamente comentadas,
y cualquier método público poco conocido
debería especificarse detalladamente.
Erratas
Preguntas & Respuestas
Esta sección enumerará
las aclaraciones y respuestas a preguntas frecuentes.
Intentaremos mantenerla lo más actualizada posible,
por lo que le sugerimos que consulte este apartado en
primer lugar (después de haber repasado detenidamente
la hoja) ante cualquier duda que le surja.
Volver arriba
|