1. ホーム
  2. oop

[解決済み】オブジェクト指向のパラダイムにおける疎結合と密結合の違いは何ですか?

2022-04-16 15:21:50

質問

オブジェクト指向のパラダイムにおける疎結合と密結合の正確な違いについて説明できる人はいますか?

どのように解決するのですか?

タイト・カップリングとは、複数のクラスが互いに高度に依存している状態のことです。

このシナリオは、1つのクラスがあまりにも多くの責任を負っている場合や、1つの懸念事項が独自のクラスではなく多くのクラスに分散している場合に発生します。

疎結合は、単一責任と関心事の分離を促進する設計によって達成される。

疎結合のクラスは、他の(具象)クラスから独立して消費され、テストされることができます。

インターフェイスはデカップリングのために使える強力なツールです。クラスは他の具象クラスではなくインターフェースを通して通信することができ、インターフェースを実装するだけで、どのクラスもその通信の相手側になることができます。

タイトカップリングの例。

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)
    {
    }
}

ルーズカップリングの例。

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 implements IDatabase
{
    public void AddRow(string Table, string Value)
    {
    }
}

別の例 こちら .