Informática, perguntado por anesoledar, 5 meses atrás

Dentro da programação, independentemente de ser a codificação de um sistema baseado em páginas web ou não, temos sempre a preocupação de sua escalabilidade. Por exemplo, vamos supor que temos a necessidade de criar uma página para e-commerce e que são estabelecidos descontos diferenciados para cada tipo de forma de pagamento. Suponha que um programador fez uma primeira versão da seguinte forma (código em PHP):

public function retornaDesconto($formaPG,$valor_compra)
{
if($formaPG==”Boleto”) {return $valor_compra*0.9;}
else if($formaPG==”Debito”) {return $valor_compra*0.95;}
else {return $valor_compra;}
}

Na implementação acima, temos o inconveniente de que, quando houver a necessidade de adicionar mais uma forma de pagamento, deveremos adicionar mais uma estrutura do tipo “else if... else”.
Diante da situação, foram apresentadas algumas soluções:

Solução 1: criar uma classe para cada tipo de forma de pagamento. Todas as classes teriam um método para retornar o valor com desconto - o nome e a lista de parâmetros seriam os mesmos para todas as classes. Por exemplo, para a classe boleto, a implementação seria:

class Boleto
{
public function ValorComDesconto($valor_compra)
{
return $valor_compra*0.9;
}
}

Solução 2: criar uma interface na qual todas as classes devem implementá-la. Assim, a solução ficaria:

interface formaPG
{
public function ValorComDesconto($valor_compra);
}

class Boleto implements formaPG
{
public function ValorComDesconto($valor_compra)
{
return $valor_compra*0.9;
}
}

Diante dessas duas versões de implementação, analise as afirmações a seguir.

I. Não implementaria a “solução I” pois, assim que for determinado o tipo de pagamento, para criar um objeto relativo à classe pertinente deve-se fazer uma estrutura de “if...else if...”
II. Implementaria ambas as soluções, pois ambas apresentam as mesmas vantagens e desvantagens.
III. Não implementaria a “solução II” pois as classes ficariam não flexíveis, ou seja, todas deveriam seguir o mesmo padrão, o que dificultaria a reutilização do código.
IV. Implementaria a “solução II”, pois a modificação do código para inserir ou retirar uma forma de pagamento, ficaria mais ágil e fácil de ser realizada.
V. Implementaria a “solução I”, pois é mais fácil de entender.

Diante das afirmações acima, selecione a opção correta.

Soluções para a tarefa

Respondido por brunaczaramela
13

Resposta:

As afirmativas I e IV são verdadeiras.

Explicação:

As afirmativas I e IV são verdadeiras.

resposta correta

Respondido por anderlonoliveira
3

Resposta:

As afirmativas I e IV são verdadeiras.

Explicação:

A “solução 2” representa um padrão chamado de Strategy (estratégia). É um dos padrões GOF usados para a linha comportamental do sistema.

Perguntas interessantes