Acerca de padrões de projeto, JSE e JME, julgue o item a seg...

Próximas questões
Com base no mesmo assunto
Q869342 Programação

Acerca de padrões de projeto, JSE e JME, julgue o item a seguir.


O padrão Strategy possui benefícios como: clarificar algoritmos ao diminuir ou remover uma lógica condicional; simplificar uma classe ao mover variações de um algoritmo para uma hierarquia; habilitar um algoritmo para ser substituído por outro em tempo de execução; permitir que o algoritmo varie independentemente dos clientes que o utilizem.

Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Alternativa correta: C - certo

A questão aborda o padrão de projeto Strategy, que é um padrão comportamental no âmbito da programação orientada a objetos. Esse padrão é utilizado para definir uma família de algoritmos, encapsular cada um deles e torná-los intercambiáveis. O Strategy permite que o algoritmo varie independentemente dos clientes que o utilizam.

Os benefícios mencionados na questão são realmente atribuídos ao padrão Strategy. Vou explicar cada um deles:

  • Clarificar algoritmos ao diminuir ou remover uma lógica condicional: O uso de Strategy ajuda a evitar múltiplos if ou switch statements relacionados à seleção de algoritmos, pois cada algoritmo é encapsulado em sua própria classe, seguindo uma interface comum.
  • Simplificar uma classe ao mover variações de um algoritmo para uma hierarquia: Isso permite que uma classe seja simplificada, delegando comportamentos que podem variar para outras classes que implementam uma interface comum, a estratégia.
  • Habilitar um algoritmo para ser substituído por outro em tempo de execução: Graças à implementação do padrão Strategy, é possível alterar o algoritmo utilizado por um objeto em tempo de execução simplesmente trocando a instância da estratégia que ele está usando.
  • Permitir que o algoritmo varie independentemente dos clientes que o utilizem: Como os algoritmos são encapsulados em suas próprias estratégias, e os clientes operam com essas estratégias através de uma interface comum, os clientes são desacoplados dos algoritmos específicos, permitindo variações sem impactar o cliente.

O entendimento correto do padrão Strategy é essencial para responder a esta questão, e a alternativa C está correta pois reflete precisamente os benefícios que o padrão Strategy traz para o design de software.

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

Strategy (Família de Algoritmo)

Encapsula cada um deles e os torna intercambiáveis. O Strategy permite que o algoritmo varie independentemente dos clientes que o utilizam.

 

 

Certo

 

 

https://uploaddeimagens.com.br/imagens/padroes_de_projetos-png--3

 

 

Segundo o sítio DevMedia.com.br um dos grandes problemas das organizações empresariais é o excesso de lógica condicional (if .. else..if.. else if....) nas estruturas de softwares corporativos.

Lógicas condicionais tendem a crescer em complexidade por causa do número crescente de restrições a serem tratadas nos programas tornando-os mais difíceis de se manter com o passar do tempo.

Senão vejamos o exemplo (disponível em: https://medium.com/collabcode/strategy-padr%C3%B5es-de-projeto-em-java-43889a3afc5a)

public class CalculadaDeImpostos{

public double calcular(String imposto, double valor) {

if (imposto.equals("ICMS")) return valor * 0.10;

else if (imposto.equals("IPI")) return valor * 0.20;

else if (imposto.equals("NOVO IMPOSTO")) return valor * 0.50;

return valor;

}

}

Com a aplicação do Padrão Strategy no código acima ficaria:

public interface Imposto{

double calcular();

}

public class ICMS implements Imposto

private double valor;

// construtor da classe ICMS, implementa a interface Imposto

public ICMS(double valor) { this.valor = valor; }

// sobrescreve o método << calcular() >> defino na interface Imposto.

@Override

public double calcular() { return this.valor * 0.10; }

}

Dessa forma, todos os outros impostos seriam criados como classes Java, ao invés de vários IFs e ELSEs.

Uma das vantagens é reutilizar código; a mesma classe só mudaria o nome da classe (ICMA -> IPI), por exemplo e o cálculo no outro imposto, no caso valor * 0.20. Outras vantagens seria quando fosse preciso criar um novo imposto, bastava copiar uma das classes e recalcular o valor do imposto.

// Agora, então, a classe abaixo passa a interface "imposto" como parâmetro, assim, todas as classes que implementem a // interface Imposto hedaram o método calcular(), implicitamente.

public class CalculadoraDeImposto {

public double calcular(Imposto imposto) { return imposto.calcular(); }

}

Não hora de executar as classes acima:

public class TesteCalculadora {

public static void main(String [] args){

CalculadoraDeImposto calculadora = new CalculadoraDeImposto();

ICMS icms = new ICMS(100.0);

IPI ipi = new IPI(100.0);

System.out.println(calculadora.calcular(icms));

System.out.println(calculadora.calcular(ipi));

}

}

Assim, se amanhã surgir um novo imposto basta criar a classe correspondente ao imposto (copia e cola dos outros impostos já calculados) tudo ainda continua a funcionar, sem prejuízo do que já foi feito antes.

Clique para visualizar este comentário

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