Concetti Fondamentali sulla
Programmazione




Cosa Significa Programmare
Linguaggi di Programmazione
Lo sviluppo dei programmi: tecniche di programmazione
L’esecuzione dei programmi
 L’interpretazione
 La compilazione
 Le Librerie
 Le Fasi di Compilazione e Link
 Esempio in C
1
La Programmazione
Dato un problema INFORMATICO, programmare
significa:
 Definire l’algoritmo risolutivo, che deve essere finito e
realizzabile con le risorse disponibili
 Tradurre l’algoritmo nel linguaggio di programmazione
scelto,
attraverso
la
particolare
tecnica
di
programmazione scelta, rispettando le regole sintattiche
del linguaggio
2
Linguaggi 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.
3
Linguaggi 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
4
Linguaggi di programmazione:
Evoluzione
 Il passo successivo nell’evoluzione 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
5
Linguaggi di programmazione:
Evoluzione
 Gli anni '70 vedono il fiorire dei linguaggi
Strutturati:
 il SIMULA 67, l’ALGOL 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#
6
La 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:
a) Programmazione NON Strutturata, che produce lo
Spaghetti Code
b) Programmazione Strutturata: Sequenza, Selezione,
Ripetizione
c) Programmazione ad Oggetti: Classe, Oggetto,
Metodo
7
L’Esecuzione dei Programmi

Il programma scritto in un qualunque
linguaggio deve essere tradotto in linguaggio
binario

Esistono due soluzioni:
 Interpretazione
 Compilazione
8
L’Interpretazione
 Funzionamento di un interprete:
 Preleva un’istruzione 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 all’istruzione successiva di P fino a
quando non si sia raggiunta una istruzione
di terminazione
9
Lo sviluppo dei programmi
basato sulla Compilazione
File sorgente
File sorgente
File sorgente
File sorgente
Compilazione
Compilazione
Compilazione
Compilazione
File oggetto
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
10
Le 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
l’estensione “.h” (ad es., stdio.h è il file header dello
standard I/O nel linguaggio C)
11
La 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
12
Il 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 all’esecuzione
 Il risultato prodotto dal Linker è un programma
eseguibile, che può essere caricato in memoria
13
La Fase di Caricamento
 Il Caricamento di un programma in memoria, avviene nel
momento in cui l’utente 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: l’uso dei compilatori crea false impressioni !
14
Esempio – 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 l’American National Standards Institute (ANSI)
ha iniziato i lavori per la definizione dell’ANSI C
 Nel 1988 nasce l’ANSI C
15
Esempio – Linguaggio C
 Per includere un file header in un programma in
linguaggio C, occorre inserire nel codice sorgente:
include <nomefile.h>
 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 <stdio.h>
16
Esempio – Linguaggio C
include<stdio.h>
Include la libreria standard di I/O
main()
Definisce una funzione main che non
riceve alcun valore come argomento
{
printf(“Salve, mondo\n”);
}
main richiama la funzione di libreria
printf per stampare la sequenza di
caratteri specificata; \n indica il new
line
17
Scarica

Fondamenti di Programmazione - Ingegneria Informatica e delle