Stringa di coesione di classe stretta, tutti o solo metodi pubblici?

4

Sto facendo ricerche sul tema della coesione e ho scoperto che alcuni sostengono che la metrica del TCC dovrebbe includere solo metodi pubblici, altre fonti sostengono tutti i metodi. Sarebbe sbagliato usare entrambi gli approcci? Perché i metodi privati dovrebbero essere esclusi, come suggeriscono alcuni?

    
posta John V 04.02.2018 - 15:00
fonte

1 risposta

2

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.

    
risposta data 04.02.2018 - 17:35
fonte

Leggi altre domande sui tag