Teste Final do Banco
Parte da seção Object Oriented Programming do Journey de Lua da Coddy — lição 25 de 70.
Desafio
FácilParabéns por construir um sistema de Banco Digital completo! Sua classe Account agora lida com depósitos, saques, verificações de saldo, identificação de conta e transferências entre contas. Vamos colocar tudo à prova com um cenário bancário realista de múltiplas contas.
Neste desafio final, você simulará um pequeno banco com três clientes realizando várias transações. Isso verificará se todos os seus métodos funcionam corretamente juntos e se as contas realmente mantêm estados independentes.
Seus dois arquivos:
Account.lua: Sua classe Account completa com toda a funcionalidade que você construiu ao longo deste projeto (construtor com ID, deposit, withdraw, getBalance, __tostring e transfer).main.lua: Um script de simulação que cria múltiplas contas e executa uma série de transações entre elas.
Você receberá seis entradas:
- ID da Conta 1
- ID da Conta 2
- ID da Conta 3
- Depósito inicial para a Conta 1
- Depósito inicial para a Conta 2
- Depósito inicial para a Conta 3
No seu arquivo principal, simule o seguinte dia bancário:
- Crie três contas com os IDs fornecidos
- Deposite os valores iniciais em cada conta respectiva
- A Conta 1 transfere 100 para a Conta 2
- A Conta 2 transfere 150 para a Conta 3
- A Conta 3 transfere 50 para a Conta 1
- A Conta 1 tenta transferir 1000 para a Conta 3 (isso deve falhar)
- Imprima todas as três contas em ordem (Conta 1, depois 2, depois 3)
Por exemplo, se as entradas forem A001, A002, A003, 500, 300 e 200, a saída deve ser:
Insufficient funds
Account [A001]: Balance = 450
Account [A002]: Balance = 250
Account [A003]: Balance = 300Vamos rastrear: A Conta 1 começa com 500, transfere 100 para a Conta 2 (agora 400), depois recebe 50 da Conta 3 (agora 450). A Conta 2 começa com 300, recebe 100 (agora 400), transfere 150 para a Conta 3 (agora 250). A Conta 3 começa com 200, recebe 150 (agora 350), transfere 50 para a Conta 1 (agora 300). A transferência final de 1000 falha porque a Conta 1 tem apenas 450.
Experimente você mesmo
-- Requer o módulo Account
local Account = require('Account')
-- Lê as seis entradas
local id1 = io.read()
local id2 = io.read()
local id3 = io.read()
local initialDeposit1 = tonumber(io.read())
local initialDeposit2 = tonumber(io.read())
local initialDeposit3 = tonumber(io.read())
-- Cria três contas com IDs
-- TODO: criar account1, account2, account3 usando Account:new()
-- Deposita os valores iniciais em cada conta respectiva
-- TODO: depositar initialDeposit1 na account1, initialDeposit2 na account2, initialDeposit3 na account3
-- Account 1 transfere 100 para Account 2
-- TODO: account1:transfer(account2, 100)
-- Account 2 transfere 150 para Account 3
-- TODO: account2:transfer(account3, 150)
-- Account 3 transfere 50 para Account 1
-- TODO: account3:transfer(account1, 50)
-- Account 1 tenta transferir 1000 para Account 3 (isso deve falhar)
-- TODO: account1:transfer(account3, 1000)
-- Imprime todas as três contas em ordem
-- TODO: imprimir account1, account2, account3
Todas as lições de Object Oriented Programming
1O Conceito 'Self'
Tabelas com Funções'self' ExplícitoA Sintaxe de Dois-pontosPonto vs Dois-pontosRecapitulação - Movendo o Ponto4Projeto: Banco Digital
Configuração do ProjetoMétodo de Depósito7Polimorfismo e Sobrescrita
Sobrescrita de MétodosChamando Métodos da Classe PaiDuck TypingInterface ComumVerificando o TipoRecapitulação - Papéis de Funcionários10Projeto: Gerenciador de Formas
Configuração do ProjetoClasse Retângulo2Padrão de Protótipo de Classe
O Conceito de ProtótipoVinculando com __indexO Construtor :new()Inicializando AtributosInstâncias IndependentesRecapitulação - Fábrica de Carros5Sobrecarga de Operadores em POO
Somando ObjetosSubtraindo ObjetosConcatenando ObjetosComparando Objetos (<, >)Recapitulação - Matemática de Carteira8Encapsulamento
Convenções de NomenclaturaClosures para PrivacidadeAcesso via ClosuresTabelas Somente LeituraLógica de ValidaçãoRecapitulação - Cofre Seguro11Padrões de Projeto (Lite)
Funções FactoryTabela SingletonPadrão IteratorObserver (Listener)Recapitulação - Logger Factory3Estado e Comportamento do Objeto
Variáveis de InstânciaMétodos GetterMétodos SetterPropriedades CalculadasFormatação de StringsVerificações de IgualdadeRecapitulação - Nota do Aluno6Fundamentos de Herança
Configurando a HerançaHerdando MétodosEstendendo o ConstrutorAdicionando Métodos FilhosCompartilhado vs ÚnicoRecapitulação - Hierarquia de Formas