Accoppiamento vs coesione
Accoppiamento e coesione sono due concetti trovati in Java (e in tutti gli altri linguaggi orientati agli oggetti). L'accoppiamento misura quanto ciascuno dei moduli del programma dipende dagli altri moduli del programma. La coesione misura quanto fortemente ognuna delle funzioni sia correlata all'interno di un modulo. In realtà, qualsiasi linguaggio orientato agli oggetti (incluso Java) ha i due obiettivi principali di aumentare la coesione e diminuire l'accoppiamento allo stesso tempo, al fine di sviluppare programmi più efficienti. Queste due metriche di ingegneria del software sono state sviluppate da Larry Constantine per ridurre i costi di modifica e manutenzione del software.
Cos'è la coesione?
La coesione misura quanto fortemente ognuna delle funzioni sia correlata all'interno di un modulo di programma. Le classi ben strutturate portano a programmi altamente coesi. Se una determinata classe sta eseguendo un insieme di funzioni altamente correlate, quella classe viene detta coesiva. D'altra parte, se una classe sta eseguendo una serie di funzionalità totalmente indipendenti, significa che la classe non è affatto coesa. È importante capire che non avere coesione non significa che l'applicazione complessiva non ha la funzionalità richiesta. È solo che senza coesione, sarà molto difficile gestire la funzionalità perché saranno sparsi in molti posti sbagliati con l'aumentare della complessità dell'applicazione nel tempo. Mantenere, modificare ed estendere i comportamenti sparsi su tutto il codice è molto noioso anche per i programmatori più esperti.
Che cos'è l'accoppiamento?
L'accoppiamento misura quanto ciascuno dei moduli del programma dipende dagli altri moduli del programma. Le interazioni tra due oggetti si verificano perché c'è un accoppiamento. I programmi ad accoppiamento lento sono ricchi di flessibilità ed estensibilità. L'accoppiamento forte non è mai buono perché un oggetto può essere altamente dipendente da qualche altro oggetto. Questo è un incubo quando il codice viene modificato, perché l'accoppiamento elevato significa che i programmatori devono lavorare su diversi punti del codice anche per una singola modifica comportamentale. Un forte accoppiamento porta sempre a programmi con bassa flessibilità e minore scalabilità / estensibilità. Tuttavia, in linguaggi di programmazione come Java, è assolutamente impossibile evitare l'accoppiamento. Ma si raccomanda che i programmatori si impegnino al massimo per ridurre il più possibile l'accoppiamento. È anche possibile avere un accoppiamento per aiutare gli oggetti a interagire tra loro senza ostacolare la sua scalabilità e flessibilità.
Qual è la differenza tra accoppiamento e coesione?
Anche se l'accoppiamento e la coesione riguardano la qualità di un modulo nell'ingegneria del software, sono concetti completamente diversi. La coesione parla di quanto le funzionalità siano correlate l'una all'altra all'interno del modulo, mentre l'accoppiamento si occupa di quanto un modulo dipende dagli altri moduli del programma nell'intera applicazione. Per avere il miglior software di qualità, coesione e accoppiamento dovrebbero raggiungere le due estremità opposte dei loro spettri. In altre parole, l'accoppiamento libero e la forte coesione forniscono il miglior software. Avere campi privati, classi non pubbliche e metodi privati forniscono un accoppiamento lento, rendendo tutti i membri visibili all'interno della classe e avendo un pacchetto come la visibilità predefinita fornisce un'elevata coesione.