私は凝集のトピックを調査していて、TCCメトリックにはパブリックメソッドのみを含める必要があるという主張もあれば、すべてのメソッドを主張する他の情報源があることもわかりました。どちらのアプローチを使用するのも間違っているでしょうか?一部の人が示唆するように、なぜプライベートメソッドを除外する必要があるのですか?
パブリックメソッドとプライベートメソッドの両方を次のように検討する必要があると思います。
この指標は、パブリックメソッド(外部クライアントから見たクラスへのインターフェース)間の凝集度の評価に基づいており、クライアントが使用するインターフェースの一部としてプライベート内部の凝集度を報告しません(明らかに、その一部)。
ただし、パブリックメソッド間の凝集度の計算時には、パブリックメソッドから直接だけでなく、パブリックメソッドによって呼び出されるプライベートメソッドからもアクセスされるインスタンス変数間の凝集度を考慮する必要があります。
Publicメソッドが単にprivateメソッドを呼び出すクラスがあるとします。
class Foo {
private bool _state;
private void _setState ( bool choice ) { _state = choice; }
public void Set() { _setState ( true ); }
public void Reset () { _setState ( false ); }
}
現在、TCCは、Set
とReset
の間の結合に関係していますが、_setState
には関係していません。
ただし、Set
およびReset
を検討する場合、_setState
を呼び出すことを考慮する必要があります。パブリックメソッドの静的呼び出しグラフでプライベートメソッドを考慮しない場合、それらは互いに凝集性を持たないように見えますが、実際には、凝集性が欠けていません:_state
インスタンス変数。