# Java: POO y SOLID con un checkout que permite cambiar políticas

Separa reglas, contratos y persistencia. Sustituye un descuento sin modificar el caso de uso y comprueba el contrato con Java 17.

JDK 17 o superior. Descarga Main.java y ejecuta el comando en esa carpeta.

```sh
java Main.java
```

Salida esperada / Expected output:

```text
OK: policies replaced; invalid order not saved
```

## Ejercicio

Sustituye InMemoryOrders por un adaptador que registre las llamadas. Añade una prueba de contrato para una política que devuelve un total mayor al original.

## English

Java: OOP and SOLID with replaceable checkout policies

Separate business rules, contracts and persistence. Replace a discount without changing the use case and verify the contract with Java 17.

JDK 17 or newer. Download Main.java and run the command from its directory.

Replace InMemoryOrders with an adapter that records calls. Add a contract test for a policy returning more than the original total.

## Scope / Alcance

Educational local example with assertions. No production readiness or performance claim. / Ejemplo local educativo con aserciones; no se afirma preparación para producción ni rendimiento.

## Sources

- https://dev.java/learn/interfaces/
