Cajero automático

Iteración 1

Reglas del negocio

El objetivo es construir un cajero automático y nuestra primera tarea es crear el software que desglosará qué billetes y monedas debe recibir el cliente cuando intente hacer un retiro.

El contenido del cajero es:

| Valor | Tipo    |
|-------|---------|
| 500 | billete |
| 200 | billete |
| 100 | billete |
| 50 | billete |
| 20 | billete |
| 10 | billete |
| 5 | billete |
| 2 | modena |
| 1 | moneda |

Ejemplo

Entrada:

Como usuario
Quiero retirar 1725€

Salida:

2 billetes de 200
1 billete de 20
1 billete de 10
2 monedas de 2

API posible para el cajero automático

Obsesión primitiva y pareja ajustada a la presentación

public interface ATM {
public String withdraw(int quantity);

}

Devuelve una lista de DTO u Objetos de Valor
public interface ATM {
public List<Money> withdraw(int quantity);
}

Outside-in

public interface ATM {
public void withdraw(int quantity);
}

Iteración 2

Reglas del negocio

El cajero automático tiene la siguiente distribución de dinero.

  • Cuando el cajero automático no disponga de dinero, debe devolver un error que indique: "El cajero automático no dispone de dinero suficiente, por favor acuda al cajero automático más cercano".
  • Si el cajero automático no tiene más billetes o monedas debe intentar utilizar otras cantidades para que el usuario pueda retirar el importe.

 

El estado inicial de cualquier cajero automático

| Valor | Tipo    | Número de unidades|
|-------|---------|-------------------|
| 500 | billete | 2 |
| 200 | billete | 3 |
| 100 | billete | 5 |
| 50 | billete | 12 |
| 20 | billete | 20 |
| 10 | billete | 50 |
| 5 | billete | 100 |
| 2 | moneda | 250 |
| 1 | moneda | 500 |

Ejemplos:

 

Estado inicial del cajero automático:

 
| Valor | Tipo    | Número de unidades|
|-------|---------|-------------------|
| 500 | billete | 2 |
| 200 | billete | 3 |
| 100 | billete | 5 |
| 50 | billete | 12 |
| 20 | billete | 20 |
| 10 | billete | 50 |
| 5 | billete | 100 |
| 2 | moneda | 250 |
| 1 | moneda | 500 |

Entrada

Como usuario
Quiero retirar 1725€

Salida

2 billetes de 500
3 billetes de 200
1 billetes de 100
1 billetes de 20
1 billete de 5

 

Estado del cajero automático después de la salida

| Valor | Tipo    | Número de unidades  |
|-------|---------|---------------------|
| 500 | billete | 0 |
| 200 | billete | 0 |
| 100 | billete | 4 |
| 50 | billete | 12 |
| 20 | billete | 19 |
| 10 | billete | 50 |
| 5 | billete | 99 |
| 2 | moneda | 250 |
| 1 | moneda | 500 |

 

Entrada

Como usuario
He retirado 1825€

Salida

4 billetes de 100
12 billetes de 50
19 billetes de 20
44 billetes de 10
1 billetes de 5

 

Estado del cajero automático después de la salida

| Valor | Tipo    | Número de unidades|
|-------|---------|-------------------|
| 500 | billete | 0 |
| 200 | billete | 0 |
| 100 | billete | 0 |
| 50 | billete | 0 |
| 20 | billete | 0 |
| 10 | billete | 6 |
| 5 | billete | 98 |
| 2 | moneda | 250 |
| 1 | moneda | 500 |

 

Aviso

Los ejemplos gráficos que ves son una referencia de cómo funciona la kata, no tienes que aplicarlos si no quieres.