Percursos
/
Ruby
Ruby
/
Exercícios
/
Conta bancária
Conta bancária

Conta bancária

Fácil

Introdução

Depois de anos a preencher formulários e à espera, conseguiste finalmente a tua licença bancária. Isto significa que tens agora oficialmente o direito de abrir o teu próprio banco, viva!

A tua primeira prioridade é pôr os sistemas informáticos a funcionar. Depois de um dia de trabalho árduo, já consegues abrir e fechar contas, e ainda tratar de levantamentos e depósitos.

Como não te apetecia escrever testes, convidas uns amigos para ajudar a testar o sistema. No entanto, ao fim de apenas cinco minutos, um dos teus amigos afirma ter perdido dinheiro! Embora tenhas a certeza de que o teu code está livre de bugs, começas a percorrer os registos para investigar.

Ah, pois, exatamente como suspeitavas, a culpa é do teu amigo! Partilhou as credenciais de teste com outro amigo e, juntos, conspiraram para fazer depósitos e levantamentos na mesma conta em paralelo. Quem faria uma coisa dessas?

Enquanto argumentas que é fisicamente impossível que alguém aceda à sua conta em paralelo, o teu amigo avisa-te, com um ar presunçoso, de que as regras bancárias exigem que dês apoio a isso. Ou seja: sem suporte para operações bancárias em paralelo, não há sinal de lançamento. Suspiras e fazes uma nota mental para tratar disto amanhã. Isto vai adiar a tua data de lançamento em pelo menos mais um dia, mas enfim...

Instruções

A tua tarefa é implementar contas bancárias que suportem a abertura e o fecho, levantamentos e depósitos de dinheiro.

Como as contas bancárias podem ser acedidas de muitas formas diferentes (internet, telemóveis, cobranças automáticas), o teu software bancário tem de permitir que se aceda às contas em segurança a partir de múltiplas threads/processos (a terminologia depende da tua linguagem de programação) em paralelo. Por exemplo, pode haver muitos depósitos e levantamentos a acontecer em paralelo; tens de garantir que não existem condições de corrida entre o momento em que lês o saldo da conta e o momento em que defines o novo saldo.

Deve ser possível fechar uma conta; as operações sobre uma conta fechada têm de falhar.

Editar via GitHub A ligação abre numa nova janela ou separador
Ruby Exercism

Estás pronto para começar Conta bancária?

Inscreve-te no Exercism para aprenderes e dominares Ruby com 21 conceitos121 exercícios, e mentoria humana real, tudo grátis.