Tracks
/
Scala
Scala
/
Ejercicios
/
Cuenta bancaria
Cuenta bancaria

Cuenta bancaria

Intermedia

Introducción

Después de años de llenar formularios y esperar, por fin conseguiste tu licencia bancaria. Esto significa que ahora ya puedes abrir oficialmente tu propio banco, ¡hurra!

Tu primera prioridad es poner en marcha los sistemas informáticos. Después de un día de duro trabajo, ya puedes abrir y cerrar cuentas, además de manejar retiros y depósitos.

Como no tenías ganas de escribir pruebas, invitas a unos amigos para que te ayuden a probar el sistema. Sin embargo, apenas cinco minutos después, ¡uno de tus amigos dice que perdió dinero! Aunque confías en que tu código no tiene errores, empiezas a revisar los registros para investigar.

Ah, claro, tal como sospechabas, ¡la culpa es de tu amigo! Compartió sus credenciales de prueba con otro amigo y juntos conspiraron para hacer depósitos y retiros de la misma cuenta en paralelo. ¿A quién se le ocurriría hacer algo así?

Mientras argumentas que es físicamente imposible que alguien acceda a su cuenta en paralelo, tu amigo te informa con aire de superioridad que las reglas bancarias exigen que lo soportes. Así que, si no hay soporte para banca en paralelo, no hay luz verde para el lanzamiento. Suspiras y te haces una nota mental para trabajar en esto mañana. Esto retrasará tu fecha de lanzamiento al menos un día más, pero bueno...

Instrucciones

Tu tarea es implementar cuentas bancarias que permitan abrir y cerrar cuentas, hacer retiros y depositar dinero.

Como se puede acceder a las cuentas bancarias de muchas maneras distintas (internet, teléfonos móviles, cargos automáticos), tu software bancario debe permitir que se acceda a las cuentas de forma segura desde varios hilos o procesos en paralelo (la terminología depende de tu lenguaje de programación). Por ejemplo, puede haber muchos depósitos y retiros ocurriendo en paralelo; debes asegurarte de que no haya condiciones de carrera entre el momento en que lees el saldo de la cuenta y el momento en que estableces el nuevo saldo.

Debe ser posible cerrar una cuenta; las operaciones sobre una cuenta cerrada deben fallar.

Este ejercicio pone a prueba el estado mutable al que se puede acceder de forma segura desde varios hilos. Scala ofrece varias formas de proteger el estado mutable. Para quienes ya están familiarizados con la concurrencia en Java, Scala puede aprovechar el soporte de concurrencia de Java, como el bloque synchronized de Java.

Trampas comunes

En Scala hay dos formas de lograr estado mutable: usar una «var» o un objeto mutable. Dos errores comunes aquí son:

  • No uses una «var» que además sea un objeto mutable. Con uno basta, pero no con los dos a la vez.
  • No expongas la «var» ni el objeto mutable al mundo exterior. Así que hazlos «private» y convierte el objeto mutable en inmutable antes de devolverlo como valor.
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Scala Exercism

¿Todo listo para empezar Cuenta bancaria?

Regístrate en Exercism para aprender y dominar Scala con 95 ejercicios y mentoría humana real, todo gratis.