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:
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...