Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

6d42a9d0df1a8f28ec9f47b45ed8f283 #32

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open

Conversation

matp30
Copy link

@matp30 matp30 commented Nov 21, 2023

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/ e src/. 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ção

  • Adiçã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ável meuBanco passou a ser meu_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 explicitamente

  • Remoçã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 é privado

  • A função exibirTodasContas() agora chama a função exibirInfo() da classe ContaBancaria. Essa divisão de tarefas deixa o código mais claro

  • Criaçã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() e checarSaldoSuficiente(), usados por essa classe e por suas subclasses, de modo a facilitar a leitura de condicionais

  • Alteração das condicionais dos métodos depositar() e sacar() para facilitar sua leitura, tendo em vista os métodos citados acima

  • Criaçã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 de usarChequeEspecial()


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() em calcularJuros() e calcularValorJuros(), 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étodo


Arquivo main:

  • Alteração na declaração das variáveis, pois a classe Banco agora é responsável pela criação das contas

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant