Penso che sia necessario considerare sia i metodi pubblici che i metodi privati come segue:
La metrica si basa sulla valutazione della coesione tra i metodi pubblici - l'interfaccia con la classe vista dai client esterni, e non riporta la coesione degli interni privati come parte dell'interfaccia che un cliente consuma (come chiaramente non fanno parte di questo).
Tuttavia, durante il calcolo della coesione tra i metodi pubblici, è necessario considerare la coesione tra le variabili di istanza a cui si accede non solo direttamente dai metodi pubblici, ma anche dai metodi privati richiamati dai metodi pubblici.
Immagina di avere una classe il cui metodo pubblico chiama semplicemente un metodo privato:
class Foo {
private bool _state;
private void _setState ( bool choice ) { _state = choice; }
public void Set() { _setState ( true ); }
public void Reset () { _setState ( false ); }
}
Ora, il TCC si occupa della coesione tra Set
& Reset
, ma non _setState
.
Tuttavia, considerando Set
e Reset
dobbiamo tenere conto che chiamano _setState
. Se non consideriamo i metodi privati nel grafo delle chiamate statiche per i metodi pubblici, appariranno come se non avessero coesione l'uno con l'altro, quando in effetti, non mancano di coesione: interagiscono su _state
variabile di istanza.