Modularità

Il concetto fondamentale nato dalla programmazione strutturata è quello di divisione in moduli dell’intera procedura. Ogni modulo risolve una piccola parte del problema, l’insieme dei moduli e delle loro interfacce risolve il problema globale.

Un programma grosso è molto difficile da capire. Dividerlo significa spezzarlo in parti che risultano di comprensione più semplice.

Un listato obbliga il lettore - programmatore ad effettuare una elevata serie di discriminazioni mentali: ogni variabile o espressione deve essere figurata, ogni loop e ogni salto obbliga a ricostruire degli invarianti logici validi per l’intero blocco, ogni riferimento a dati esterni obbliga ad inquadrare gli effetti della variazione di tali variabili nel resto del programma.

Quindi quanto grande deve essere un modulo? Vi sono delle regole empiriche che indicano che un modulo deve essere abbastanza piccolo da essere compreso leggendone il codice, per cui non più di 50 righe di listato.

Questa è sicuramente una buona indicazione, ma anche in 50 righe di codice si possono costruire dei pasticci terribili, e per contro se si programma bene listati anche molto più consistenti restano leggibili e comprensibili.

Occorre quindi sviluppare delle tecniche che guidino la divisione di un problema in blocchi.

Una indicazione viene dalla logica che ha unito più istruzioni in un singolo blocco: la "coesione" di un modulo. Un blocco di programma deve nascere con un principio unificante che porta a correlare un insieme di istruzioni. La coesione indica il principio che ha portato ad unire le istruzioni che formano il modulo.

I moduli comunicano tra loro, scambiandosi delle informazioni, attraverso i parametri, blocchi di variabili comuni, variabili globali. Il principio seguito nell’"interfacciamento" tra i vari moduli indica quanto "mescolati" sono tra loro i due moduli collegati, andando dalla forma più sicura che vede come unica comunicazione il passaggio di parametri (libreria) a moduli strettamente collegati con blocchi di variabili globali comuni.