Visita Orebla.it su Facebook Segui Orebla.it su Twitter Vedi i video su YouTube di Orebla.it Unisciti alle cerchie di Orebla.it
DOVE TI TROVI: \\ Home Page\c\Guida al C : Cenni di programmazione

Guida al C/C++

autore: BlackLight
xx/xx/xx

Cenni di programmazione:

Anche se molti di voi hanno già dimestichezza con il computer e con l'arte informatica, il mio intento è quello di partire da zero e condurvi gradualmente nel meraviglioso mondo della programmazione in C.

Innanzitutto, si definisce "programma" qualsiasi sequenza di istruzioni scritte in linguaggio macchina (l'unico linguaggio comprensibile ad un calcolatore, le famose sequenze di 0 e 1) atta ad essere elaborata da un calcolatore o comunque da una struttura informatica.

Ogni volta che accendiamo il PC facciamo uso di programmi. Word e Outlook sono programmi. Winamp è un programma. Windows stesso non è altro che un programma (un "programma di base" o "software di base"). Anche i virus in fondo sono solo "simpatici" programmini!

Si pone qui il problema di come scrivere un programma.
In principio, quando i computer erano enormi "mobili" chiusi a chiave dentro le stanze delle università o dei laboratori di ricerca, era il programmatore stesso a dettare le istruzioni binarie al calcolatore. Ma scrivere programmi usando solo sequenze di 0 e 1 non è certo la cosa più comoda del mondo, oltre ad essere del tutto innaturale per l'uomo.

Passiamo alla metà degli anni 50: i programmatori creano un sistema più "comodo" per creare i loro progetti, l'Assembly.
L'Assembly (o GLI Assembly, dato che la sintassi di questo linguaggio cambia in funzione di molte variabili, quali il sistema operativo in uso, l'architettura della macchina che si va a programmare e l'assemblatore in uso) non è altro che una rappresentazione simbolica del linguaggio macchina, dove ad ogni istruzione binaria corrisponde un'istruzione mnemonica, relativamente più semplice da ricordare. Così la sequenza 1100 1101 0010 0001 (linguaggio macchina) diventa int 21h (sintassi Assembly Intel).

Ma anche l'Assembly non è il massimo della vita! E' pur sempre un linguaggio orientato alla macchina, non al problema, e, col passare degli anni, i progetti si fanno via via più grandi, e l'Assembly da solo non può gestirli.
Ecco quindi che compaiono sulla scena i primi linguaggi ad "alto livello", ossia linguaggi più orientati al problema (e quindi all'utente) che all'architettura intrinseca della macchina. Sono il COBOL (tanto vituperato dai programmatori moderni), il BASIC e il FORTRAN, linguaggi molto più semplici dell'Assembly ma non altrettanto potenti.
Anche questi linguaggi hanno le loro pecche: il COBOL ha delle regole sintattiche troppo rigide per essere usato dalle masse di programmatori, il FORTRAN è ottimo per la progettazione di applicazioni a carattere scientifico, ma non per la progettazione di codice di sistema, il BASIC, nonostante la sua incredibile facilità di apprendimento, non è potente, e non ha una struttura vera e propria.
Inoltre, questi tre linguaggi si basano tutti sull'istruzione GOTO ("vai a"), ripresa dall'istruzione JMP dell'Assembly, quindi i programmi scritti con questi linguaggi tendono al cosiddetto "codice spaghetti", un codice spezzettato, pieno di diramazioni e salti condizionati che rendono spesso il programma illeggibile, un vero dramma quando si tratta di fare manutenzione!

Nasce quindi il PASCAL, un linguaggio ad alto livello dotato di una struttura e di istruzioni vere e proprie per il controllo del flusso del programma, ma non progettato per un vasto campo di azione, quindi poco efficiente per la scrittura di codice di sistema. Al giorno d'oggi il PASCAL è usato solo per scopi didattici, grazie alla sua semplicità di apprendimento e alla sua sintassi "pulita".

Arriviamo all'inizio degli anni 70, l'hardware diventa sempre più potente e la richiesta di software cresce giorno dopo giorno, ma non esiste ancora un linguaggio ad alto livello che soddisfi qualsiasi richiesta di software.
Fino al 1972, "l'ora zero" del linguaggio C: in un laboratorio della AT&ampT Bell Dennis Ritchie fa girare un primo prototipo del C su un DEC PDP-11 con sistema operativo UNIX. Il C fu il risultato dello sviluppo di due linguaggi di programmazione più vecchi il B (sviluppato da Ken Thompson) e il BCPL (sviluppato da Martin Richards). Per anni il linguaggio C fu strettamente legato al sistema operativo UNIX (infatti, dopo la progettazione del C, tutte le successive versioni di UNIX furono scritte in questo linguaggio, e ancora oggi il kernel di Linux, sistema basato su UNIX, è scritto in C). Nel 1989, alla luce dei vari "stili" del C formatisi, l'ANSI (American National Standards Institute) mise a punto l'ANSI-C, una versione standard del C priva di ambiguità, che è in uso tuttoggi.

La novità del C, ed anche il motivo di tutto il suo successo, è che il C è un linguaggio di programmazione sviluppato dai programmatori stessi, e non da un'istituzione governativa o da un'università, per i programmatori stessi: questo rende il C il linguaggio dei programmatori. Unita a questa caratteristica, c'è la versalità del C: un linguaggio usato tanto per semplici programmini didattici, tanto per programmare sistemi operativi: è un linguaggio che si presta ad un'infinità di usi, grzie anche ad una libreria davvero vastissima. Il C infatti, a differenza degli altri linguaggi di programmazione, ha davvero pochissime keyword (parole riservate), ma una vastissima gamma di funzioni che spaziano dalle funzioni per l'I/O standard alle funzioni matematiche, dalla manipolazione dei file alla gestione della memoria, dagli strumenti per la creazione di interfacce grafiche (GUI) alla manipolazione delle regex: queste funzioni sono ormai parte integrante del linguaggio. Inoltre, chiunque può aggiungere nuove funzioni a quelle che corredano il C, e questo è un altro elemento che rende il C tanto flessibile e potente.

E' inoltre l'unico linguaggio ad "alto livello" che mette a disposizione delle funzioni per la gestione della memoria e dei processi: se voglio creare un programma che gestisca queste componenti, devo fare assolutamente ricorso ad un linguaggio di basso livello come il linguaggio macchina o l'Assembly.

Del 1982 è invece il C++ che, a differenza di quello che pensano in molti, non è un nuovo linguaggio, bensì un'evoluzione naturale del C; un programma scritto in C infatti verrà compilato senza problemi anche da un compilatore C++. Tuttavia, il C++ mette a disposizione del programmatore la OOP, la programmazione orientata agli oggetti, che non è qualcosa che si "aggiunge" al programma, bensì è un modo totalmente diverso di concepire un'applicazione.
Quando si ha che fare con grandi progetti (oltre le 25000 linee di codice), diventa difficile gestire l'applicazione nella sua interezza, anche se è scritta in C, e qui entra in soccorso il C++, che permette al programmatore di gestire le singoli componenti del programma come oggetti, ossia come componenti intrinseche del linguaggio stesso; gli oggetti sono disposti in classi, che sono la loro rappresentazione astratta, ed ogni classe può ereditare oggetti da altre classi o cambiare la loro visibilità all'interno del programma (esistono oggetti privati, protetti e pubblici). La potenza della OOP permette al programmatore di fare cose davvero interessanti, come ridefinire gli operatori, fare l'overloading di funzioni, creare tipi di dati "su misura" (con i template), gestire le eccezioni in modo potente (con i blocchi try e catch).
Ovviamente, occorre procedere per passi: non si possono apprezzare appieno le novità introdotte dal C++ se non si ha familiarità col C.

Nel 1991 fu concepito il Java che, pur essendo un linguaggio a sè stante, è considerato da molti come un'evoluzione del C++. Infatti, la sintassi di questo linguaggio deve molto al C/C++, i costrutti alla base sono molto simili. Ciononostante, il Java si pone come obiettivi quello di essere un linguaggio di programmazione orientato al Web (ed è diventato con gli anni il linguaggio di programmazione del Web) e quello di essere un linguaggio multipiattaforma (write once, run everywhere è il motto del Java), e queste caratteristiche hanno decretato il suo successo negli ultimi anni. Lo stesso programma che scrivo in Java lo posso eseguire teoricamente senza problemi su Windows, su Linux, un un Mac e persino su un telefonino (i famosi "giochi Java"), a patto che esista una JVM (Java Virtual Machine) per quel sistema.

Passando all'ultimo decennio, abbiamo la nascita dei linguaggi di quarta generazione, linguaggi di script (non di programmazione) estremamente intuitivi e facili da usare: il Perl, il Python (guarda caso entrambi sviluppati grazie al C!).
Microsoft ha messo a punto un suo ambiente di sviluppo basato sul C++ (Visual C++) ed il C#, un linguaggio che deve molto al C/C++.
E' storia recente la nascita del "linguaggio D", che personalmente non ho ancora provato ma che ho intenzione di provare. Casomai vi farò sapere ;-)





Articoli utili:
Jailbreak iOS 10: tweaks compatibili

Recensione iPhone 6

IPhone 7 uscito, novita, prezzi