Misurare l'accoppiamento è difficile.
Le metriche semplicistiche come il numero di riferimenti inter-class sono facili da calcolare, ma in realtà non ti dicono molto che è utile per il codice.
Ci sono più fattori che indicano se l'accoppiamento è cattivo. I più importanti sono:
- la misura in cui la classe che fa riferimento ad un'altra dipende dai dettagli di quella classe
- la misura in cui è probabile che la classe accoppiata possa cambiare
- la misura in cui le classi accoppiate sono indipendenti nello scopo; le classi che potrebbero essere modificate insieme non sono tanto un problema, bensì una classe casuale non correlata.
Si noti che questi sono essenzialmente impossibili da quantificare. Quindi non fidarti mai di una metrica numerica di accoppiamento, perché ignora questi fattori critici.
Si noti che il primo è probabile che sia molto peggio in una classe che eredita da un'altra che usa la composizione, se non altro perché l'ereditarietà fornisce un meccanismo più conveniente, quindi è probabile che venga usato di più. Inoltre fornisce spesso metodi di interazione a un livello più privilegiato (ad esempio tramite membri protetti). Entrambi tendono ad aumentare i cattivi tipi di accoppiamento. Favorire la composizione aiuta quindi ad evitare un cattivo accoppiamento.
Altre tecniche che aiutano a seguire il principio di open closed (dove farlo non porta a disegni mostruosamente cattivi), che tende a ridurre il secondo punto nella mia lista, e seguendo il principio di responsabilità singola che tende a migliorare il terzo .