Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Acoplamento x Coesão

Meu brother, você explicou bem a questão da calculadora de salários agora algo estranhou ficou : você afirmou que a classe não era tão coesa pois fazia muitas coisas como calcular salário e calcular descontos. Embora eu veja as funções de calcular descontos como auxiliares à função de calcular e, portanto, seja discutível se a classe não é coesa, devo acrescentar o seguinte: por mais que você a considere não coesa, acho que o foco de sua aula deveria ser que ela é altamente acoplada porque depende muito dos métodos calcular() de cada funcionário.... Quando mudar a regra de cálculo do desenvolvedor, a calculadora deverá saber...A Calculadora sabe de algo portanto que só o desenvolvedor deveria saber... Então, novamente, acho que o foco deveria ser no fato de a Calculadora ser altamente acoplada. Concordas ?

3 respostas
solução!

Oi Marcelo, tudo bom?

A ideia de acoplamento está mais relacionada ao impacto que uma mudança naquele ponto geraria no resto do sistema. Se o método calcular() fosse alterado, o impacto na manutenção do sistema seria, muito provavelmente, nenhum.

Ao mudarmos a regra de calculo apenas estamos mudando o conteudo desse método. Todos os lugares em que chamamos ele continuam chamando normalmente. Estamos mudando o comportamento do sistema sem impactar na manutenção. Isso significa que aqui não temos um alto acoplamento.

Algo que já é diferente para herança, por exemplo. Quando fazemos com que uma classe herde de outra estamos dizendo que uma depende da outra para existir. Que a definição delas são complementares. Isso significa que uma mudança em uma classe mãe pode afetar bastante o funcionamento das classes filhas e isso é um caso de alto acomplamento.

Quanto a coesão, estamos olhando para o nome da classe e o que ela faz. Uma classe coesa é aquela que possui funcionalidades relacionadas a oq ela descreve.

No nosso caso, a classe descreve uma CalculadoraDeSalario. Me parece bem justo uma calculadora de salario ter um método para calcular chamado calcula(). Outros que calculam porcentagens em cima desse valor também.

Me parece bem comum uma calculadora de salarios saber como fazer porcentagens. Nesse caso, é uma classe coesa.

Um exemplo de classe não coesa seria, dentro da CalculadoraDeSalario a gente ter um método chamado calculaDesconto($porcentagem). Embora um calculo de desconto não seja tão diferente de um calculo percentual de salario, não estamos falando de uma calculadora de salarios mais e sim de uma calculadora de descontos. Nesse caso não há coesão e o correto seria criar uma classe CalculadoraDeDescontos pra isso =)

Espero ter ajudado.

Abraço!

É, é só porque não achei a didática do instrutor tão boa assim. E esse assunto já é bem sensível e muito mal explicado ai pela Internet ...

Entendo. Ficou alguma duvida Marcelo? =)

Qualquer coisa é só falar!

Abraço.