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.
O código foi refatorado da seguinte forma:
Criei os arquivos .cpp para as classes Encomenda, EncomendaNormal e EncomendaRelampago para ocultar a implementação.
Alterei os modificadores de acesso de todas as classes para privado, exceto para a classe Encomenda, onde utilizei protegido devido à utilização de herança.
Transportei os método “calcula” e “print” para a classe Encomenda, pois ambas as classes EncomendaNormal e EncomendaRelampago utilizam esses métodos - não há a necessidade de polimorfismo nesse caso.
Na classe Encomenda criei um atributo privado chamado “taxa”, que é um modificador a ser aplicado no custo total. Dessa forma, o método se torna universal, não sendo a necessidade de redefinição nas classes filhas.
Em termos de nomenclatura, adotei o padrão de separar palavras através do caractere “_”. Isso torna as classes mais legíveis e facilita buscas no código, justamente por fornecer maior previsibilidade - o que favorece a manutenibilidade do código.
Por fim, em todos os métodos que não modificavam os atributos da classe foi aplicado o modificador “const”. Isso evita alterações indevidas por erro do programador. Exemplos de métodos nos quais essa abordagem foi utilizada: “calculate” (classe Encomenda) e “print” (classes Encomenda e Cliente).