Acoplamento vs Coesão
Acoplamento e coesão são dois conceitos encontrados em Java (e todas as outras linguagens orientadas a objetos). O acoplamento mede quanto cada um dos módulos do programa depende dos outros módulos do programa. A coesão mede quão fortemente cada uma das funções está relacionada em um módulo. Na verdade, qualquer linguagem orientada a objetos (incluindo Java) tem os dois principais objetivos de aumentar a coesão e diminuir o acoplamento ao mesmo tempo, a fim de desenvolver programas mais eficientes. Essas duas métricas de engenharia de software foram desenvolvidas por Larry Constantine para reduzir o custo de modificar e manter o software.
O que é coesão?
A coesão mede quão fortemente cada uma das funções está relacionada em um módulo de programa. Aulas bem estruturadas levam a programas altamente coesos. Se uma determinada classe está executando um conjunto de funções altamente relacionadas, diz-se que essa classe é coesa. Por outro lado, se uma classe está executando um monte de funcionalidades totalmente não relacionadas, isso significa que a classe não é coesa. É importante entender que não ter coesão não significa que o aplicativo geral não tenha a funcionalidade necessária. Só que, sem coesão, será muito difícil gerenciar a funcionalidade, pois elas estarão espalhadas em muitos lugares errados, pois a complexidade do aplicativo aumenta com o tempo. Manter, modificar e estender comportamentos espalhados por todo o código é muito tedioso, mesmo para a maioria dos programadores experientes.
O que é acoplamento?
O acoplamento mede quanto cada um dos módulos do programa depende dos outros módulos do programa. Interações entre dois objetos ocorrem porque há acoplamento. Programas pouco acoplados têm alta flexibilidade e extensibilidade. O acoplamento forte nunca é bom porque um objeto pode ser altamente dependente de outro objeto. Esse é um pesadelo quando o código é modificado, porque o acoplamento alto significa que os programadores precisam trabalhar em vários locais de código para uma única modificação comportamental. Um acoplamento forte sempre leva a programas com baixa flexibilidade e menos escalabilidade / extensibilidade. No entanto, em linguagens de programação como Java, evitar completamente o acoplamento é impossível. Mas é recomendável que os programadores façam o possível para reduzir o acoplamento o máximo possível. Também é possível ter algum acoplamento para ajudar os objetos a interagirem sem prejudicar sua escalabilidade e flexibilidade..
Qual a diferença entre acoplamento e coesão?
Embora o acoplamento e a coesão lidem com a qualidade de um módulo na engenharia de software, eles são conceitos totalmente diferentes. A coesão fala sobre o quanto a funcionalidade está relacionada entre si no módulo, enquanto o acoplamento lida com o quanto um módulo depende dos outros módulos do programa em todo o aplicativo. Para ter o melhor software de qualidade, a coesão e o acoplamento devem atingir as duas extremidades opostas de seus espectros. Em outras palavras, acoplamentos soltos e forte coesão fornecem o melhor software. Ter campos privados, classes não públicas e métodos privados fornece um acoplamento flexível, enquanto torna todos os membros visíveis dentro da classe e ter o pacote como a visibilidade padrão fornece alta coesão.