lunes, 21 de febrero de 2011

Camarero... una de patrones!!!

Como algunos sabéis, estoy haciendo un máster de informática.

Ha habido todo tipo de asignaturas de momento, pero en general me han gustado, aunque la de UML... buff me cuesta un huevo ponerme con los diseños.

Las otras han sido XML y servidores, JAVA con EJBs y Servicios Web, y Patrones de programación.

En una de las práticas, la de patrones de programación, tenía que hacer una aplicación que simulase un restaurante de 6 mesas, atendido por un camarero simpaticón que se llamaba "Johnny". Como digo, realizada usando patrones.

Al final, como hemos trabajado en equipo 3 colegas durante todo el máster en las diferentes asignaturas, y repito... las de uml no se me daban bien... a mi me ha tocado hacer esta práctica, casi por triplicado, pero con mucho gusto.

¡A ver, para que no nos lleve a confusión! Cada uno ha hecho sus prácticas, pero es mucho más fácil hacerlas si trabajas en equipo, orientas, ayudas, o tu haces una parte que otro no sabe, y otro hace una parte que tu no sabes, y luego así ya la puedes trabajar para que quien no la sabía, aprenda.

Así pues, como digo, la práctica de patrones me tocó a mi.

He usado los siguientes patrones

builder: nos sirve para construir el menú y cada uno de los objetos de la carta

state: controlará los estados de la mesa, que pueden ser libre, comiendo, esperando (la factura)

observer: se encargará de avisar al camarero, cuando una mesa cambie de estado

facade: me actuará de fachada para calcular el precio de la factura y ver de qué estaba compuesta

Como comento, la he hecho por triplicado.

Una era una aplicación swing normalita, con 6 mesas y botones para lanzar los cambios de estado.

Otra parecida, pero un poco más currada en cuestión de interface, con imágenes de los simpsons simulando el bar de mou.

Y en la última, que acabo de terminar, en vez de tener una aplicación hecha en swing, la he hecho básica, y que sacase los mensajes por el log.

¡Os enseño el resultado de esta última!


---------------------------------------------------------------------------------------

EL MENÚ DEL ELVIS PRESLEY'S BURGER ES:

Hamburguesas:
Suspicious Mind, Increíble hamburguesa de ¼ de libra, con cebolla a la plancha, bacón y queso : 5.5
My Way, Increíble hamburguesa de ¼ de libra con lechuga y tomate e ingredientes a escoger entre: relish (salsa de pepinillo dulce picado), cebolla, huevo, bacón y queso : 4.0

Patatas:
Classics: Las patatas clásicas de corte fino, por sólo 22.0€
Delux: Patatas de corte grueso con salsa especial, por sólo 3.0€

Postres:
New York Cheese: Cake: Tarta de queso, por sólo 4.95€
Manhattan Apple: Tarta de manzana, por sólo 4.5€

Bebidas:
Elvis-Cola: , por sólo 1.5€
Surrender: Zumo de frutas, por sólo 2.0€

ABRIMOS EL RESTAURANTE POR LA MAÑANA TEMPRANO PARA USTED:

Johnny: La mesa 1 cambia al estado libre

Johnny: A limpiar la mesa para esperar nuevos clientes

Johnny: La mesa 2 cambia al estado libre

Johnny: A limpiar la mesa para esperar nuevos clientes

Johnny: La mesa 3 cambia al estado libre

Johnny: A limpiar la mesa para esperar nuevos clientes

Johnny: La mesa 4 cambia al estado libre

Johnny: A limpiar la mesa para esperar nuevos clientes

Johnny: La mesa 5 cambia al estado libre

Johnny: A limpiar la mesa para esperar nuevos clientes

Johnny: La mesa 6 cambia al estado libre

Johnny: A limpiar la mesa para esperar nuevos clientes


LA MESA 1 ES OCUPADA POR UNA AGRADABLE PAJERA QUE QUIERE ALMORZAR:
PIDEN UNA Suspicious Mind
PIDEN UNA My Way con Cebolla, Bacon, Queso
PIDEN UNAS PATATAS Classics
PIDEN 2 BEBIDAS Elvis-Cola
PIDEN 1 POSTRE New York Cheese y otro Manhattan Apple

Johnny: La mesa 1 cambia al estado comiendo
Johnny: Cocinero!!!! una de....

- Suspicious Mind, Increíble hamburguesa de ¼ de libra, con cebolla a la plancha, bacón y queso : 5.5

