Вы находитесь на странице: 1из 5

Tcnicas Avanzadas de Programacin Solucin Mquina de Caf

Mquina de caf
Diagrama de clases
interface
MaquinaCafe
+preparar(in codigoBebida : int, in cantidadAzucar : int)
+hayStock(in codigoMaterial : int, in cantidad : decimal)
+mostrarEnDisplay(in mensaje : string)
+addListener(in listener : MaquinaCafeListener)

MaquinaCafeListener

Pedido
-cantidadAzucar : int
-fichaPuesta : bool
-azucarSeleccionada : bool
+isPreparado() : bool
+puedeRecibirFicha() : bool
+setBebidaSeleccionada()

-servicioElegido

-mapaBotonOperaciones
-mapaEstados
+apretaronBoton(in : int)
+insertarFicha()
+setEstado(in : int)
+isPedidoPreparado() : bool
+agregarAzucar()
1
*
Operacion
+ejecutar()

1
Bebida

ExtraAzucar

Amargo

-nombre : string

Estado

+puedeRecibirFicha() : bool
+apretaronBoton(in boton : int)

*
Ingrediente
-cantidad : decimal
-opcional : bool
+hayStock()

interface
ILog
+loguear()
FueraServicio

ListaParaOperar

PreparandoPedido

*
1

ArchivoLog
EnCalentamiento

Material
-nombre
-unidadMedida
-codigoHW
+hayStock()

Tcnicas Avanzadas de Programacin Solucin Mquina de Caf

Responsabilidades
MaquinaCafeListener <<Singleton>>: lleva el control del crdito, la cantidad de azcar y la
bebida seleccionada. Escucha los cambios de estado de la mquina y sabe relacionarlos con
los distintos objetos que representan cada uno de los estados de la mquina.
MaquinaCafe(HW): encapsula o decora la interfaz del hardware. Lleva el stock de los
materiales que componen las bebidas (puede incluirse en stos el vaso), prepara finalmente
una bebida y a travs del contrato mostrarEnDisplay permite mostrar un error por la consola de
la mquina.
Pedido: es un objeto opcional que permite encapsular el pedido actual. Sabe si est completo
para ser preparado por la mquina de caf (esto es: ficha insertada y bebida seleccionada).
Tambin registra la primera dosificacin de azcar.
Operacin: es la clase abstracta que representa las diferentes operaciones que puede hacer
una mquina de caf. El Command se subclasifica para el pedido de bebidas, o bien para la
seleccin de extra-azcar o amargo. Una variante podra ser tener una sola subclase para el
manejo de azcar y trabajarlo con algn atributo en la inicializacin.
Estado: representa los distintos estados por los que pasa la mquina, en cuyo caso responde
en forma diferente a la posibilidad de recibir fichas o apretar un botn.
Bebida: representa una bebida seleccionable por la mquina de caf. No se generan varias
instancias sino que el caf con leche es una instancia de Bebida cuyo atributo nombre tiene el
valor caf con leche. Conoce sus ingredientes de preparacin.
Ingrediente: representa una cantidad de un determinado material para la preparacin de una
bebida. Sabe responder si hay stock en la mquina para formar parte de una bebida.
Material: representa un material. Conoce el cdigo de la mquina y sabe responder si existe
una determinada cantidad de s en la mquina.

Tcnicas Avanzadas de Programacin Solucin Mquina de Caf

Diagramas de secuencia
Caso 1: La mquina est en estado En Calentamiento y el cliente inserta una ficha. La
mquina debe mostrar un error en el display. Luego la mquina le avisa que est lista para
operar.

Nota: MaquinaImpl (HW) es la clase que implementa la interfaz MaquinaCafe (HW).

Tcnicas Avanzadas de Programacin Solucin Mquina de Caf

Caso 2: Con la mquina en estado Lista Para Operar, el cliente inserta una ficha, selecciona
Extra Azcar y pide Caf con Leche. La mquina debe devolvrselo, previa verificacin de
stock de los ingredientes.

Tcnicas Avanzadas de Programacin Solucin Mquina de Caf

Lo ltimo que resta es definir en qu momento se inicializa nuevamente el pedido actual que
contiene la MaquinaCafeListener (representado por un objeto Pedido). Opciones posibles:
Cuando se enva el mensaje preparar(int
codigoBebida,
int
cantidadAzucar) al hardware, la MaquinaCafeListener guarda el pedido mandado a
preparar en una coleccin histrica y genera una nueva instancia inicializada de Pedido
con el flag azucarSeleccionada = falso, bebidaSeleccionada = null y fichaInsertada =
cero.
Otra posibilidad es marcar cuando la mquina pasa el estado Preparando pedido.
Ante un nuevo cambio de estado de la mquina, registrar el pedido en la coleccin
histrica y generar un nuevo objeto Pedido convenientemente inicializado.

Diagrama de objetos de ejemplo

: Maquina
(HW)

: Extra
Azucar

listeners

: MaqCafe
Listener
hw
mapaOperac
mapaEstados
estado

CafeCorto :
Bebida

nombre
ingredientes

caf corto

: Ingrediente

: ListaPara
Operar

material

: Material
caf

nombre

Вам также может понравиться