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
13
Resposta:
As afirmativas I e IV são verdadeiras.
Explicação:
As afirmativas I e IV são verdadeiras.
resposta correta
Respondido por
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
Matemática,
5 meses atrás
Matemática,
5 meses atrás
Administração,
5 meses atrás
Geografia,
5 meses atrás
Matemática,
5 meses atrás
Matemática,
11 meses atrás
Geografia,
11 meses atrás