Linguaggi di programmazione

21
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 Elaboratore Elettronico Dati Input Output Risultati

Transcript of Linguaggi di programmazione

Page 1: 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

Page 2: Linguaggi di programmazione

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

Page 3: Linguaggi di programmazione

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

Page 4: Linguaggi 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.

Page 5: Linguaggi di programmazione

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

Page 6: Linguaggi di programmazione

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

Page 7: Linguaggi di programmazione

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!

Page 8: Linguaggi di programmazione

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,...

Page 9: Linguaggi di programmazione

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)

Page 10: Linguaggi di programmazione

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

Page 11: Linguaggi di programmazione

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

Page 12: Linguaggi di programmazione

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

Page 13: Linguaggi di programmazione

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

Page 14: Linguaggi di programmazione

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

Page 15: Linguaggi di programmazione

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

Page 16: Linguaggi di programmazione

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.

Page 17: Linguaggi di programmazione

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

Page 18: Linguaggi di programmazione

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

Page 19: Linguaggi di programmazione

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

Page 20: Linguaggi di programmazione

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

Page 21: Linguaggi di programmazione

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.