Qual é a diferença entre acoplamento solto e acoplamento apertado no paradigma orientado para objectos?

Qualquer pessoa pode descrever a diferença exacta entre acoplamento solto e acoplamento apertado no paradigma orientado para objectos?

Solução

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.

Comentários (8)

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.

Comentários (1)

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.

Comentários (1)