Title: Concetti Fondamentali sulla Programmazione
1Concetti Fondamentali sulla Programmazione
- Cosa Significa Programmare
- Linguaggi di Programmazione
- Lo sviluppo dei programmi tecniche di
programmazione - Lesecuzione dei programmi
- Linterpretazione
- La compilazione
- Le Librerie
- Le Fasi di Compilazione e Link
- Esempio in C
2La Programmazione
- Dato un problema INFORMATICO, programmare
significa - Definire lalgoritmo risolutivo, che deve essere
finito e realizzabile con le risorse disponibili - Tradurre lalgoritmo nel linguaggio di
programmazione scelto, attraverso la particolare
tecnica di programmazione scelta, rispettando le
regole sintattiche del linguaggio
3Linguaggi di programmazione Linguaggio Macchina
- I primi linguaggi di programmazione coincidevano
con l'insieme delle istruzioni eseguibili
dall'hardware. - Le istruzioni hardware sono codificate in codice
binario ogni informazione è rappresentata,
all'interno della macchina, come una sequenza di
bit. - LOAD 8 potrà essere rappresentata in una macchina
reale come 00110010, dove 0011 è la
rappresentazione interna del codice operativo
LOAD - Enorme sforzo richiesto per codificare algoritmi
semplici.
4Linguaggi di programmazione Assembly
- Dalla nascita dei primi calcolatori, si è cercato
di diminuire lo sforzo e aumentare la
produttività dell'utente, anche a costo di
caricare la macchina di maggiori compiti. - E meglio risparmiare il tempo dell'uomo anche a
costo di sprecare tempo-macchina (traduzione di
programmi e scarsa efficienza del programma). - La prima evoluzione dei linguaggi di
programmazione ha portato ad una codifica di tipo
simbolico, anziché binaria, dei programmi. - Tali versioni simboliche dei linguaggi hardware
sono note come linguaggi assembly
5Linguaggi di programmazione Evoluzione
- Il passo successivo nellevoluzione dei linguaggi
di programmazione tese a rendere la codifica
degli algoritmi il più possibile vicina al
problema da risolvere anziché all'architettura
della macchina destinata all'esecuzione del
programma. - Non a caso i primi due linguaggi di alto livello,
FORTRAN e COBOL, hanno costrutti fortemente
ispirati alla notazione usata per descrivere i
problemi di maggior rilievo per il calcolo
automatico degli anni '50, cioè l'elaborazione
numerica e quella gestionale.
Alto Livello
Assembly
Macchina/binario
MicroProgrammi
Hardware
6Linguaggi di programmazione Evoluzione
- Gli anni '70 vedono il fiorire dei linguaggi
Strutturati - il SIMULA 67, lALGOL 68, ma soprattutto il
PASCAL e il C - Negli anni '80 si ha l'affermarsi dei linguaggi
Object-Oriented (OO) - C, Visual BASIC, Java, C
7La Tecnica di Programmazione
- Non è legata ad un linguaggio, anche se alcuni
linguaggi sono ideali per essere abbinati ad una
specifica tecnica di programmazione - Esistono tre tecniche
- Programmazione NON Strutturata, che produce lo
Spaghetti Code - Programmazione Strutturata Sequenza, Selezione,
Ripetizione - Programmazione ad Oggetti Classe, Oggetto, Metodo
8LEsecuzione dei Programmi
- Il programma scritto in un qualunque linguaggio
deve essere tradotto in linguaggio binario - Esistono due soluzioni
- Interpretazione
- Compilazione
9LInterpretazione
- Funzionamento di un interprete
- Preleva unistruzione I del programma P scritto
nel linguaggio L - Decodifica I
- Traduce I in una serie di istruzioni in
linguaggio macchina M1, M2, , Mn - Esegue M1, M2, , Mn
- Passa allistruzione successiva di P fino a
quando non si sia raggiunta una istruzione di
terminazione
10Lo sviluppo dei programmi basato sulla
Compilazione
Compilazione
Compilazione
Compilazione
Compilazione
File oggetto
File oggetto
File oggetto
Link
Libreria/e
File eseguibile
- I codici sorgente ed oggetto possono essere
suddivisi in più file, il codice eseguibile di un
programma risiede in un unico file
11Le Funzioni di Libreria
- In molti linguaggi (quali il C), molte operazioni
vengono delegate a delle librerie - Le funzioni sono divise in gruppi, quali I/O,
gestione della memoria, operazioni matematiche e
manipolazione di stringhe - Per ogni gruppo di funzioni esiste un file
sorgente, chiamato file header, contenente le
informazioni necessarie per utilizzare le
funzioni (Dichiarazione costanti, funzioni,
parametri delle funzioni, etc.) - I nomi dei file header terminano, per
convenzione, con lestensione .h (ad es.,
stdio.h è il file header dello standard I/O nel
linguaggio C)
12La compilazione dei file sorgente
- Un file sorgente contiene un main e un insieme di
routine, chiamate funzioni, ognuna delle quali
risolve una piccola parte del problema di
programmazione - Un file sorgente può contenere chiamate a
funzioni di libreria e chiamate a funzioni
contenute in altri file sorgenti - Il compilatore è esso stesso un programma (o un
gruppo di programmi) che deve essere eseguito - Durante la compilazione avviene
- Controllo del codice sorgente da parte di un
preprocessore interpretare speciali direttive di
precompilazione, - Controllo di eventuali errori sintattici (NON
LOGICI), - Produzione di un file in codice Assembly,
- Trasformazione del file in codice Assembly in un
altro file in codice OGGETTO (Macchina)
estensione .obj
13Il link
- Il linker è generalmente un programma distinto
dal compilatore in alcuni ambienti il programma
di link deve essere lanciato separatamente - Il Linker fa in modo che
- i riferimenti tra diversi file oggetto e con le
librerie vengano risolti - i file oggetto creati dal compilatore vengano
trasformati in un unico file eseguibile, al quale
vengano associate le librerie necessarie
allesecuzione - Il risultato prodotto dal Linker è un programma
eseguibile, che può essere caricato in memoria
14La Fase di Caricamento
- Il Caricamento di un programma in memoria,
avviene nel momento in cui lutente richiede la
sua esecuzione - Durante la fase di caricamento (o loading ), il
programma eseguibile viene caricato nella memoria
del calcolatore - Le Fasi di Compilazione, Linker e Loading sono
separate (anche temporalmente) - Attenzione luso dei compilatori crea false
impressioni !
15Esempio Linguaggio C
- Molte idee basilari del C derivano dal linguaggio
BCDL e linguaggio B - Nel 1978 Kernighan e Ritchie pubblicano The C
Programming Language - Nel 1983 lAmerican National Standards Institute
(ANSI) ha iniziato i lavori per la definizione
dellANSI C - Nel 1988 nasce lANSI C
16Esempio Linguaggio C
- Per includere un file header in un programma in
linguaggio C, occorre inserire nel codice
sorgente - ?include ltnomefile.hgt
- La direttiva ?include è rivolta al preprocessore
- Si chiama Direttiva di Precompilazione
- Esempio Per utilizzare printf(), che permette di
visualizzare dati su terminale, è necessario
inserire nel sorgente la direttiva di
precompilazione - ?include ltstdio.hgt
17Esempio Linguaggio C
Include la libreria standard di I/O
?includeltstdio.hgt main() printf(Salve,
mondo\n)
Definisce una funzione main che non riceve alcun
valore come argomento
main richiama la funzione di libreria printf per
stampare la sequenza di caratteri specificata \n
indica il new line