Linguaggi di programmazione
Transcript of Linguaggi di programmazione
Linguaggi di programmazione
Fondamenti di Informatica 2
Programmazione
L’attività con cui si predispone l’elaboratore ad eseguire un particolare insieme di azioni su particolari dati, allo scopo di risolvere un problema
ElaboratoreElettronico
Dati
Input Output
Risultati
Fondamenti di Informatica 3
Linguaggio di programmazione
Insieme di regole per la descrizione formale di un algoritmo eseguibile da un calcolatore:
Lessico (alfabeto): insieme dei termini disponibili
Sintassi: forma delle frasi
Semantica: significato delle frasi
Fondamenti di Informatica 4
Algoritmi, programmi e calcolatori
Ogni elaboratore è una macchina in grado di eseguire azioni elementari su oggetti detti DATI
L’esecuzione delle azioni è richiesta all’elaboratore tramite comandi elementari chiamati ISTRUZIONI espresse mediante un opportuno formalismo: il LINGUAGGIO DI PROGRAMMAZIONE
La formulazione testuale di un algoritmo in un linguaggio comprensibile ad un elaboratore è detta PROGRAMMA
Fondamenti di Informatica 5
Programma
Un programma è un testo scritto in accordo alla sintassi e alla semantica di un linguaggio di programmazione
Un programma è la formulazione testuale, in un certo linguaggio di programmazione, di un algoritmo che risolve un dato problema
È composto da un numero finito di istruzioniOgni istruzione descrive una operazione
Fondamenti di Informatica 6
Algoritmo e programma
Passi per la risoluzione di un problema:Individuazione di un procedimento risolutivoScomposizione del procedimento in un insieme ordinato di azioni ALGORITMORappresentazione dei dati e dell’algoritmo attraverso un formalismo comprensibile dal calcolatore PROGRAMMA
Problema Algoritmo Programma
Metodo risolutivo
Linguaggio di programmazione
Fondamenti di Informatica 7
Compiti del programmatore
Analizzare il problema riducendolo in termini astratti, eliminando ogni componente non indispensabile e formulando un modello del problema.
Individuare una strategia risolutiva e ricondurla ad un algoritmo.
Codificare l’algoritmo in modo tale da renderlo comprensibile al calcolatore.
Analizzare il risultato dell’elaborazione evidenziando eventuali errori nella formulazione del problema, nella strategia risolutiva, nella codifica dell’algoritmo.
Fondamenti di Informatica 8
Competenze ed abilità del programmatore
Deve essere in grado di capire i problemi e schematizzarli, distinguendone le diverse componenti (dati in input, parametri del problema, dati in output).
Deve essere in grado di risolvere problemi mediante un approccio algoritmico, individuando gli aspetti del problema che possano essere risolti reiterando più volte operazioni simili.
Deve conoscere i metodi fondamentali di risoluzione dei problemi, gli approcci più comuni, le strade notoriamente meno convenienti.
Deve conoscere a fondo le caratteristiche e le capacità del calcolatore.
Deve essere in grado di comunicare con il calcolatore: ne deve conoscere il linguaggio.
Fondamenti di Informatica 9
Linguaggi di programmazione
Classificati rispetto alle caratteristiche principali:potere espressivo che influenza lo stile di programmazione
Fondamenti di Informatica 10
Linguaggi
Diversi tipi di linguaggi:ImperativiFunzionaliDichiarativiA oggetti
Tutti basati sulla traduzione nell'unico linguaggio eseguibile dal calcolatore: il Linguaggio Macchina
Fondamenti di Informatica 11
Linguaggio Macchina
Insieme di istruzioni eseguibili dalla CPU
Dipende dalla CPU:cablata al suo interno, ogni istruzione genera una sequenza di segnali di controllo
Linguaggio di basso livellosi può accedere direttamente alle funzionalità di base del calcolatore
Fondamenti di Informatica 12
Linguaggio Macchina
Complesso da utilizzare:ogni istruzione esegue un'operazione semplicissimaesistono librerie con procedure generali
Gli altri linguaggi vengono “convertiti” in sequenze di istruzioni in linguaggio macchina
Fondamenti di Informatica 13
Linguaggio Macchina
Il Linguaggio Macchina è estremamente efficiente
I programmi sono:più velocipiù corti… ma più complessi
Fondamenti di Informatica 14
Linguaggi - basso livello
Il linguaggio macchina specifica solo le operazioni che l'elaboratore può eseguire
sintattica molto elementare"diverso per ogni processore
dipende dalle caratteristiche architetturali della CPU
E' più orientato alla macchina che ai problemi da trattareè infatti definito di "basso livello“
Le istruzioni devono essere espresse come sequenze di bit!
Fondamenti di Informatica 15
Linguaggio Macchina
La scrittura è complessa:istruzioni formate da stringhe di 1 e 0: quindi è necessario un insieme di simboli (Linguaggio Assembly)
per referenziare le locazioni di memoria è necessario avere delle etichette
necessario commentare ogni istruzione
Fondamenti di Informatica 16
Linguaggi - basso livello
Una prima evoluzione è stata l'introduzione di linguaggi simbolici: linguaggi assemblativi (assembly)
ancora orientati alla macchina e non ai problemipiù immediati da utilizzaredefiniscono variabili, simboli,...
Fondamenti di Informatica 17
Linguaggi - alto livello
Altri linguaggi sono basati su:la descrizione del problema in modo intuitivo, dimenticandosi che verranno eseguiti da un calcolatoreobiettivo: fornire un mezzo espressivo per specificare all'elaboratore il compito da eseguire
Fondamenti di Informatica 18
Linguaggi - alto livello
Caratteristiche:ognuno ha i propri paradigmi che garantiscono forme espressive appropriate per alcuni problemi specificiquesta specificità ha favorito la loro proliferazione (fenomeno intrinseco alla natura del linguaggio come forma di comunicazione)
Fondamenti di Informatica 19
Linguaggi
La programmazione a basso livello è più ardua e meno intuitiva, ma consente di sviluppare programmi efficienti.
Ad alto livello la programmazione è più “naturale” e rapida, ma è possibile che non consenta di produrre software efficiente.
Programmazione a basso livello
Programmazione ad alto livello
Efficienza del programma
Facilità e velocità di programmazione
Fondamenti di Informatica 20
Tipologie di linguaggi
Possiamo aggregare i numerosi linguaggi di programmazione esistenti (ad alto livello) sulla base del modello astratto di programmazione che sottintendono e che è necessario adottare per utilizzarli.
Linguaggi di programmazione
Imperativi Dichiarativi
ProceduraliC, Pascal, Fortran
Ad oggetti
C++, Java
Paralleli Funzionali
Lisp
Logici
Prolog
Fondamenti di Informatica 21
Linguaggi Imperativi
permettono di descrivere operazioni più complesse di quelle che l'elaboratore può eseguire direttamentelivello di astrazione più altorisalgono agli anni '50detti di alto livello di tipo imperativoEs: Basic, Fortran, Pascal, C
Fondamenti di Informatica 22
Linguaggi Imperativi
Caratteristiche:di utilizzo più sempliceindipendenti dall'elaboratorepurtroppo ancora legati al modello di VonNeumann:
i programmi sono ancora una sequenza di istruzioni; l'evoluzione del calcolo è costituita da una variazione dello stato della memoria
Fondamenti di Informatica 23
Linguaggi Imperativi
Eseguono 3 tipi di operazioni:trasferimento datioperazioni aritmetichealterazione del flusso del programma
Fondamenti di Informatica 24
Linguaggi Funzionali
Non sono legati al modello di Von Neumann ma al concetto di programmazione funzionaleIl primo linguaggio funzionale:
Lisp (List Processing), fine anni '50caratteristiche di manipolazione agevole di informazioni di tipo simbolico
Fondamenti di Informatica 25
Linguaggi Funzionali
Differenze con i linguaggi imperativi:il calcolo è basato sul calcolo di valori e non sull'assegnamento di valori a variabilibasato su valori e non su effettiil risultato è il risultato di una funzione, non l'effetto causato dalla esecuzione di una sequenza di operazioni
Fondamenti di Informatica 26
Linguaggi Logici
Basati sulla logicaobiettivo: formalizzare il ragionamentocaratterizzati da meccanismi deduttivi
Programmare significa:descrivere il problema con formule del linguaggiointerrogare il sistema, che effettua deduzioni sulla base delle definizioni
Fondamenti di Informatica 27
Linguaggi Logici
Programmazione:semplice (occorre solo definire la propria conoscenza del problema)avviene tramite una formulazione dichiarativa
Esempio: Prolog
Fondamenti di Informatica 28
Linguaggi a Oggetti
Sono nati di recenteFavoriscono la modularità ed il riutilizzo del codiceModellazione del problema da risolvere come un insieme di oggetti che si scambiano messaggiEs: C++, Java
Fondamenti di Informatica 29
Traduzione dei programmi
Affinchè un programma scritto in un qualsiasi linguaggio di programmazione sia comprensibile (e quindi eseguibile) da un calcolatore, occorre tradurlo dal linguaggio originario al linguaggio della macchina
Questa operazione viene normalmente svolta da speciali programmi detti traduttori
Fondamenti di Informatica 30
Traduzione di un programma
Il traduttore converte:Il testo di un programma scritto in un particolare linguaggio di programmazione (sorgente) …… nella corrispondente rappresentazione in linguaggio macchina (programma eseguibile)
sorgente
…X=X+1;If X>0 ……
eseguibile
0010100…01001..10010…
traduzione
Fondamenti di Informatica 31
Compilatori e Interpreti
Esistono due categorie di traduttori:
i compilatori: traducono l’intero programma (senza eseguirlo) e producono in uscita il programma convertito in linguaggio macchina
gli interpreti: traducono ed eseguono immediatamente ogni singola istruzione del programma sorgente
Fondamenti di Informatica 32
Interprete
L’ interprete: itera più volte questo processoLegge un’istruzione del programma “sorgente”Traduce l’istruzione in linguaggio macchinaEsegue l’istruzionePassa all’interpretazione dell’istruzione successiva
Al termine di questa operazione, del programma in linguaggio macchina non rimane alcuna traccia (la traduzione non viene memorizzata)Se il programma torna più volte su una stessa istruzione, questa verrà tradotta (ed eseguita) ogni volta.È necessario disporre dell’interprete per poter eseguire il programma.
Fondamenti di Informatica 33
Compilatore
Compilatore: esegue una sola volta il processoLegge tutte le istruzioni del programma “sorgente” e le traduce in linguaggio macchina.Memorizza su disco il programma “eseguibile” tradotto in linguaggio macchina.
Al termine della compilazione avremo un programma eseguibile in linguaggio macchina.La traduzione di ogni istruzione del programma avviene una sola volta, anche se una stessa istruzione viene ripetuta più volte all’interno del programma.Non ho bisogno di avere il compilatore ed il sorgente per eseguire il programma: mi basta il programma eseguibile
Fondamenti di Informatica 34
Compilatori e Interpreti
Nel caso del compilatore, lo schema precedente viene percorso una volta sola, prima dell’esecuzione
Nel caso dell’interprete, lo schema viene invece attraversato tante volte quante sono le istruzioni che compongono il programma
sorgente
…X=X+1;If X>0 ……
eseguibile
0010100…01001..10010…
traduzione
esecuzione
Fondamenti di Informatica 35
Compilatori e Interpreti
Tipicamente, l’esecuzione di un programma compilato
è più velocedell’esecuzione di un programma interpretato
Fondamenti di Informatica 36
Esecuzione dei programmi
Nel caso dei compilatori, l'esecuzione di un programma scritto con un linguaggio ad alto livello è preceduta dai seguenti passi:
1. traduzione in linguaggio macchina2. collegamento con programmi di supporto
(calcoli, comunicazione con periferiche,…)3. caricamento in memoria
Fondamenti di Informatica 37
Traduzione in linguaggio macchina: compilatore
Viene suddivisa in 2 passi:analisi (lessicale, grammaticale, contestuale)trasformazione del programma sorgente in programma oggetto (forma più vicina al linguaggio macchina):
creazione tabella simboliottimizzazioni (rimozione ripetizioni, eliminazione cicli, sfruttamento registri,…); livelli di ottimizzazione
Fondamenti di Informatica 38
Collegamento con programmi di supportolinker
Il codice oggetto così formato:può ancora contenere dei simboli irrisolti
riferimenti esterni a programmi di servizio (accesso alle periferiche, calcoli matematici,...)
contiene indirizzi relativiIl linker serve per collegare diversi moduli oggetto, e formare un unico programma eseguibile
Fondamenti di Informatica 39
Caricamento in memoria: loader
Il Loader serve per caricare in memoria un programmaNel caricamento vengono fissati tutti gli indirizzi relativi
variabili, salti, …Vengono caricati anche i moduli di supporto, se necessari
Fondamenti di Informatica 40
Costruzione “manuale”
In passato, la costruzione dell’eseguibile si faceva“a mano”, attivando compilatore e linker dalla linea di comando del sistema operativo (DOS, Unix, ...)
C:\PROVA> gcc -c f1.c
(genera f1.obj)
C:\PROVA> ld -o prog.exe f1.obj –lc
(genera prog.exe)
Eseguibile da produrre
File oggetto
Libreria di sistema C
Fondamenti di Informatica 41
Ambienti Integrati
Oggi, gli ambienti di lavoro integrati (IDE – Integrated Development Environments)automatizzano la procedura:
compilano i file sorgente (se e quando necessario)invocano il linker per costruire l’eseguibile
ma per farlo devono sapere:quali file sorgente costituiscono l’applicazioneil nome dell’eseguibile da produrre.