LINGUAGGI DI PROGRAMMAZIONE: LE...
Transcript of LINGUAGGI DI PROGRAMMAZIONE: LE...
-
Andrea Prevete - UNINA2 - a.a. 2009/101
ELEMENTI DI PROGRAMMAZIONE
LINGUAGGI DI PROGRAMMAZIONE:
LE BASI
-
Andrea Prevete - UNINA2 - a.a. 2009/102
LINGUAGGI DI
PROGRAMMAZIONE: LE BASI
Un computer digitale è un dispositivo che elabora simboli codificati (a partire da un alfabeto finito di simboli primitivi, ‘cifre’ o
‘digit’) così che, opportunamente interpretati, i simboli di partenza e quelli terminali costituiscono rispettivamente la descrizione di un problema e la sua
soluzione.
-
Andrea Prevete - UNINA2 - a.a. 2009/103
LINGUAGGI DI
PROGRAMMAZIONE: LE BASIOsservando l’azione di un repertorio di
quadruple che duplica una sequenza di ‘1’ sul nastro di una macchina di Turing possiamo
ragionevolmente interpretare il tutto affermando che la macchina ha eseguito una
moltiplicazione per due.
Immaginiamo però di voler determinare le quadruple capaci, dato due interi qualsiasi x
ed y, di eseguire l’operazione xy.
Il compito ci appare fastidioso ed innaturale!
-
Andrea Prevete - UNINA2 - a.a. 2009/104
LINGUAGGI DI
PROGRAMMAZIONE: LE BASI
Il codice “base” delle quadruple è evidentemente sufficiente alla macchina per manipolare
efficientemente i suoi simboli-nastro, ma prolisso e non intuitivo rispetto alle nostre necessità di descrivere dati e passi risolutivi di un problema!
-
Andrea Prevete - UNINA2 - a.a. 2009/105
LINGUAGGI DI
PROGRAMMAZIONE: LE BASI
Allo stesso modo una sequenza di istruzioni di una macchina di Von Neumann (quindi il PC che abbiamo in questo momento sulla scrivania!), pur perfetta per manipolare
efficientemente i contenuti di celle di memoria e registri, è interpretabile per i macroeffetti che produce (e quindi al livello del problema!) solo a patto di un esame attento e minuzioso
-
Andrea Prevete - UNINA2 - a.a. 2009/106
LINGUAGGI DI
PROGRAMMAZIONE: LE BASIEsempio di sequenza per stampare le parole immesse dalla tastiera (processore x86):READ_STRING:
MOV BX, KEYBOARD
MOV CX, L_BUFFER
LEA DX, BUFFER
MOV AH, 3FH
INT 21H
MOV BYTES_READ, AX
CMP BYTES_READ, 0
JE FINISHED
MOV BX, PRINTER
MOV CX, BYTES_READ
LEA DX, BUFFER
MOV AH, 40H
INT 21H
JMP READ_STRING
FINISHED:
-
Andrea Prevete - UNINA2 - a.a. 2009/107
LINGUAGGI DI
PROGRAMMAZIONE: LE BASI
Fortunatamente, in tutti i moderni sistemi di elaborazione, l’interazione con la macchina reale è mediata da almeno due componenti fondamentali ..
1) il Sistema Operativo, che garantisce la “virtualizzazione” di tutta una serie di servizi fondamentali quali la gestione della memoria fisica, delle periferiche, dell’interfaccia utente, etc.
2) i linguaggi di programmazione cosiddetti di alto livello, che consentono di progettare e realizzare compiti elaborativi concentrandosi sul livello del problema e quindi astraendo dalle specifiche tecniche della macchina fisica.
-
Andrea Prevete - UNINA2 - a.a. 2009/108
LINGUAGGI DI
PROGRAMMAZIONE: LE BASI
-
Andrea Prevete - UNINA2 - a.a. 2009/109
LINGUAGGI DI
PROGRAMMAZIONE: LE BASI
•
-
Andrea Prevete - UNINA2 - a.a. 2009/1010
LINGUAGGI DI
PROGRAMMAZIONE: LE BASI
L’ insieme di istruzioni scritte in un linguaggio di
programmazione ad alto livello prende il nome di
codice sorgente ed è generalmente contenuto in
uno o più file le cui estensioni caratterizzano
linguaggio usato, per es: mioprog.c, o mioprog.cpp
-
Andrea Prevete - UNINA2 - a.a. 2009/1011
LINGUAGGI DI
PROGRAMMAZIONE: LE BASI
La definizione di un Linguaggio richiede :
1) Un alfabeto, cioè l’insieme di simboli con cui si può costruire il suo
lessico, ovvero i termini del linguaggio
2) Una sintassi, quindi le regole di composizione dei termini in frasi
ben formate del linguaggio
3) Una semantica, cioè il significato delle frasi ben formate del
linguaggio
Un parser o analizzatore sintattico per un linguaggio è una
procedura che analizza frasi del linguaggio stesso accettando solo
quelle ben formate nel senso visto sopra.
-
Andrea Prevete - UNINA2 - a.a. 2009/1012
LINGUAGGI DI
PROGRAMMAZIONE: LE BASI
Perché possano essere eseguite da una
macchina reale le istruzioni scritte in un
linguaggio di alto livello devono essere
tradotte nelle corrispondenti istruzioni native
della macchina che li eseguirà.
Questo processo può avvenire
essenzialmente utilizzando due strategie:
� Un processo di compilazione
� Un processo di interpretazione
-
Andrea Prevete - UNINA2 - a.a. 2009/1013
LINGUAGGI DI
PROGRAMMAZIONE: LE BASI
Sintetizzando …
Un compilatore traduce “definitivamente” uno o più file contenenti le istruzioni in linguaggio ad alto livello producendo il cosiddetto file eseguibile:
> compila file_sorgente.src ���� file_eseguibile.exe
A questo punto il file eseguibile può essere lanciato ogni volta che si vuole e senza ulteriori interventi del compilatore:
> esegui file_eseguibile.exe
Vantaggi:La traduzione, come detto sopra, è realizzata una volta sola e l’eseguibile è quindi sempre pronto per essere lanciato
Svantaggi:Per eseguire il programma su macchine diverse occorre compilare ogni volta i sorgenti!
-
Andrea Prevete - UNINA2 - a.a. 2009/1014
LINGUAGGI DI
PROGRAMMAZIONE: LE BASI
Un Interprete, invece, ogni volta che viene chiamato in causa
traduce ed esegue una per volta le istruzioni contenute nel file
sorgente:
> Interpreta file_sorgente.src
Vantaggi:
L’interpretazione è più flessibile, perché è possibile eseguire lo
stesso file sorgente su macchine diverse
Svantaggi:
E’ sicuramente meno efficiente dovendo ogni volta, prima di
eseguire, tradurre da linguaggio sorgente a linguaggio
macchina
-
Andrea Prevete - UNINA2 - a.a. 2009/1015
LINGUAGGI DI PROGRAMMAZIONE:
LE BASISono possibili ibridazioni fra le due tecniche (per es. Java):
Le istruzioni vengono tradotte in un linguaggio intermedio (bytecode)
indipendente dalla macchina, quindi interpretate ed eseguite.
Il primo passo viene eseguito da un compilatore
Il secondo da un interprete
> compila file_sorgente.src ���� file_intermedio.obj
> interpreta file_intermedio.obj
Sono quindi assicurati i vantaggi dei due approcci:
• Il metodo è efficiente perché il linguaggio intermedio è “molto vicino” al
linguaggio macchina e la sua interpretazione - ed esecuzione - è veloce
• è anche flessibile perché è possibile eseguire il codice intermedio su
macchine diverse
-
Andrea Prevete - UNINA2 - a.a. 2009/1016
LINGUAGGI DI
PROGRAMMAZIONE: LE BASI
-
Andrea Prevete - UNINA2 - a.a. 2009/1017
LINGUAGGI DI
PROGRAMMAZIONE: LE BASI
-
Andrea Prevete - UNINA2 - a.a. 2009/1018
LINGUAGGI DI PROGRAMMAZIONE:
LE BASIUNA TASSONOMIA PER I LINGUAGGI DI PROGRAMMAZIONE
- Linguaggi imperativiBasati sul concetto di assegnamento: le istruzioni sono sostanzialmente operazioni di modifica delle strutture dati[es: Fortran, Cobol, Pascal, C, Basic]
- Linguaggi funzionaliBasati sul concetto di funzione: le istruzioni sono funzioni che vengono valutate [es: Lisp]
- Linguaggi logiciBasati sul concetto di dimostrazione: le istruzioni esprimono relazioni logiche tra input e output [es: Prolog]
- Linguaggi ad oggettiBasati sul concetto di dato come oggetto attivo, in grado di ricevere e inviare messaggi [es: Smalltalk, C++, CLOS, Java]
- Linguaggi di scriptingLinguaggi di programmazione interpretati che sono destinati in genere a compiti di automazione del sistema o delle applicazioni (macro), o ad essere usato all'interno delle pagine web. [es: Javascript, Php, Asp, Jsp, Python]
-
Andrea Prevete - UNINA2 - a.a. 2009/1019
LINGUAGGI DI
PROGRAMMAZIONE: LE BASI
Nella restante parte del corso avremo a che fare
essenzialmente con linguaggi imperativi.
Ribadiamo, a scanso di equivoci, che tutte le tipologie di
linguaggi prima citate sono equipotenti in termini di
ampiezza della classe di problemi che possono affrontare
e risolvere.
Scegliere un tipo di linguaggio piuttosto che un altro
significa optare per una certa prospettiva di descrizione di
un problema, selezionare una metodologia di approccio
alla soluzione – non certo dotarsi di strumenti più o meno
potenti.
-
Andrea Prevete - UNINA2 - a.a. 2009/1020
LINGUAGGI DI
PROGRAMMAZIONE: LE BASI
Passiamo finalmente ad occuparci di cosa concretamente ci rende
disponibile un linguaggio di tipo imperativo, sia in termini di descrizione dei
dati che di strumenti risolutivi.
Cominciamo con l’osservare che fondamentalmente un problema è sempre
caratterizzato da dei dati in ingresso su cui vogliamo operare per ottenere un
risultato. Quindi avremo bisogno di svolgere dei calcoli e di mettere da parte
dei risultati parziali. Per fare ciò, ci viene incontro la nozione di contenitore
dei dati, cioè un’astrazione della nozione di area di memoria contenente dei
dati. Tale contenitore di dati è detta variabile di un programma. In un
programma avremmo tante variabili quanti sono i dati che ci interessa
memorizzare! Ogni contenitore di dati (variabile) avrà un tipo; a seconda del
tipo di variabile, avremo un insieme di elementi rappresentabili ed un
insieme di operazioni possibili su di essa.
-
Andrea Prevete - UNINA2 - a.a. 2009/1021
LINGUAGGI DI PROGRAMMAZIONE:
LE BASICertamente avremo a che fare con variabili di tipo intero (int);
ciascuna di queste variabili occuperà tipicamente 4 byte in
memoria (32 bit) e permetterà di rappresentare un intervallo di
numeri interi.
Tra le operazioni possibili incontreremo certamente le classiche
+, -, *, /, >,
-
Andrea Prevete - UNINA2 - a.a. 2009/1022
Vi è poi da fare la distinzione tra dati di tipo semplice (Es. una variabile di tipo intero,
reale, testo o logico) ed i dati di tipo strutturato. I dati di tipo strutturato sono dati
composti, ad esempio matrici o vettori (es. [1 2 3 4 5]).
Un altro dato di tipo strutturato sono i record: strutture non uniformi, cioè contenenti
più valori non necessariamente dello stesso tipo.
Esempio:
1) NUM è una variabile di tipo int che vale 1
L’istruzione PRINT(NUM) stamperà il valore di NUM, quindi 1
2) VET è una variabile di tipo vettore di interi che contiene i tre interi 4, 5, -1
L’istruzione PRINT(VET[3]) stamperà il valore del terzo elemento del vettore,
quindi -1
3) REC è una variabile record composta dai tre campi NOME, COGNOME,
CODCLIENTE
L’istruzione PRINT(VET.CODCLIENTE) stamperà il contenuto del campo
CODCLIENTE del record corrente
LINGUAGGI DI PROGRAMMAZIONE:
LE BASI
-
Andrea Prevete - UNINA2 - a.a. 2009/1023
Ma quali sono le istruzioni fondamentali
per lavorare sui dati?
Fondamentalmente tre:
1) Istruzioni di Input / Output;
2) Istruzioni di Assegnazione;
3) Istruzioni di controllo.
LINGUAGGI DI PROGRAMMAZIONE:
LE BASI
-
Andrea Prevete - UNINA2 - a.a. 2009/1024
INPUT/ OUTPUT
Le istruzioni di ingresso / uscita permettono di
acquisire dati e di presentare risultati.
Ad esempio:
read (a) - acquisisci un dato da tastiera ed assegnalo
come valore alla variabile a;
print ('La media dei valori dati in ingresso è ',
media) - stampa il contenuto della variabile
media , preceduto da una stringa commento
LINGUAGGI DI
PROGRAMMAZIONE: LE BASI
-
Andrea Prevete - UNINA2 - a.a. 2009/1025
ASSEGNAZIONE
Le istruzioni di assegnazione modificano lo stato di memoria, cioè i valori dei contenitori dati (detti variabili).
Sono della forma:
VARIABILE = ESPRESSIONE
[(leggi: assegna a VARIABILE il valore di ESPRESSIONE)]
Es.: a = b + 3
ESPRESSIONE può essere una costante, una variabile, un’espressione algebrica, una funzione, etc
Una volta calcolato il valore di ESPRESSIONE sostituisce il vecchio valore di VARIABILE
LINGUAGGI DI
PROGRAMMAZIONE: LE BASI
-
Andrea Prevete - UNINA2 - a.a. 2009/1026
ISTRUZIONI DI CONTROLLO
Le istruzioni di controllo permettono di pilotare il
flusso di esecuzione delle istruzioni all’interno di un
programma, altrimenti puramente sequenziale.
Esempio:
IF x > 0,
esegui la prossima istruzione,
ELSE
termina l’esecuzione del programma.
LINGUAGGI DI
PROGRAMMAZIONE: LE BASI
-
Andrea Prevete - UNINA2 - a.a. 2009/1027
LINGUAGGI DI
PROGRAMMAZIONE: LE
BASI
-
Andrea Prevete - UNINA2 - a.a. 2009/1028
LINGUAGGI DI
PROGRAMMAZIONE: LE
BASI
-
Andrea Prevete - UNINA2 - a.a. 2009/1029
LINGUAGGI DI
PROGRAMMAZIONE: LE
BASI
-
Andrea Prevete - UNINA2 - a.a. 2009/1030
LINGUAGGI DI
PROGRAMMAZIONE: LE
BASI
-
Andrea Prevete - UNINA2 - a.a. 2009/1031
LINGUAGGI DI
PROGRAMMAZIONE: LE
BASI
-
Andrea Prevete - UNINA2 - a.a. 2009/1032
LINGUAGGI DI
PROGRAMMAZIONE: LE
BASI
ESPR?
CMD2 CMD1
THEN (TRUE!)ELSE (FALSE!)
-
Andrea Prevete - UNINA2 - a.a. 2009/1033
LINGUAGGI DI
PROGRAMMAZIONE: LE
BASI
-
Andrea Prevete - UNINA2 - a.a. 2009/1034
LINGUAGGI DI
PROGRAMMAZIONE: LE
BASI
-
Andrea Prevete - UNINA2 - a.a. 2009/1035
LINGUAGGI DI
PROGRAMMAZIONE: LE
BASI
-
Andrea Prevete - UNINA2 - a.a. 2009/1036
LINGUAGGI DI
PROGRAMMAZIONE: LE
BASI
BESPR?
.. continua!
CMD1
TRUE
FALSE
CMDn
-
Andrea Prevete - UNINA2 - a.a. 2009/1037
LINGUAGGI DI
PROGRAMMAZIONE: LE
BASI
-
Andrea Prevete - UNINA2 - a.a. 2009/1038
LINGUAGGI DI
PROGRAMMAZIONE: LE
BASI
.. continua!
TRUE
FALSEBESPR?
CMD1
CMDn
-
Andrea Prevete - UNINA2 - a.a. 2009/1039
LINGUAGGI DI
PROGRAMMAZIONE: LE
BASI
-
Andrea Prevete - UNINA2 - a.a. 2009/1040
LINGUAGGI DI
PROGRAMMAZIONE: LE
BASI
.. continua!
TRUE
FALSEN
-
Andrea Prevete - UNINA2 - a.a. 2009/1041
LINGUAGGI DI
PROGRAMMAZIONE: LE
BASI
-
Andrea Prevete - UNINA2 - a.a. 2009/1042
LINGUAGGI DI
PROGRAMMAZIONE: LE
BASI
-
Andrea Prevete - UNINA2 - a.a. 2009/1043
LINGUAGGI DI
PROGRAMMAZIONE: LE
BASI
-
Andrea Prevete - UNINA2 - a.a. 2009/1044
LINGUAGGI DI
PROGRAMMAZIONE: LE
BASI
-
Andrea Prevete - UNINA2 - a.a. 2009/1045
LINGUAGGI DI
PROGRAMMAZIONE: LE
BASI
-
Andrea Prevete - UNINA2 - a.a. 2009/1046
LINGUAGGI DI
PROGRAMMAZIONE: LE
BASI