6.-Fase de Elaboración: ejercicios de patrones
 
   

 

Esta página contiene una serie de ejercicios y ejemplos. Los ejercicios son para ponerse a trabajar inmediatamente aplicando los patrones descritos en clase. Los ejemplos pretenden dar diferentes puntos de vista sobre los patrones, pero también han sido buscados para que el alumno intente aplicar sus conocimientos antes de ver la solución propuesta en los artículos.

 

Ejercicio 1

(tomado parcialmente de Fernando Bellas)

Importante: esta descripción está tomada de un proyecto a realizar durante un año. NO OS DEJEIS ABRUMAR POR LOS DETALLES. Teneis que seguir un esquema de trabajo que parta de la generalidad para después llegar al detalle. Realizad primero un diseño de alto nivel con una arquitectura clara y bien definida, y con paquetes y clases que luego puedan ser refinados. No se trata de diseñar esta aplicación totalmente, sino de encontrar los patrones más útiles en cada caso.

Diseño de una tienda de comercio electrónico. En caso de que nunca se haya usado una, se aconseja navegar por Amazon (amazon.com) para familiarizarse con los conceptos básicos.
La práctica deberá diseñarse con el enfoque explicado en clase (arquitectura en n capas, con patrones de diseño en cada capa).

(Solución parcial en versión para Rose) (Solución parcial en .doc)

La tienda de comercio electrónico permite que los usuarios puedan comprar productos. En un principio, se desea usar la tienda para la venta de libros y CDs de música, pero a corto plazo se usará para vender otro tipo de productos, por lo que el software a desarrollar deberá ser lo más independiente posible de los tipos de productos. La información de cada producto incluirá: nombre, breve descripción, fecha y precio. Además, tanto los libros como los CDs de música tienen información específica. Así, por cada libro también se guardarán los nombres de los autores, el nombre de la editorial, el ISBN y el número de páginas. Por cada CD de música, se guardará el nombre del grupo musical y el nombre de la compañía. Además existirá un inventario, que registra el número de unidades disponibles de cada producto.

Todos los productos están clasificados en categorías. Una categoría puede contener subcategorías, y cada categoría tiene asociada una única categoría padre, excepto la categoría raíz. Un producto sólo pertenece a única categoría hija. Por ejemplo, se podría considerar una categoría padre, Productos, con categorías hijas Libros y CDs de Música. La categoría Libros podría tener las subcategorías: Arte, Literatura, Historia, Viajes, Informática, etc. La categoría de Informática a su vez podría estar estructurada en las subcategorías: Redes, Desarrollo de software, etc.

Cada usuario puede registrarse en la tienda dando su información de registro, que incluirá: nombre de login, contraseña, nombre, apellidos, dirección de correo electrónico, dirección y datos de la tarjeta de crédito (nombre, número y fecha de expiración). Cada usuario puede buscar productos y añadirlos a su carrito de la compra, para finalmente comprar todos los productos que hay en su carrito. El carrito de la compra será persistente, es decir, un usuario puede añadir productos a su carrito hoy, abandonar la sesión, volver mañana y continuar actualizando su carrito.

Cuando el usuario decida comprar todos los productos de su carrito, se generará un pedido, que se compondrá de varias líneas de pedido. Un usuario puede tener varios pedidos en marcha. Por cada pedido se guardará: la fecha en la que se hizo, dirección de envío (nombre, apellidos, dirección de calle, ciudad, estado, país, código postal, medio de transporte), datos de la tarjeta de crédito (nombre, número y fecha de expiración) y su estado (servido o no servido). La dirección de envío y los datos de la tarjeta de crédito
pueden ser distintos a los que aparecen en la información de registro. Por cada línea de pedido se guardará el número de unidades pedidas del producto y el precio unitario.

La tienda puede entregar los productos por distintos medios de transporte (ej.: correo normal, correo urgente por avión, etc.), cobrando de manera distinta por cada pedido. El precio de un pedido será la suma del coste de sus productos más el del medio de transporte elegido. La tienda cobrará en una única moneda (ej.: Euro).

