/arquitetura-software

Repositório para disciplina de Arquitetura de Software da UTFPR-CP, referente à 2020/2.

Primary LanguageJava

arquitetura-software

Repositório para disciplina de Arquitetura de Software da UTFPR-CP, referente à 2020/2.

Atividade 3

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
-------------------------------------------------------------------------------

II. Quantidade de Estruturas Condicionais

--------------------------------
ESTRUTURAS CONDICIONAIS:      5
--------------------------------

III. Quantidade de Pontos a Realizar Melhoras

  • 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
  • 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.

  • Utilização de operador ternário - referência
  • 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.

  • Modificador de acesso final - referência

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()"
  • 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.

  • Exclusão das variáveis auxiliares dos métodos de teste
  • 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
  • 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.

  • Exclusão da classe ItemCorrecaoFornece - Substituicao por uso da classe Object - referência
  • 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.

  • Utilização de herança - Design Pattern Template Method
  • 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.