Qualquer pessoa pode descrever a diferença exacta entre acoplamento solto e acoplamento apertado no paradigma orientado para objectos?
Acoplamento apertado é quando um grupo de classes é altamente dependente umas das outras.
Este cenário surge quando uma classe assume demasiadas responsabilidades, ou quando uma preocupação está espalhada por muitas classes em vez de ter a sua própria classe.
O acoplamento solto é conseguido através de um desenho que promove a responsabilidade única e a separação das preocupações.
Uma classe frouxamente acoplada pode ser consumida e testada independentemente de outras classes (de betão).
As interfaces são uma ferramenta poderosa a utilizar para a dissociação. As classes podem comunicar através de interfaces em vez de outras classes concretas, e qualquer classe pode estar do outro lado dessa comunicação simplesmente através da implementação da interface.
Exemplo de acoplamento apertado:
class CustomerRepository
{
private readonly Database database;
public CustomerRepository(Database database)
{
this.database = database;
}
public void Add(string CustomerName)
{
database.AddRow("Customer", CustomerName);
}
}
class Database
{
public void AddRow(string Table, string Value)
{
}
}
Exemplo de acoplamento solto:
class CustomerRepository
{
private readonly IDatabase database;
public CustomerRepository(IDatabase database)
{
this.database = database;
}
public void Add(string CustomerName)
{
database.AddRow("Customer", CustomerName);
}
}
interface IDatabase
{
void AddRow(string Table, string Value);
}
class Database : IDatabase
{
public void AddRow(string Table, string Value)
{
}
}
Outro exemplo aqui.
No desenho orientado para objectos, a quantidade de acoplamento refere-se a quanto o desenho de uma classe depende do desenho de outra classe. Por outras palavras, com que frequência é que as mudanças na classe A se relacionam com mudanças de força na classe B? Acoplamento apertado significa que as duas classes mudam frequentemente em conjunto, acoplamento solto significa que são na sua maioria independentes. Em geral, o acoplamento solto é recomendado porque é's mais fácil de testar e manter.
Pode achar este artigo de Martin Fowler (PDF) útil.
Acoplamento solto é e responde a dependências de estilo antigo e a questões relacionadas como a recompilação frequente quando algo muda e a reutilização de código. Aí se enfatiza a implementação da lógica do trabalhador em componentes e a prevenção de código específico da solução.
Acoplamento solto = IoC Ver isto para uma explicação mais fácil.