A continuación se detalla la funcionalidad que la tienda deberá ofrecer al usuario:
1. Registro de usuarios.

2. Autenticación y salida.

3. Búsquedas de productos. Cualquier usuario podrá hacer varios tipos de búsquedas: (1) por palabras clave del título y (2) por recorridos de categorías.

4. Visualización de los datos de un producto.

5. Gestión del carrito de la compra.

6. Visualización de pedidos.

 

Ejercicio 2

Disponeis de unos cuantos casos de ejemplo en http://www.cs.wustl.edu/~schmidt/PDF/pattern-examples4.pdf , en la página de Douglas C. Schmidt, uno de los gurús de toda la vida. No son ejemplos sencillos, pero están más o menos explicados.

 

Ejercicio 3

Caso: construcción de un WYSIWYG: http://www.info.ucl.ac.be/notes_de_cours/Ingi2595/DesignPatterns_Case1.htm

 

Ejercicio 4

Web application components made easy with Composite View : http://www.javaworld.com/javaworld/jw-12-2001/jw-1228-jsptemplate.html

Ejercicio 5

Take control with the Proxy design pattern: http://www.javaworld.com/javaworld/jw-02-2002/jw-0222-designpatterns.html

Ejercicio 6

An inside view of Observer: http://www.javaworld.com/javaworld/jw-03-2003/jw-0328-designpatterns.html

Ejercicio 7

A look at the Composite design pattern: http://www.javaworld.com/javaworld/jw-09-2002/jw-0913-designpatterns.html

Ejercicio 8

Take command of your software : http://www.javaworld.com/javaworld/jw-06-2002/jw-0628-designpatterns.html

 

Ejercicio 9: aplicación de control aéreo


Tenemos un conjunto de espacios aéreos cada uno de los cuáles tiene asignado un controlador aéreo. Los espacios aéreos no solapan entre sí. Por ellos vuelan diferentes tipos de aeronaves, pero los controladores son los que determinan si una aeronave puede pasar a su espacio aéreo.Un controlador puede estar inactivo -de vacaciones-, activo -de guardia-, o asignado a un e.a. concreto.

El controlador ha de saber en todo momento la posición exacta de cada aeronave, y ha de saber qué aeronaves se acercan a su E.A. de otros EEAA adyacentes.


Ejercicio 10: Aplicación de integración de datos


- Disponemos de un conjunto de repositorios -bases de datos relacionales, ficheros XML, excel, etc.-, y deseamos acceder a sus datos sin que tengamos que preocuparnos de qué tipo de repositorio es. Para ello, utilizaremos un sistema mediador que permita al usuario hacer consultas SQL, por lo que el mediador debe ser capaz de transformar esa consulta en subconsultas, cada una de las cuáles vaya a un repositorio remoto. Cuidado: no se trata sencillamente de acceder a la base de datos, sino que tenemos que ser capaz de acceder a cada tabla de la base de datos. Por otra parte, aunque el repositorio no sea relacional -p.e. XML-, la consulta sigue siendo SQL, luego hace falta otra transformación adicional.


Ejercicio 11: Directorio web (como Yahoo!)


- Almacena información sobre URLs, y permite su búsqueda a través de palabras clave que introduce el dueño de la URL.
- La aplicación pretende ser multicanal.
- El esquema de búsqueda ha de ser variado (posibilidad de operadores AND, OR, NEAR y literales)
- El sistema almacena esas URLs en categorías creadas no en forma de árbol sino en forma de grafo, de manera que una URL puede ser accedida desde diferentes paths.


Ejercicio 12: Gestor de contenidos


- Aplicación que permite generar automáticamente contenido HTML a partir de información estructurada en directorios, de manera que a partir de un directorio concreto, el sistema genere páginas HTML que permitan navegar por ese directorio, y enlaces a cada uno de los recursos existentes -ficheros DOC, XLS, etc.-.