Recapitulando: Gerenciador de Conta Bancária
Parte da seção Programação orientada a objetos do Journey de GDScript da Coddy. Lição 14 de 65.
Desafio
MédioEscreva a classe BankAccount em bank_account.gd. Ela reúne tudo o que foi apresentado neste capítulo.
- Uma variável
intestáticainterest_percentque começa em2e é compartilhada por todas as contas - duas propriedades privadas:
_owner_name(umaString) e_balance(umintque começa em0) - Uma propriedade somente leitura
owner_namecujo getter retorna_owner_name - Uma propriedade
balancecujo getter retorna_balancee cujo setter exibeBalance cannot be negativepara um valor negativo e, caso contrário, armazena o valor em_balance - O construtor
_init(account_owner, start_balance)armazena o titular e atribuistart_balanceabalance, para que o setter faça a verificação
E estes métodos:
deposit(amount): exibeDeposit amount must be positivee retornafalsequandoamounté0ou menor; caso contrário, adiciona o valor e retornatruewithdraw(amount): exibeWithdrawal amount must be positivee retornafalsequandoamounté0ou menor; exibeInsufficient fundse retornafalsequando ele é maior que o saldo; caso contrário, subtrai o valor e retornatrueapply_interest(): adiciona_balance * interest_percent / 100(em dólares inteiros) ao saldo e retorna esse valor de jurosdisplay_info(): exibe três linhas:Account Owner: NAME,Balance: $BALANCEeInterest Rate: PERCENT%
O código fornecido lê owner start_balance, a quantidade de comandos seguintes e os comandos deposit N, withdraw N, set N (atribui a balance), interest, rate N (define BankAccount.interest_percent) e info. Ele exibe uma linha para cada depósito, saque e pagamento de juros bem-sucedido, além do saldo do titular no final. Para Coddy 1000 e os comandos deposit 500, withdraw 200, interest, info, set 5000 e withdraw 10000, ele exibe:
Deposited $500
Withdrew $200
Interest earned: $26
Account Owner: Coddy
Balance: $1326
Interest Rate: 2%
Insufficient funds
Coddy has $5000Seu código deve ficar em bank_account.gd. main.gd contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
extends Node
func _ready():
# Código de entrada/saída fornecido: mantenha-o como está
var first := OS.read_string_from_stdin().split(" ")
var account := BankAccount.new(first[0], int(first[1]))
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
match parts[0]:
"deposit":
if account.deposit(int(parts[1])):
print("Deposited $%s" % parts[1])
"withdraw":
if account.withdraw(int(parts[1])):
print("Withdrew $%s" % parts[1])
"set":
account.balance = int(parts[1])
"interest":
print("Interest earned: $%d" % account.apply_interest())
"rate":
BankAccount.interest_percent = int(parts[1])
"info":
account.display_info()
print("%s has $%d" % [account.owner_name, account.balance])
Todas as lições de Programação orientada a objetos
1Fundamentos da POO
Arquivos externosIntrodução à POOClasses vs. objetosA palavra-chave selfMétodosPropriedadesConstrutor (_init)Revisão - Calculadora simples4Polimorfismo
Revisitando a Sobrescrita de MétodosDuck TypingClasses e Métodos AbstratosDesign de InterfacesRevisão - Calculadora de Formas7Sinais
O que é um sinal?Declarando e emitindoConectando-se a sinaisSinais com argumentosRevisão - Sistema de saúde10Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão Composite2Propriedades de Classe
Variáveis de Instância vs. EstáticasFunções EstáticasMétodos Setters de PropriedadeMétodos Getters de PropriedadePrivado por ConvençãoRecapitulando: Gerenciador de Conta Bancária5Encapsulamento
Membros públicos e privadosValidação com settersOcultação de informaçõesPropriedades somente para leituraRevisão - Sistema de registros de alunos8Conceitos Avançados de POO
Composição vs. HerançaClasses InternasNós como ComponentesRefCounted vs. NodeEnums em Classes3Herança
Herança básicaA palavra-chave superSobrescrita de métodosCadeias de herançaVerificações de tipo com isRevisão - Hierarquia de funcionários6Métodos especiais
Introdução aos métodos virtuaisO método _to_stringIteradores personalizadosRevisão - Lista personalizada9Padrões de Projeto Parte 1
Introdução aos Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão ObserverPadrão StrategyPratique por conta própria: Compilador de GDScript online