Comecei a estagiar faz pouco tempo, e me chamaram a atenção sobre duas coisas: coesão e acoplamento.
Num mundo perfeito teríamos alta coesão e o baixo acoplamento certo?
Consegui entender sobre alta coesão, segue um exemplo de como não se deve fazer:
public class Produto
{
public void venderProduto()
{
}
public void imprimirEstoque()
{
}
public void reporProduto()
{
}
}
Entendi sobre acoplamento tb, e como se medir! Mas alguém poderia postar um exemplo simples de alto acoplamento?
[code]public class GerenciaProduto{
private FechaConta fechaConta;
private Carrinho carrinho;
public GerenciaProduto(){
carrinho = new Carrinho();
}
public void executa(Produto produto){
new FechaConta(carrinho).finaliza(produto);
}
}
[/code]
Repare que se o meu carrinho precisar de um usuário logado eu acabo quebrando o código e mais, e se a minha classe FechaConta além de precisar de um carrinho ele precise agora de um outro obejto?
vc quebra em todo o lugar que vc add essa classe FechaConta.
Como tirar essa acoplamento? impossível.
mas… vc pode diminuí - lo aplicando inversão de controle, fazendo com que o GerenciaProduto receba o Objeto FechaConta com o carrinho dentro
Ficando assim…
class GerenciaProduto {
private FechaConta fechaConta;
public GerenciaProduto(FechaConta fechaConta){
this.fechaConta = fechaConta;
}
public void executa(Produto produto){
fechaConta.finaliza(produto);
}
}
repara como o código ficou menos acoplado? se o meu objeto FechaConta precisar de um outro Objeto? problema dele… aqui não quebra mais!