- My Way, Increíble hamburguesa de ¼ de libra con lechuga y tomate e ingredientes a escoger entre: relish (salsa de pepinillo dulce picado), cebolla, huevo, bacón y queso : 4.0
** Cebolla
** Bacon
** Queso

- Classics: Las patatas clásicas de corte fino, por sólo 22.0€

- Elvis-Cola: , por sólo 1.5€

- Elvis-Cola: , por sólo 1.5€

- New York Cheese: Cake: Tarta de queso, por sólo 4.95€

- Manhattan Apple: Tarta de manzana, por sólo 4.5€



LOS CLIENTES HAN TERMINADO DE COMER Y ESTÁN ESPERANDO A LA FACTURA

Johnny: La mesa 1 cambia al estado esperando

Johnny: La factura de los señores es

La factura es:

Suspicious Mind - precio:5.5
My Way - precio:4.0
Classics - precio:22.0
Elvis-Cola - precio:1.5
Elvis-Cola - precio:1.5
New York Cheese: Cake - precio:4.95
Manhattan Apple - precio:4.5
*************
A pagar: 45.45€


LOS CLIENTES DE LA MESA 1 ESTÁN CONFORMES Y LA COMIDA LES HA GUSTADO, YA SE VAN, PERO VOLVERÁN

Johnny: La mesa 1 cambia al estado libre

Johnny: A limpiar la mesa para esperar nuevos clientes


---------------------------------------------------------------------------------------


Supongo que leyendo el log, habréis observado como se construyen los objetos (usando builder). Como la mesa va cambiando de estado (State), y como estos cambios de estado desencadenan que al pobre Johnny le toque currar. (observer)

Y como finalmente, para ver el pedido y calcular su precio, uso el facade.


Sí, es un post un poco chorra... y realmente no explico mucho de programación para aquellos que hayan llegado hasta aquí ávidos de instrucciones, pero me apetecía escribir algo de mi "vida estudiante-profesional".

Si alguien está interesado en alguna cosa más, como el diseño de clases, como he implementado algún patrón, o como he hecho lo que sea, no tiene más que dejar un comentario, y su petición será atendida! :)

¡Un saludo patronil!

5 comentarios:

  1. Buenas, buscando por internet patrones de diseño, he llegado hasta aquí! Te comento, tengo que hacer una práctica parecida a la que describes en este post, implementando varios patrones, pero no consigo obtener el diseño global de la aplicación, creo que hago demasiadas relaciones "inútiles" entre clases y por eso se me lía el diagrama de una forma exagerada. Si pudieras poner el diseño del diagrama de clases para a ver si así consigo ver cómo se pueden acoplar diferentes patrones en una misma aplicación, te lo agradecería enormemente!! Gracias!

    ResponderEliminar
    Respuestas
    1. Hola!
      ¡Hace casi un año de esto!
      Buscaré el diseño de clases, pero no te prometo nada, porque no se si lo tendré.
      De cualquier forma, te puedo ayudar con tu práctica si quieres.

      Eliminar
    2. Buenas!! yo también estaría enormemente agradecido si pudieres facilitarme la solución a este ejercicio, tengo que hacer uno muy similar, y tu solución me ayudaría muchísimo. Para mí, resolver este tipo de ejercicios es muy abstracto, hasta el punto de que llevo así varios días y no consigo sacar nada en concreto. Mi correo es sereluja88@hotmail.com por si pudieses enviarme por lo menos el diagrama de clases del ejercicio.
      Un saludo y muchas gracias de antemano.

      Eliminar
  2. Buenas tardes !!!

    Este correo que te escribo es por si tienes a tu disposición la práctica de patrones software para la aplicación del Elvis Presley's Burger. Estoy realizando un curso de patrones de software por Internet en el que me piden realice esta practica, y la verdad es que por más que repaso los apuntes de los patrones, no se me ocurre como puedo aplicarlo. Si no fuera abusar mucho de tu amabilidad, te agradecería me pudieras facilitar los esquemas UML, si dispones de ellos.

    un saludo, muchas gracias.

    mi email es: jmanuelsuape@gmail.com

    ResponderEliminar
  3. Hola Chabier?, Hay alguien por aquí??? Es posible conseguir algo de ejemplo de la implementación de los patrones en esta aplicación?
    Muchas gracias...

    ResponderEliminar