0

クラスA、B、およびCのそれぞれdoA()、doB()、およびdoC()のメソッドがあると仮定します。

私が間違っていない限り、doA() メソッドはクラス A に属している必要があります。クラス A から実行する必要があります。A の責任を負うメソッド doA() がクラス B に存在する場合、クラス A は B のサービスに結合されています。 . これはまた、凝集度が低く、結合度が高いことを表しています。

私の推論は正しいですか?

4

1 に答える 1

1

クラスのすべてのメソッドがすべてのメンバー変数で動作する場合、クラスの凝集度は最大になります。

public class MyClass
{
    private int value1;
    private int value2;
    private int value3;

    public int Method1()
    {
        return value1 + value2;
    }

    public int Method2()
    {
        return value1 - value2;
    }

    // doesn't belong on this class
    public int Method3()
    {
        return value3 * 2;
    }
}

カップリングには次の 2 つの形式があります。

  1. クラスは内部で別のクラスを使用します。これはカップリングですが、継承よりも構成の例であるという点で問題ありません

例:

public class MyClass
{
    public void Method1()
    {
        var c = new MyOtherClass();
        c.DoSomething();
    }
}
  1. より悪いカップリングはこのように見え、しばしばデメテルの法則違反と呼ばれます。

例:

public class MyClass
{
    public void Method1()
    {
        var c = new MyOtherClass();
        var size = c.Members.Size;
        ...
    }
}

この場合、は だけでなく、 と の構造MyClass結びついており、ここで問題が発生し、コードが硬直して脆弱になります。MyOtherClassMyOtherClass

于 2011-04-20T16:39:40.643 に答える