-
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.
-
@Eduardo,
Voce escreveu:
"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."
Nesta passagem está dizendo que ao criar o novo metodo (Extract Method), o mesmo possa necessitar de muitos parâmetros ou variaveis temporarias como parametros. Entendo que isso quer dizer q, a quantidade de parametros a serem passados para este novo metodo fique muito grande e confusa, sendo necessario o uso do Introduce Parameter Object. Nao tem a ver com uso do Introduce Parameter Object para metodos longos, mas sim com o fato de que o novo metodo do Extract Method fique com a lista de parametros enorme.
@Marcelino
Introduce Parameter Object diz:
Often the bodies of the methods have common manipulations of the parameter values. By moving this behavior into the new object, you can remove a lot of duplicated code.
Ou seja, esses parametros sao manipulados por operações dentro desses metodos que, ao utilizar o Introduce Parameter Object, acaba que, por consequencia, voce elimina algumas linhas daquele código. Isso nao quer dizer q o metodo era longo.
@All
O link do fowler[1] disserta sobre metodos longos dizendo:
" Long lists of parameters can be slimmed down with Introduce Parameter Object and Preserve Whole Object."
[1]http://sourcemaking.com/refactoring/long-method
-
Reanalisando o livro sobre padrões de refatoração do Fowler, percebi o seguinte:
Na contra capa, há uma tabela com os cheiros e as refatorações aplicáveis.
Método longo, p. 71 {Extrair método, Substituir variável temporária por consulta, Substituir método por objeto método, Decompor condicional}
No entanto, na parte que trata sobre os cheiros temos o seguinte:
Métodos longos:
Em 99% do tempo acplica-se o Extrair Método.
Você muitas vezes pode usar Substituir variável temporária por consulta para eliminar as variáveis temporárias. Listas longas de parâmetros pode ser diminuídas com Introduzir objeto parâmetro e Preservar o objeto inteiro.
Se você tentou isso e ainda tem variáveis temporárias e parâmetros demais, é hora de usar a artilharia pesada: Substituir método por objeto método.
...
Condições e laçõs também sinalizam extrações. Use Decompor Condicional para lidar com expressões condicionais.
Então o examinador percebeu a seguinte possibilidade de derrubar meio mundo (eu incluso nessa):
Se o cara estudar só essa tabelinha da contra-capa ao invés de ir lá dentro do livro, vai levar um ferro daqueles. (enquanto ria diabolicamente)
E pronto, está feita uma questão a lá cesgranrio.
-
Eu sabia que a II e a III estavam corretas, como não havia na resposta apenas II e III tive que considerar a I verdadeira tb, apesar de achar que a I está errado..
já que para mim Parameter Object é para quando existe muitos parametros e não um metodo longo
-
Técnicas de Refactoring:
- Extract Method:Transformar um fragmento de código que pode ser agrupado em um método com um nome que explica o objetivo desse fragmento.
- Substitute Algorithm: Substitua o conteúdo de um método com um algoritmo que faça a mesma coisa mas seja melhor.
- Introduce Parameter Object: Substituir parâmetros de um método por um objeto