Il riutilizzo del codice
E' normale che molte applicazioni abbiano in comune le stesse periferiche
utilizzate, ad esempio RTC, display intelligenti, termometri, sensori vari.
Oppure impieghino alcune operazioni, come conversioni di formato, calcoli
matematici, comunicazioni su bus seriali, ecc.
Il programmatore può scrivere il codice necessario a risolvere il problema
contingente, ma quando, in una successiva applicazione, si troverà di nuovo di
fronte allo stesso problema, non gli restano che due vie: scrivere nuovamente
la procedura, con impegno di tempo e risorse, oppure ri utilizzare quanto
scritto in precedenza, risparmiando tempo e fatica.
Questa seconda soluzione è quella che i programmatori hanno da sempre
utilizzato: scrivere sezioni di codice, modelli, funzioni e procedure in modo
tale da poterle riutilizzare con facilità in momenti successivi. Tra l'
altro, il riutilizzo del software è un' area di attività riconosciuta nello
studio di ingegneria del software.
Il riutilizzo del codice si basa sulla semplice considerazione che una
sezione di un programma, spesso un driver o una procedura, scritto una sola
volta può essere (e deve) essere ri utilizzabile: questo fa risparmiare tempo
ed energia, riducendo il lavoro ridondante.
Quanto alle motivazioni che dovrebbero spingere qualsiasi programmatore a
pensare il suo software, per quanto possibile, in modo strutturato e
riutilizzabile, e, sopratutto, a non
lasciarsi tentare di "buttare giù" linee e linee ex novo per ogni
applicazione sono:
- Funzionalità - perchè rifare il già fatto? Molto meglio
realizzare un tratto di programma che si potrà riutilizzare in infinite
altre situazioni che non riscrivere ogni volta le stesse soluzioni, con in
più il rischio di commettere errori.
- Sicurezza - una procedura che è stata già testata e ottimizzata
non richiederà tempo per il suo debug. Potrà essere utilizzata con
sicurezza e lascerà tempo per concentrarsi su nuovi problemi
- Chiarezza - l' uso di librerie rende molto più chiara la
struttura del programma, in quanto, invece che decine o centinaia di linee
di codice, nel sorgente si incontrano richiami alle funzioni della
libreria, di cui si conosce la funzione.
- Condivisione - il lavoro effettuato da un programmatore, ad
esempio per scriver un driver efficace per una periferica, potrà essere
condiviso con altri che hanno lo stesso problema.
- Pianificazione - una squadra lavora sicuramente in modo efficace
su una buona struttura che non su un disordine anarchico
In alcuni casi il "riutilizzo" del codice comporta la copia
semplicemente tutto o in parte il codice da un programma esistente in uno
nuovo, ma è probabile che nella procedura siano presenti variabili specifiche
che occorre modificare a seconda dell' applicazione. Stendendo il
codice in una forma tale da poter essere, per quanto possibile.
"universalizzato" o personalizzato al momento dell' uso, si ottiene
un modulo "prefabbricato" che potrà essere inserito nel nuovo
programma senza sforzo.
Certamente la necessità di rende quanto più possibile
"universale" il software nel suo riutilizzo solitamente ne
rende più complessa la scrittura nella stesura base, ma solitamente questo
impegno si ripaga da sè già al primo riutilizzo.
Alcune caratteristiche che rendono il software più facilmente
riutilizzabili sono modularità, accoppiamento lasco, un' alta coesione e la
separazione dei problemi.
Ma, sopra ogni cosa, la chiave del riutilizzo è la
presenza di una documentazione esauriente ed efficace che permetta il
riutilizzo dei moduli senza la necessità di andare a capire cosa e come
stanno eseguendo quel dato compito.
Una libreria software è un buon esempio di
riutilizzo del codice.
Una libreria è una raccolta, un insieme di risorse software, che
possono contenere subroutine e macro, tipi, valori, classi, ecc.
Dato che si tratta di raccolte di sezioni di codice, le librerie possono
essere realizzate per qualsiasi linguaggio, dall' Assembly in su, e anche per
applicazioni molto specifiche.
I linguaggi standard dispongono di librerie proprie, contenenti le più
varie funzioni, solitamente divise per ordine di applicazione o rapporto con
un particolare dispositivo o classe di periferiche.
Siccome l' area delle applicazione è enormemente vasta ed è impossibile per
le librerie standard coprirla, tutti i linguaggi fanno si che i programmatori
possano anche creare le proprie librerie personalizzate. Essi possono decidere
di creare astrazioni interne, in modo che alcune parti del loro programma possano essere riutilizzati, oppure possono creare librerie personalizzate per
uso proprio.
Siccome le librerie tendono a contenere codice o dati che devono fornire
servizi a programmi differenti, si prestano alla condivisone e alla modifica del
contenuto in maniera modulare e facilitano la distribuzione del codice e
dati. Gli autori di nuovi programmi possono utilizzare il codice in una
libreria software esistente per eseguire l'attività richiesta, invece di
"reinventare ogni volta la ruota", scrivendo codice completamente
nuovo direttamente in un programma per eseguire quell'operazione.
Le implementazioni delle libreria spesso hanno il vantaggio di essere
soluzione per situazioni comuni, ma anche per casi
insoliti o arcani, collaudati e debuggati e che quindi evitano lunghe ore di
lavoro.
Ovviamente la libreria, per essere fruita in modo efficace, richiede che
sia disponibile una documentazione tale da fornire all' utente tutte le
informazioni necessarie per un uso facile e coerente.
Se questo manca, il tempo e il costo di acquisizione di
apprendimento rende la libreria poco utilizzabile.
Inoltre, la documentazione adeguata consente la configurazione personalizzata
di parti della libreria, modificando particolari che possono influire sulle
prestazioni o l'output desiderato dall' utente per quella particolare
applicazione.
E per i microcontroller ?
Dato che trattiamo specificamente l' ambito dei
microcontroller, è opportuno accennare al fatto che, per i principali
prodotti, tra cui i PIC di Microchip, sono reperibili in rete numerosissime
fonti di librerie e raccolte di parti di codice di ogni genere, che vanno dalle semplici macro per creare pseudo opcodes che permettano una più facile
programmazione Assembly nell' ambiente RISC dotato di un numero ridotto di
istruzione, alle funzioni matematiche a virgola mobile e per ogni altro genere di applicazione, anche
molto specifica. Ovviamente sono disponibili, oltre a quelle presenti nel
pakgage del linguaggio, anche librerie per il C, il BASIC, ecc. Alcuni link tra i tantissimi
disponibili:
|