Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Nível de acoplamento Exercício 5

Venho de uma linguagem procedural e gostaria de tirar uma dúvida sobre design. Seguindo o exemplo do exercício 5, calculando o valor dentro da implementação de um imposto e não na calculadora, estamos tornando imposto acoplado a orçamento, não sendo possível retornar o percentual de imposto para outra classe diferente de orçamento. Imaginei que a calculadora de imposto seria a responsável por executar o cálculo. Meu ponto de vista está correto? Muito obrigado pela ajuda, sair da caixa procedural é um exercício diario!

Minha referência para essa conclusão: https://bar8.com.br/design-pattern-sap-abap-strategy-afacbed92791

1 resposta
solução!

Oi Victor, tudo bom?

Realmente, a classe Calculadora está acoplada ao Orcamento. Isso porque no nosso modelo o Orcamento é quem encapsula o valor. Poderiamos tornar esse código mais desacoplado se criassemos uma interface para relacionar classes responsaveis por encapsular valores. Algo como:

public interface Orcavel{
    public double getValor();
}

E implementassemos na classe Orcamento:

public class Orcamento implements Orcavel{
    // implementação da classe Orcamento
}

Assim, poderiamos trabalhar com a interface:

public class CalculadorDeImposto {

        public void calcula(Orcavel orcamento, Imposto estrategiaDeImposto) {
          double resultado = estrategiaDeImposto.calcula(orcamento);
          System.out.println(resultado);
        }
      }

public class ISS implements Imposto {

          public double calcula(Orcavel orcamento) {
              return orcamento.getValor() * 0.06;
          }

      }

Assim, o imposto poderia receber qualquer coisa orçavel, não só um Orcamento. Como, no nosso sistema temos apenas uma classe com essa responsabilidade não havia a necessidade de extrair uma interface apenas para essa classe.

Criar mais interfaces implica em tronar nosso código mais complexo. Ao mesmo tempo também tornamos menos acoplado o código sempre que trabalhamos voltados à interfaces.

Sempre abrimos mão de algo para ganhar outra coisa, nesse caso abrimos mão de um pouco mais de complexidade porque o acoplamento teria pouco impacto no nosso modelo já que defiminos o Orcamento como o responsavel (e, provavelmente seria suficiente) de lidar com os valores.

Espero ter ajudado =)

Abraço e bons estudos.