Cap. I
 Programmazione degli elaboratori elettronici
appunti dalle lezioni (1996) - Marcello Pizzi (tutti i diritti riservati)
pag. 1

 
Premessa.
Nell'ormai lontano 1995 iniziai le lezioni nei corsi di formazione professionale per programmatori. All'epoca si pose la scelta tra diverse alternative nella stesura dei programmi di studio. Scelsi come linguaggi il C++ e, come argomento principale, l'allora bistrattato Visual Basic, che tuttavia offriva numerosi vantaggi. Fu una scelta dolorosa, visto che quasi dieci anni prima ('88) avevo sviluppato un protocollo per la Alenia Spazio (Roma) nel linguaggio C, da me molto amato. Tuttavia, e non è questa la sede per discutere di ciò, le basi della programmazione restano a mio avviso valide per qualsiasi linguaggio e, udite udite, sia che si applichino alla programmazione strutturata che a quella ad oggetti o, piuttosto, a quella data oriented o, ancora, alla recente AOP (aspect oriented programming).
I neofiti che non conoscono questi termini avranno modo di affrontarli man mano che avrò il tempo di aggiornare questa sezione del sito, se avanno piacere di tornare a farvi visita...
 
         

Avvicinandosi per la prima volta al mondo dell'informatica è lecito porsi innanzitutto un domanda: cos' è un computer? (O, più propriamente, un elaboratore elettronico?).
La risposta a tale quesito ci fornirà lo spunto per prendere dimestichezza con pochi ma importanti termini "specialistici". I computer sono macchine che basano, a tutt' oggi, il loro funzionamento su circuiti elettronici; poichè il loro compito è elaborare delle informazioni, sarebbe più corretto chiamarli elaboratori elettronici, tuttavia, per brevità, ci riferiremo ad essi anche con i termini computer e calcolatori.
Il Personal Computer (PC) si presenta in genere costituito da pochi componenti fondamentali, sui quali non è il caso di soffermarsi. Per ulteriori approfondimenti è possibile leggere, in questo sito, le pagine alla sezione "introduzione".

Supponiamo di dover spiegare in che modo trovare un numero telefonico di un abbonato in un elenco (di una grande città).
Un primo metodo potrebbe essere questo: apriamo l'elenco alla prima pagina e confrontiamo il primo nome con quello da noi ricercato, se i due nomi non coincidono passiamo al successivo nome in elenco, e così via, sino a trovare l'abbonato che ci interessa o raggiungere la fine dell'elenco. Questa procedura ha però un piccolo difetto: nel peggiore dei casi dovremo leggere e confrontare anche qualche milione di nomi, prima di trovare quello desiderato!
Il metodo che invece di solito dovremmo usare si basa su una premessa: le lettere dell'alfabeto sono ordinate in una certa sequenza, in senso crescente dalla "a" alla "z", pertanto, date due lettere, è sempre possibile stabilire se una è maggiore, minore o uguale all'altra. Con un successivo salto logico, date due parole (o nomi) è possibile stabilire se, alfabeticamente, una è maggiore, minore o uguale all'altra.
Grazie a questa convenzione, e al fatto che un elenco riporta tutti i nomi in ordine crescente, possiamo usare un metodo molto più veloce per la ricerca di un nome, mediante confronti successivi e spostamenti nell'elenco in avanti o indietro a seconda che il nome da noi cercato sia maggiore o minore di quello "puntato" sull'elenco stesso.

I due metodi per la ricerca di un nome hanno una cosa in comune: entrambi funzionano!

Algoritmi, istruzioni e programma
La descrizione di un insieme finito di azioni che consente di risolvere un dato problema è definito algoritmo. Si tratta, in parole povere, di un insieme di regole o direttive.
Una caratteristica fondamentale degli algoritmi è che la descrizione delle azioni deve essere assolutamente priva di ambiguità interpretative (oltreché, ovviamente, comprensibile da chi o "cosa" le eseguirà).
Nell'esempio precedente abbiamo descritto due algoritmi che consentono di risolvere lo stesso problema, il primo, però, risulterà quasi sempre molto più lento del secondo.
Nel descrivere un algoritmo ricorriamo ad un insieme di azioni (aprire l'elenco, puntare al primo nome, confrontarlo con quello da noi ricercato, ecc.): la rappresentazione di una azione è detta istruzione e una sequenza (di senso compiuto e logico) di più istruzioni è definita programma. Possiamo quindi affermare che un programma è un insieme di istruzioni che consente di risolvere un problema!
In realtà è anche possibile istruire un computer, ovvero definire un algoritmo, affinchè stampi tutte le infinite cifre della costante pigreco: poichè, però, il tempo di elaborazione sarebbe infinito, nessuno vedrà mai i frutti di tale programma! E' dunque lecito asserire che un algoritmo deve poter essere eseguito in un tempo finito. Nel caso dell'elenco precedente, inoltre, consideriamo che non avrebbe senso produrre un algoritmo per cercare solo il nominativo "Mario Rossi": dovremmo essere in grado, dunque, di cercare qualsiasi cognome - nome! Questo comporta la necessità di definire l'algoritmo come un metodo generale, adatto a qualsiasi caso specifico (nell'ambito del problema dato): dunque il metodo per cercare un nominativo nell'elenco telefonico non è adatto a trovare la radice quadrata di un numero, ma deve "spiegare" come cercare qualsiasi nominativo dall'elenco stesso.

Elaborazione e programmazione
Il procedimento che da informazioni di partenza produce informazioni finali è detto elaborazione. Nell'esempio appena visto l'informazione di partenza è costituita dall'insieme di un cognome-nome e un elenco telefonico, l'informazione risultato dell'elaborazione è un numero telefonico.
La programmazione è invece l'attività che consiste nell'identificare le informazioni di partenza e quelle finali e nel definire operativamente le azioni che trasformeranno dette informazioni.
Il computer (elaboratore elettronico) è dunque una macchina che elabora informazioni in ingresso e produce informazioni in uscita. Tali informazioni sono dette più propriamente dati.

l'informazione
Potremmo definire l'informazione, in modo semplicistico, come la risoluzione di una incertezza, la scelta tra più alternative.
Una informazione è caratterizzata da tipo, valore e attributo: questo concetto è importantissimo, soprattutto nei linguaggi di programmazione.
Il tipo specifica a quale insieme di enti appartenga l'informazione (numero intero, numero reale, nome di persona, lettera dell'alfabeto, data, giorno del mese, ecc.).
Il valore è un elemento specifico di un insieme: se l'informazione è del tipo nome-cognome, potrebbe avere come valore Mario Rossi, se del tipo numero reale potrebbe assumere valore 5.3, ecc.
L'attributo specifica ulteriormente l'informazione, e ne dà un senso compiuto. l'informazione del tipo numero e di valore 1000 potrà avere come attributi "costo della rata mensile", "premio mensile di produzione", "numero di telaio", ecc., cambiando radicalmente significato.

Da quanto esaminato possiamo dunque definire il computer come una macchina che consente di elaborare delle informazioni finali da informazioni iniziali (preferibilmente... in un tempo finito).
Poichè l'elaborazione implica una serie di trasformazioni essa è definita anche come processo: l'ente che esegue il processo è detto processore.
Nell'esempio appena visto dell'elenco telefonico, il processore è l'uomo.


         
inizio pagina | pagina successiva