Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
A etapa de refatoração consiste em realizar mudanças estruturais no código, sem alterar seu funcionamento ou inserir novos bugs. A semântica deve permanecer consistente. Com isso em mente, foram propostas as seguintes melhorias do código:
Em relação à estrutura do sistema:
Divisão dos arquivos em dois diretórios:
include/
esrc/
. Eles guardam, respectivamente, os arquivos de especificação (.hpp) e de implementação (.cpp)Criação do diretório
build/
para guardar os arquivos .o criados na compilaçãoAdição de um
Makefile
para acomodar essa nova estrutura. Possui três comandos: all, run e clean.Em relação à escrita do código:
A indentação do código foi padronizada em todos os arquivos
As classes tiveram seus nomes alterados para o formato PascalCase
Os atributos das classes tiveram seus nomes alterados para o formato _snake_case
As variáveis que não são atributos de classes tiveram seus nomes alterados para snake_case. Por exemplo, em
main.cpp
, a variávelmeuBanco
passou a sermeu_banco
Os métodos das classes tiveram seus nomes alterados para o formato lowerCamelCase
Remoção de
#include
desnecessários. Agora, são incluídas explicitamente somente bibliotecas usadas explicitamenteRemoção de
using namespace std;
Utilização da palavra-chave
this
Não foram adicionados comentários, pois o código já pode ser entendido por si só. Por exemplo, as condicionais ao longo do código foram modificadas para deixar clara sua leitura
Classe Banco:
O vetor que guarda as contas bancárias agora é um atributo privado
A classe banco passou a ser responsável por criar novas contas, que podem ser do tipo poupança ou corrente. Após a criação da nova conta, é acionado o método
adicionarConta()
, que agora é privadoA função
exibirTodasContas()
agora chama a funçãoexibirInfo()
da classe ContaBancaria. Essa divisão de tarefas deixa o código mais claroCriação de um destrutor, tendo em vista que as contas armazenadas no vetor dessa classe foram armazenadas no heap -- portanto, devem ser devidamente gerenciadas pelo programador
Classe ContaBancaria:
A string que guarda o titular da conta agora é um atributo privado
O saldo da conta agora é um atributo protected. Ele poderá ser acessado diretamente pelas subclasses de ContaBancária
Criação de um construtor para a classe
Criação de um destrutor virtual puro, garantindo o gerenciamento adequado de memória e a indicação da classe como abstrata
Adição dos métodos protected
checarValorValido()
echecarSaldoSuficiente()
, usados por essa classe e por suas subclasses, de modo a facilitar a leitura de condicionaisAlteração das condicionais dos métodos
depositar()
esacar()
para facilitar sua leitura, tendo em vista os métodos citados acimaCriação do método
exibirInfo()
Observação: Uma vez que os atributos de ContaBancaria e suas subclasses não precisam ser acessados ou modificados por outras classes, não foram adicionados métodos "get" ou "set".
Classe ContaCorrente:
O double que guarda o limite do cheque especial agora é um atributo privado
Criação de um construtor para a classe
Adição do método privado
checarLimiteSuficiente()
para facilitar a leitura da condicional deusarChequeEspecial()
Classe ContaPoupança:
O double que guarda a taxa de juros agora é um atributo privado
Criação da constante privada de classe
_PROPORCAO_PERCENTUAL_DECIMAL
. Na versão original, 100 era um “número mágico”Divisão do método
calcularJuros()
emcalcularJuros()
ecalcularValorJuros()
, para simplificar a leitura do código. O segundo desses métodos é privado, servindo somente para calcular o valor dos juros a ser adicionado no saldo, processo que ocorre no primeiro métodoArquivo main: