Linguaggi e ambienti di programmazione

Transcript

Linguaggi e ambienti di programmazione
Fondamenti d’Informatica 1
A.A. 2016/2017
Corsi di Laurea in Ing. Civile e Ing. per l’Ambiente e il Territorio
Docente: Giorgio Fumera
Università degli Studi di Cagliari
Linguaggi e ambienti di programmazione
Linguaggi di programmazione
I calcolatori sono in grado di “comprendere” ed eseguire solo
algoritmi codificati in linguaggio macchina (programmi).
Il linguaggio macchina è detto di basso livello, poiché le sue
istruzioni corrispondono a operazioni molto elementari e fanno
riferimento ai dettagli dell’organizzazione hardware di un calcolatore (indirizzi delle celle di memoria, registri della CPU, ecc.).
Le istruzioni dei programmi in linguaggio macchina devono essere
codificate a loro volta in binario. La loro rappresentazione
simbolica, usata per comodità dai programmatori (per es., ADD,
LOAD, JUMP), costituisce un linguaggio equivalente, detto
Assembly.
Linguaggi di programmazione
Per semplificare l’attività di programmazione, a partire dagli anni ’50
sono stati introdotti diversi linguaggi di alto livello, che consentono di
rappresentare gli algoritmi in una forma più vicina al linguaggio naturale
rispetto al linguaggio macchina.
Alcune caratteristiche dei linguaggi di alto livello:
I
non fanno esplicito riferimento agli indirizzi delle celle di memoria,
ma usano nomi simbolici (detti variabili)
I
indicano le istruzioni con termini in linguaggio naturale (per
esempio, if, while, for)
I
consentono di rappresentare espressioni aritmetiche composte da più
operazioni elementari con una notazione simile a quella usata in
matematica
I
consentono di rappresentare in modo semplice valori non numerici,
non direttamente rappresentabili in linguaggio macchina (per
esempio, sequenze di caratteri e vettori di numeri)
Linguaggi di alto livello
Esempi:
Fortran
(FORmula TRANslator )
I
Pascal
I
SmallTalk
I
Lisp (LISt Processor )
I
C++
I
Cobol (COmmon Business
Oriented Language)
I
Java
I
Python
I
Matlab
I
...
I
I
C
I
Basic
Linguaggi di alto livello
Ogni linguaggio di alto livello consente di rappresentare qualsiasi
algoritmo.
Ciascun linguaggio è stato però ideato con lo scopo di
rappresentare più facilmente alcuni tipi di algoritmi; per esempio:
I
FORTRAN: calcolo numerico
I
Lisp: intelligenza artificiale (elaborazione “simbolica”)
I
COBOL: gestione dati
I
C: ideato per la scrittura del sistema operativo Unix
I
Java: applicazioni Internet
I
Matlab: calcolo numerico matriciale
Linguaggi di alto livello
I linguaggi esistenti possono essere suddivisi (in modo non
mutuamente esclusivo) nelle seguenti categorie, in base al modo in
cui consentono di rappresentare gli algoritmi:
I
imperativi/procedurali: descrivono gli algoritmi come
sequenze di istruzioni (operazioni) da eseguire sui dati di
ingresso e sui risultati intermedi, per ottenere il risultato
desiderato
I
dichiarativi (logici, funzionali): “descrivono” il risultato che si
vuole ottenere, non come ottenerlo
I
orientati agli oggetti: rappresentano i dati come “oggetti”
appartenenti a “classi”, caratterizzate da certe “proprietà”
(operazioni eseguibili sulle loro istanze)
Dai linguaggi di alto livello al linguaggio macchina
Un programma scritto in un linguaggio di alto livello è detto
programma sorgente, e non è “comprensibile” (e quindi non è
eseguibile) da un calcolatore.
Per renderlo eseguibile è necessario tradurlo in linguaggio
macchina.
Il processo di traduzione può a sua volta essere descritto
attraverso un algoritmo: può quindi essere codificato in linguaggio
macchina ed eseguito dallo stesso calcolatore:
s = input()
somma = 0
for x in s:
s = s + x
print s
traduzione
programma sorgente
(linguaggio di alto livello)
00101011
01010010
10100100
01010100
01010100
programma eseguibile
(linguaggio macchina)
Linguaggi compilati e interpretati
Dal punto di vista del processo di traduzione, esistono due
categorie di linguaggi di alto livello:
I
linguaggi compilati: l’intero programma sorgente viene
tradotto in linguaggio macchina prima dell’esecuzione
(esempi: Fortran, C, C++, . . . )
I
linguaggi interpretati: ogni singola istruzione del programma
sorgente viene tradotta in linguaggio macchina e subito
eseguita, prima dell’elaborazione dell’istruzione successiva
(esempi: Lisp, Basic, Python, Matlab, . . . ); questo rende
l’esecuzione di programmi scritti in un linguaggio interpretato
più lenta rispetto ai linguaggi compilati
Ambienti di programmazione
Per ogni linguaggio di alto livello sono disponibili uno o più
ambienti di programmazione (o ambienti integrati di sviluppo –
integrated development environment): un insieme di programmi
che supportano gli utenti nello sviluppo dei propri programmi
(scrittura, verifica, esecuzione).
Componenti principali di un ambiente di programmazione:
I
editor : facilita la scrittura dei programmi (memorizzandoli in
file di testo), per esempio evidenziando con colori diversi le
diverse componenti (istruzioni, espressioni, ecc.)
I
compilatore o interprete: traduce i programmi in linguaggio
macchina (ed esegue le singole istruzioni, nel caso
dell’interprete)
I
debugger : facilita l’identificazione di eventuali errori (“bug”)