Repositório para disciplina de Arquitetura de Software da UTFPR-CP, referente à 2020/2.
Primeiramente foi realizada a avaliação do código referente ao commit 2fdb64c.
I. Contagem de linhas, utilizando o cloc.
------------------------------------------------------------------------------- Language files blank comment code ------------------------------------------------------------------------------- Java 11 144 95 600 XML 9 0 0 397 Maven 1 7 1 21 ------------------------------------------------------------------------------- SUM: 21 151 96 1018 -------------------------------------------------------------------------------
-------------------------------- ESTRUTURAS CONDICIONAIS: 5 --------------------------------
- Revisar a clareza dos nomes das variáveis, métodos e classes; ✓
- Analisar a viabilidade de implementar herança e polimorfismo para as classes que implementam métodos semelhantes ✓
- Analisar classes e variáveis que devem ser final ✓
- Analisar a necessidade da classe ItemCorrecaoFornece ✓
- Analisar a viabilidade de reduzir a quantidade de estruturas condicionais ✓
- Otimização do código (análise da necessidade de variáveis auxiliares, simplicidade dos métodos) ✓
- Analisar os padrões de código Java que podem ser aplicados ✓
Commit 8b2491d
- Adequação ao Design Patterns Strategy
- Utilização de operador ternário - referência
- Modificador de acesso final - referência
Criação de interfaces FonteElemento, implementada nas classes FonteFosforo e FontePotassio, e interface CorrecaoElemento, implementada nas classes CorrecaoFosforo e CorrecaoPotassio.
O objetivo desta adequação é criar uma interface com os métodos utilizados em comum pelas classes, visto que possuem a mesma assinatura. Dessa forma, quando os métodos de Correcao dos outros elementos forem implementados, já existe os métodos que devem ser obrigatoriamente implementados, devido a utilização da interface.
Este padrão de código foi útil, em conjunto com a classe enum, para diminuir a quantidade de estruturas condicionais que haviam no inicio no projeto. E ainda, o padrão pode ser replicado conforme a necessidade do código, facilitando a manutenabilidade.
Os operadores ternários foram utilizados para eliminar as estruturas condicionais. Cada estrutura condicional que possuia 4 linhas pode ser implementada em apenas uma linha.
Métricas
------------------------------------------------------------------------------- Language files blank comment code ------------------------------------------------------------------------------- Java 13 136 110 623 XML 9 0 0 397 Markdown 1 1 0 30 Maven 1 7 1 21 ------------------------------------------------------------------------------- SUM: 24 144 111 1071 -------------------------------------------------------------------------------
-------------------------------- ESTRUTURAS CONDICIONAIS: 0 --------------------------------
Commit c828f7e
- Alteração da designação e atribuição das variáveis de retorno do método "correcaoFornece()"
- Exclusão das variáveis auxiliares dos métodos de teste
Com essa mudança foi possível reduzir 3 linhas de código para apenas uma, que faz a atribuição do array diretamente na linha de retorno.
As variáveis auxiliares foram instanciadas diretamente no método do assertEquals. Foram mantidas somente as variáveis fixas, utilizadas mais de uma vez na classe de teste.
Essa alteração otimizou o código, excluindo a etapa de designação com a criação e instaciação de variáveis ao longo do código.
Métricas
------------------------------------------------------------------------------- Language files blank comment code ------------------------------------------------------------------------------- Java 13 135 110 529 XML 9 0 0 397 Markdown 1 1 0 30 Maven 1 7 1 21 ------------------------------------------------------------------------------- SUM: 24 143 111 977 -------------------------------------------------------------------------------
-------------------------------- ESTRUTURAS CONDICIONAIS: 0 --------------------------------
Commit c0efd9b
- Alteração dos enums FonteFosforo e FontePotassio - referência
- Exclusão da classe ItemCorrecaoFornece - Substituicao por uso da classe Object - referência
- Utilização de herança - Design Pattern Template Method
Foi realizada a criação do método construtor do enum, permitindo a inserção de atributos que presentam os nutrientes que serão fornecidos após correção do Solo. Além disso, foi excluída a dependência com a classe ItemCorrecaoFornece.
A classe ItemCorrecaoFornece foi substituída pela utilizacação da classe Object.
Esta estratégia reduziu significativamente as linhas de código utilizadas nos métodos de teste para correcaoFornece(). Agora foi possível implementar somente um AssertEquals para cada tipo de fonte dos elementos.
O padrão foi aplicado para as classes CorrecaoFosforo e CorrecaoPotassio, que agora herdam atributos e métodos da classe abstrata CorrecaoElemento. Sendo assim, a interface criada anteriormente foi substituída pela classe.
Esta estratégia permitiu diminuir a repetição de código. Agora as classes filhas apenas precisam implementar o método quantidadeAplicarElemento() e os métodos únicos de cada classe, otimizando a manutenabilidade do código.
------------------------------------------------------------------------------- Language files blank comment code ------------------------------------------------------------------------------- XML 9 0 0 397 Java 12 131 101 361 Markdown 1 5 0 87 Maven 1 7 1 21 ------------------------------------------------------------------------------- SUM: 23 143 102 866 -------------------------------------------------------------------------------
-------------------------------- ESTRUTURAS CONDICIONAIS: 0 --------------------------------
Como visto, as decisões tomadas ao longo do desenvolvimento desta atividade impactaram positivamente a otimização do código e, por conseguinte, a manutenabilidade do mesmo.
Pode-se destacar:
- As estruturas condicionais puderam ser excluídas;
- Os métodos de cada classe foram otimizadoscom com a implementação de interfaces e classes abstratas;
- As linhas foram reduzidas de 1071 para 866.