O acoplamento frouxo é essencialmente a dependência indireta entre os módulos de como eles podem evoluir.
Geralmente, quando existem sistemas fortemente acoplados, diferentes módulos / objetos têm comportamentos muito específicos que pressupõem esse comportamento dos objetos periféricos. Tais objetos são vinculados / acoplados a comportamentos de outros módulos e não podem ser reutilizados isoladamente ou em qualquer outro contexto.
Tais módulos, embora sejam responsáveis pela funcionalidade individual, não podem evoluir independentemente ou não podem evoluir.
Um exemplo:
Digamos que você tenha 3 objetos
Shape(um objeto de modelo) e Canvas(um elemento da interface do usuário). Agora
Suponha que um método shape.draw(Canvas)desenhe um objeto no plano que é fornecido pelo plano da tela.
Agora, às vezes, as janelas estão parcialmente cobertas e são redimensionadas. Nesses casos, o método acima pode fazer algo assim.
shape::draw(Canvas) {
Rect.WindowLeft = Canvas.GetWindowRect.getLeftOffset();
Rect.LeftPixel = Canvas.GetWindowRect.pixels() + Rect.WindowLeft;
.... // like this get all co-ordinates.
draw_instance(Rect); // This will draw the actual shape.
}
Basicamente, aqui a função desenhar seleciona o retângulo onde as coisas precisam ser desenhadas. Isso é fácil de entender (as pessoas podem chamar isso simples ) de código. No entanto, esse é um código extremamente acoplado.
Imagine a situação:
- E se o mecanismo da tela de manter janelas não for mais um retângulo?
- e se houver compensações adicionais mantidas pelo Canvas que sejam privadas ?
- E se algum outro aplicativo desejar a mesma forma, mas não tiver mais uma janela da GUI (por exemplo, está criando imagens e salvando em arquivos).
A causa principal do problema é que objecto shape conhece e, consequentemente, firmemente acoplado com Canvas.
O que é desejável que um conjunto de pixels seja dado para moldar onde ele escreve; o shapenão deve ter (mesmo implícito) conhecimento sobre onde os pixels são realmente gravados.