La programmazione modulare
La programmazione modulare ( modular programming ) è un paradigma della programmazione informatica basato sulla modularità del codice.
Il codice sorgente del programma è suddiviso in più blocchi indipendenti detti moduli. Ogni modulo svolge una funzione specifica, viene richiamato in memoria soltanto quando serve e usa gli stessi indirizzi di memoria degli altri moduli.
In questo modo un programma può girare anche su computer con una quantità di memoria inferiore.
Come funziona l'overlay
Le prime tecniche di programmazione modulare nacquero negli anni '70 per risolvere il problema dell'esaurimento della memoria disponibile.
Cos'è l'overflow? La memoria centrale di un computer è limitata. Se un programma richiede più memoria rispetto a quella disponibile, l'elaborazione si blocca restituendo un messaggio di errore ( es. "out of memory" ). Era un problema molto frequente nei primi computer degli anni '70 e '80.
Per risolvere questo problema nacque la tecnica di programmazione overlay basata sulla "sovrapposizione".
L'overlaying è il trasferimento di un blocco del codice del programma nelle locazioni di memoria dove sono già stati registrati altri dati del programma.
Al programma è assegnata una quantità fissa M di memoria ( area blu ).
Il programma utilizza la memoria per caricare il primo blocco di codice ( modulo A ).
Al termine dell'esecuzione, gli stessi indirizzi di memoria sono azzerati o riutilizzati dal secondo blocco di codice del programma ( modulo B ). E così via.
Ogni modulo si sovrappone alla memoria del precedente.
In questo modo il software può essere eseguito anche su computer con memoria inferiore a quella richiesta dal programma.
Nota. Nel paradigma procedurale tradizionale l'intero programma è caricato in memoria prima dell'esecuzione, occupando una maggiore quantità di memoria.
Un esempio pratico
Un programma è strutturato in tre parti:
- A] input dati
- B] elaborazione
- C] output risultato
Ogni modulo richiese M quantità di memoria ( Ma, Mb, Mc ).
Nella programmazione procedurale tradizionale il programma è caricato in memoria per intero, occupando uno spazio Ma+Mb+Mc.
Nella programmazione modulare, invece, ogni parte del programma diventa un modulo.
Il computer elabora carica ed elabora il modulo A, poi il modulo B e infine il modulo C usando la stessa partizione di memoria.
In questo modo la quantità di memoria necessaria è pari al valore più alto tra Ma, Mb e Mc.
Max(Ma,Mb,Mc) < Ma+Mb+Mc
C'è quindi un enorme risparmio di memoria.
Nota. La quantità di memoria della tecnica di overlay è leggermente superiore, perché una piccola parte del programma ( la radice ) coordina l'esecuzione degli altri modulo. Se questa routine occupa una quantità Mr di memoria, il computo complessivo è Mr + Max(Ma, Mb, Mc). In ogni caso, è comunque inferiore a Ma+Mb+Mc.