Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Coesione e accoppiamento

L'alternativa all'ereditarietà multipla.
L'alternativa all'ereditarietà multipla.
Link copiato negli appunti

Uno degli errori più comuni che viene commesso spesso dai programmatori poco esperti in OOP è quello di utilizzare una sorta di approccio "misto", ovvero di programmare ad oggetti ricorrendo talvolta alle vecchie abitudini proprie della programmazione procedurale.

Soprattutto i linguaggi come il C++, per compatibilità con il C, consentono di utilizzare questa modalità ibrida che rappresenta, sicuramente, una delle cose da evitare. Questa riflessione serve, tra l'altro, a mettere in luce l'importanza che riveste la qualità del codice quando si lavora in ambiente Object Oriented.

Due dei principali fattori da cui dipende una buona qualità del codice sono i seguenti:

  • Accoppiamento (Coupling)
  • Coesione (Cohesion)

L'Accoppiamento fa riferimento ai legami esistenti tra unità (classi) separate di un programma. In generale, diremo che se due classi dipendono strettamente l'una dall'altra (ovvero hanno molti dettagli che sono legati vicendevolmente) allora esse sono strettamente accoppiate (si parla anche di strong coupling).

Riflettendo un attimo su quanto detto nei paragrafi precedenti, quando si è parlato di incapsulamento, manutenzione e riutilizzo del codice, si può facilmente arguire che per una buona qualità del codice l'obiettivo sarà, dunque, quello di puntare ad un basso accoppiamento (weak coupling o loose coupling), consentendo in tal modo una migliore manutenibilità del software.

Infatti, un basso accoppiamento consente sicuramente di avere una buona comprensione del codice associato ad una classe senza doversi preoccupare di andare a reperire i dati delle altre classi coinvolte. Inoltre, utilizzando un basso accoppiamento, eventuali modifiche apportate ad una classe avranno poche o nessuna ripercussione sulle altre classi con cui è instaurata una relazione di dipendenza.

Per fare un esempio di basso accoppiamento nel mondo reale, si può pensare ad una Radio connessa con degli Altoparlanti attraverso l'uso di un cavo. Sostituendo o modificando il cavo, le due entità (Radio e altoparlanti) non subiranno alcuna modifica sostanziale alle loro strutture. Viceversa, un forte accoppiamento può essere rappresentato da due travi di acciaio saldate tra di loro. Infatti, per poter muovere una trave, anche l'altra subirà inevitabilmente degli spostamenti.

La Coesione, invece, rappresenta una informazione sulla quantità e sulla eterogeneità dei task di cui una singola unità (una classe o un metodo appartenente ad una classe) è responsabile. In altre parole, attraverso la coesione si è in grado di stabilire quali e quanti siano i compiti per i quali una classe (o un metodo) è stata disegnata. In generale, si può affermare che più una classe ha una responsabilità ristretta ad un solo compito più il valore della coesione è elevato; in tal caso si parlerà di alta coesione (strong cohesion).

Come si evince dalle definizioni appena fornite, a differenza dell'accoppiamento, il concetto di coesione può essere applicato sia alle classi che ai metodi.

È proprio l'alta coesione l'obiettivo da prefiggersi quando si vuole scrivere del codice di buona qualità. Infatti, il raggiungimento di un'alta coesione ha svariati vantaggi. In particolare: semplifica la comprensione relativamente ai compiti propri di una classe o di un metodo, facilita l'utilizzo di nomi appropriati e favorisce il riutilizzo delle classi e dei metodi.

Ti consigliamo anche