No âmbito da Refatoração de software, analise as afirmativas...

Próximas questões
Com base no mesmo assunto
Q47419 Engenharia de Software
No âmbito da Refatoração de software, analise as afirmativas a seguir.

I - Introduce Parameter Object é uma técnica de refatoração que pode ser aplicada em métodos muito longos.
II - Código duplicado é candidato para aplicação das técnicas Extract Method e Substitute Algorithm.
III - Extract Class é uma técnica de refatoração que pode ser aplicada em classes muito grandes.

Está(ão) correta(s) a(s) afirmativa(s)
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Alternativa correta: E - I, II e III.

No contexto da refatoração de software, as três afirmativas abordam diferentes técnicas utilizadas para melhorar a estrutura do código sem alterar seu comportamento externo. É uma prática fundamental para manter a qualidade do software ao longo do tempo e facilitar a manutenção e compreensão do código. Vamos analisar cada uma das afirmativas:

Afirmativa I: "Introduce Parameter Object" é uma técnica de refatoração que consiste em substituir um grupo de parâmetros por um objeto que represente todo esse grupo. Isso ajuda a simplificar a assinatura de métodos, promovendo um maior entendimento e organização do código, especialmente em métodos muito longos com muitos parâmetros.

Afirmativa II: O "código duplicado" é um problema comum em bases de código e pode levar a inconsistências e dificuldades de manutenção. As técnicas Extract Method, que envolve mover um fragmento de código para um novo método, e Substitute Algorithm, que troca um algoritmo inteiro por um mais claro ou eficiente, são estratégias efetivas para eliminar a duplicação e melhorar a clareza do código.

Afirmativa III: A técnica de Extract Class é aplicada quando uma classe começa a ficar muito grande e com muitas responsabilidades. Neste caso, parte de sua funcionalidade pode ser movida para uma nova classe, ajudando a manter cada classe mais focada, compreensível e gerenciável.

Todas essas técnicas contribuem para a melhoria da qualidade do código e a manutenção da saúde do software, razão pela qual a alternativa E está correta, pois todas as afirmativas I, II e III estão corretas no contexto da refatoração.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

 Alguém poderia me explicar essa questão?

O Parameter Object, pelo que pesquisei, agrega todos os parâmetros de um método em uma classe.

Na afirmativa I, caberia a técnica Extract Method, que cria um novo método extraindo um bloco de código.

 

 I - Introduce Parameter Object, em seu uso, cria-se uma classe imutável que represente o grupo de parâmetros de um ou mais métodos. O que valida a questão é que algumas vezes no corpo do método há estrutras/comportamento usados exclusivamente para manipular os parâmetros. Esses comportamentos podem ser movidos para o objeto de parâmetros.
Fonte: Introduce Parameter Object

II - 

Esta questao está MUITO errada. Como ng entrou com recurso?!?!

Introduce Parameter Object é uma tecnica usada quando metodos possuem LISTAS DE PARAMETROS muito longos. E nao métodos longos.
Concordo com Marcelo. Quando o item I fala métodos longos, dá a entender métodos com corpo longo, e não a assinatura do método. Eu entraria com recurso
O primeiro item da questão não está errado.

Na explicação sobre os refactorings que podem ser usados em métodos muito longos (pag 77, Refactoring, Fowler) ele explica que:

Quando é utilizado o Extract Method, em métodos muito longos, pode ocorrer desse novo método possuir muitos parâmetros e variáveis temporárias como parâmetros fazendo com que a chamada do método extraído fique tão confusa quanto originalmente. Nesses casos ele sugere o uso de Replace Temp With Query, Introduce Parameter Object e Preserve Whole Object.

Um bom lugar para consulta rápida dos padrões é: http://refactoring.com/catalog/
Existe uma descrição e um exemplo de utilização do padrão.

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo