Linguaggi di Programmazione - disi.unitn.itdisi.unitn.it/~sebe/info/05-linguaggi.pdf · Abbiamo...

22
Informatica 1 / 22 Linguaggi di Programmazione

Transcript of Linguaggi di Programmazione - disi.unitn.itdisi.unitn.it/~sebe/info/05-linguaggi.pdf · Abbiamo...

Page 1: Linguaggi di Programmazione - disi.unitn.itdisi.unitn.it/~sebe/info/05-linguaggi.pdf · Abbiamo accennato diagrammi a blocchi... ... partire dai simboli del linguaggio ... Approccio

Informatica 1 / 22

Linguaggi di Programmazione

Page 2: Linguaggi di Programmazione - disi.unitn.itdisi.unitn.it/~sebe/info/05-linguaggi.pdf · Abbiamo accennato diagrammi a blocchi... ... partire dai simboli del linguaggio ... Approccio

Linguaggi di Programmazione

❖ Linguaggi diProgrammazione

❖ Il Linguaggio C

❖ Anatomia di unProgramma C

❖ Funzioni eVariabili in C

Informatica 2 / 22

● Necessita di esprimere un algoritmo in modo formale

✦ Abbiamo accennato diagrammi a blocchi...✦ ...Ma esistono anche molti altri modi!

● Per “dare in pasto” ad un computer un algoritmo, vadescritto tramite un linguaggio di programmazione

✦ Evitare ambiguita ed imprecisioni✦ Descrivere completamente ed in modo preciso un

algoritmo

● Cos’e un linguaggio? Cercare sul vocabolario...

Page 3: Linguaggi di Programmazione - disi.unitn.itdisi.unitn.it/~sebe/info/05-linguaggi.pdf · Abbiamo accennato diagrammi a blocchi... ... partire dai simboli del linguaggio ... Approccio

Definizione Formale di Linguaggio

❖ Linguaggi diProgrammazione

❖ Il Linguaggio C

❖ Anatomia di unProgramma C

❖ Funzioni eVariabili in C

Informatica 3 / 22

● Per definire in modo formale un linguaggio, occorrespecificare:

✦ Quali parole fanno parte del linguaggio (Lessico)✦ Come costruire frasi “grammaticalmente corrette” a

partire dai simboli del linguaggio (Sintassi)✦ Come assegnare un significato univoco e ben

specificato a frasi sintatticamente corrette(Semantica)

● Non ha senso provare a creare frasi sintatticamentecorrette con simboli che non fanno parte del linguaggio

● Non ha senso interrogarsi sul significato di una frase nonsintatticamente corretta

Page 4: Linguaggi di Programmazione - disi.unitn.itdisi.unitn.it/~sebe/info/05-linguaggi.pdf · Abbiamo accennato diagrammi a blocchi... ... partire dai simboli del linguaggio ... Approccio

Defininizione di Linguaggio - 2

❖ Linguaggi diProgrammazione

❖ Il Linguaggio C

❖ Anatomia di unProgramma C

❖ Funzioni eVariabili in C

Informatica 4 / 22

● Linguaggio di programmazione: costuito, come ogni altrolinguaggio, da:

✦ Un alfabeto di simboli

■ Simboli con cui vengono costruite parole e frasi

✦ Un insieme di regole sintattiche per la costruzione difrasi corrette

✦ Un insieme di regole lessicali per associare significatoalle frasi

■ Regole per la costruzione e l’uso corretto delleparole e delle frasi del linguaggio

● In altre parole: insieme di parole chiave, costrutti e lorosignificati

Page 5: Linguaggi di Programmazione - disi.unitn.itdisi.unitn.it/~sebe/info/05-linguaggi.pdf · Abbiamo accennato diagrammi a blocchi... ... partire dai simboli del linguaggio ... Approccio

Linguaggi di Programmazione di AltoLivello

❖ Linguaggi diProgrammazione

❖ Il Linguaggio C

❖ Anatomia di unProgramma C

❖ Funzioni eVariabili in C

Informatica 5 / 22

● Parole chiave: possibilmente con significato in inglese

✦ Ma agli informatici piacciono molto contrazioni eacronimi...

✦ Esempio: Integer → int

● Costrutti: da programmazione strutturata

✦ Sequenza✦ Ciclo✦ Selezione

● Significati: il piu possibile intuitivi

Page 6: Linguaggi di Programmazione - disi.unitn.itdisi.unitn.it/~sebe/info/05-linguaggi.pdf · Abbiamo accennato diagrammi a blocchi... ... partire dai simboli del linguaggio ... Approccio

Linguaggi di Programmazione di BassoLivello

❖ Linguaggi diProgrammazione

❖ Il Linguaggio C

❖ Anatomia di unProgramma C

❖ Funzioni eVariabili in C

Informatica 6 / 22

● Parole chiave: codici mnemonici

✦ Direttamente associabili ad istruzioni macchina✦ Ancora: contrazioni e acronimi!

■ addl %eax, %eax■ cmpl $9, -4(%ebp), jle .L3

● Costrutti: solo sequenze e salti

✦ Salti incondizionati (jmp) o condizionali (jle .L3)✦ No cicli e selezioni: implementabili tramite salti!

● Spaghetti programming???

✦ Il codice di basso livello deve essere facilmenteinterpretabile dal computer, non da esseri umani!!!

Page 7: Linguaggi di Programmazione - disi.unitn.itdisi.unitn.it/~sebe/info/05-linguaggi.pdf · Abbiamo accennato diagrammi a blocchi... ... partire dai simboli del linguaggio ... Approccio

Conversione fra Alto e Basso Livello

❖ Linguaggi diProgrammazione

❖ Il Linguaggio C

❖ Anatomia di unProgramma C

❖ Funzioni eVariabili in C

Informatica 7 / 22

● Linguaggio di programmazione: lessico, sintassi esemantica ben definiti

✦ Conversione alto/basso puo essere automatica✦ Programma “traduttore”

● Conversione da file testo (codifica ASCII del programma)a file binario (eseguibile)

✦ Passaggio attraverso linguaggio di basso livello“intermedio” (Assembly)

c = a + b ; ⇒

movl 12(%ebp ) , %eaxmovl 8(%ebp ) , %edxaddl %edx , %eaxmovl %eax , c

Page 8: Linguaggi di Programmazione - disi.unitn.itdisi.unitn.it/~sebe/info/05-linguaggi.pdf · Abbiamo accennato diagrammi a blocchi... ... partire dai simboli del linguaggio ... Approccio

Il “Traduttore”

❖ Linguaggi diProgrammazione

❖ Il Linguaggio C

❖ Anatomia di unProgramma C

❖ Funzioni eVariabili in C

Informatica 8 / 22

● Traduzione da linguaggio ad alto livello ad assembly e poicodice macchina

● Puo avvenire in vari modi:

✦ Compilatore: trasforma file testo in file eseguibili✦ Interprete: trasforma il programma ad alto livello

istruzione per istruzione, durante l’esecuzione

● Compilatore: 2 fasi (compilazione poi esecuzione)

✦ Il programma generato e piu efficiente

● Interprete: conversione ed esecuzione intercalate

✦ Piu flessibile✦ Sempre necessario per eseguire un programma

Page 9: Linguaggi di Programmazione - disi.unitn.itdisi.unitn.it/~sebe/info/05-linguaggi.pdf · Abbiamo accennato diagrammi a blocchi... ... partire dai simboli del linguaggio ... Approccio

Compilatori vs Interpreti

❖ Linguaggi diProgrammazione

❖ Il Linguaggio C

❖ Anatomia di unProgramma C

❖ Funzioni eVariabili in C

Informatica 9 / 22

● Conversione di programmi da linguaggio ad alto livello alinguaggio a basso livello → equivalente a traduzione dilinguaggi naturali

● Se devo comunicare con persone che parlano un’altralingua...

✦ Posso scrivere un testo in italiano, farlo tradurre,spedirlo all’altra persona ed attendere una risposta(tradotta)

✦ Posso ricorrere ad un traduttore simultaneo, chetraduce per l’altra persona quel che dico man manoche parlo

● Nel primo caso usiamo un compilatore (genera unaversione tradotta del testo), nel secondo caso uninterprete (traduzione intercalata con la comunicazione)

Page 10: Linguaggi di Programmazione - disi.unitn.itdisi.unitn.it/~sebe/info/05-linguaggi.pdf · Abbiamo accennato diagrammi a blocchi... ... partire dai simboli del linguaggio ... Approccio

Linguaggio C - Un po’ di Storia

❖ Linguaggi diProgrammazione

❖ Il Linguaggio C

❖ Anatomia di unProgramma C

❖ Funzioni eVariabili in C

Informatica 10 / 22

● Sviluppato agli inizi anni ’70

✦ Kernighan & Ritchie✦ Legato alla storia di Unix (Thompson)✦ Sviluppato per riscrivere Unix usando linguaggi ad

alto livello

● Dalle ceneri di un progetto morto (Multics)● Deriva dal linguaggio “B”...

✦ ...Che e una versione semplificata di BCPL

● Sviluppato da programmatori per programmatori● Evoluto negli anni (standard attuale: C99... Anzi: C11!)

Page 11: Linguaggi di Programmazione - disi.unitn.itdisi.unitn.it/~sebe/info/05-linguaggi.pdf · Abbiamo accennato diagrammi a blocchi... ... partire dai simboli del linguaggio ... Approccio

Il Linguaggio C - Caratteristiche

❖ Linguaggi diProgrammazione

❖ Il Linguaggio C

❖ Anatomia di unProgramma C

❖ Funzioni eVariabili in C

Informatica 11 / 22

● Approccio pragmatico alla programmazione● Abbastanza potente da poter scrivere un intero Sistema

Operativo...● ...Ma allo stesso tempo semplice● Permette una buona produttivita● Se usato bene, permette di scrivere programmi chiari,

leggibili e mantenibili

✦ Se usato male... Meglio non dire niente✦ Costo della flessibilita

● Permette programmazione strutturata (ma non la forza)● Permette di scomporre grossi progetti software in moduli

Page 12: Linguaggi di Programmazione - disi.unitn.itdisi.unitn.it/~sebe/info/05-linguaggi.pdf · Abbiamo accennato diagrammi a blocchi... ... partire dai simboli del linguaggio ... Approccio

Linguaggio C - Piu nei Dettagli

❖ Linguaggi diProgrammazione

❖ Il Linguaggio C

❖ Anatomia di unProgramma C

❖ Funzioni eVariabili in C

Informatica 12 / 22

● Permette di raggruppare istruzioni/operazioni in blocchi● Fornisce un costrutto di selezione (if()) e vari costrutti

per i cicli (while(), for(), do ... while())● Permette di specificare chiaramente l’insieme di

definizione delle variabili tramite il concetto di tipo

✦ Buon numero di tipi predefiniti, componibili fra loro

● Permette di gestire in modo avanzato la memoria(puntatori, allocazione dinamica, ...)

● Operazioni “complesse” non fanno parte del linguaggioma sono demandate a librerie

Page 13: Linguaggi di Programmazione - disi.unitn.itdisi.unitn.it/~sebe/info/05-linguaggi.pdf · Abbiamo accennato diagrammi a blocchi... ... partire dai simboli del linguaggio ... Approccio

Il Linguaggio C in una Slide

❖ Linguaggi diProgrammazione

❖ Il Linguaggio C

❖ Anatomia di unProgramma C

❖ Funzioni eVariabili in C

Informatica 13 / 22

● Un programma C e composto da funzioni e variabili● Una variabile memorizza valori di un certo tipo

(appartenenti ad un insieme di definizione specificato daltipo)

● Una funzione e composta da istruzioni che specificano leoperazioni da compiere

✦ Una funzione puo invocare altre funzioni✦ Quando e invocata, una funzione puo ricevere una

lista di valori (parametri o argomenti)✦ Simili a variabili inizializzate da chi invoca la funzione✦ Al termine, una funzione puo ritornare un valore

Page 14: Linguaggi di Programmazione - disi.unitn.itdisi.unitn.it/~sebe/info/05-linguaggi.pdf · Abbiamo accennato diagrammi a blocchi... ... partire dai simboli del linguaggio ... Approccio

Anatomia di un Programma C

❖ Linguaggi diProgrammazione

❖ Il Linguaggio C

❖ Anatomia di unProgramma C

❖ Funzioni eVariabili in C

Informatica 14 / 22

● In C, gli algoritmi sono modellati come funzioni

✦ Algoritmo: blocchi in sequenza o annidati...✦ Blocco: annidamento di blocchi o sequenza di

operazioni o blocchi...✦ In C, non solo operazioni, ma anche chiamate a

funzioni✦ Algoritmo come composto da “sottoalgoritmi”

● Programma → funzione principale (main)

✦ Nome e parametri stabiliti dallo standard C

● Altre funzioni definite dal compilatore

✦ Esempio: I/O - no operazioni ma funzioni

Page 15: Linguaggi di Programmazione - disi.unitn.itdisi.unitn.it/~sebe/info/05-linguaggi.pdf · Abbiamo accennato diagrammi a blocchi... ... partire dai simboli del linguaggio ... Approccio

La Funzione main()

❖ Linguaggi diProgrammazione

❖ Il Linguaggio C

❖ Anatomia di unProgramma C

❖ Funzioni eVariabili in C

Informatica 15 / 22

● Eseguendo un programma, il sistema comincia sempredalla funzione chiamata main()

✦ Ogni programma deve sempre contenere almeno unafunzione, chiamata main()

● Valore di ritorno: deve essere sempre di tipo int(insieme di definizione: numeri interi. 16, 32 o 64 bit perintero, dipende dalla CPU)

✦ Valore di ritorno 0: il programma e terminato senzaerrori

● Parametri: permettono di capire i parametri passati alprogramma a linea di comando.

✦ Per ora non ci interessano: usiamo int main()

Page 16: Linguaggi di Programmazione - disi.unitn.itdisi.unitn.it/~sebe/info/05-linguaggi.pdf · Abbiamo accennato diagrammi a blocchi... ... partire dai simboli del linguaggio ... Approccio

Le Funzioni di I/O

❖ Linguaggi diProgrammazione

❖ Il Linguaggio C

❖ Anatomia di unProgramma C

❖ Funzioni eVariabili in C

Informatica 16 / 22

● In un generico algoritmo si considerano operazioni diI/O...

✦ ...Ma il linguaggio C non prevede istruzioni/operazionidi I/O

✦ Ingresso e uscita sono implementati tramite funzioni

● Esempio: printf()

✦ int printf(”stringa”, ...)✦ Stampa ”stringa” sullo schermo, ma puo fare di piu

■ Stampare il valore di variabili

✦ In C, stringhe racchiuse fra virgolette

■ Esempio: "Hi, there!"

Page 17: Linguaggi di Programmazione - disi.unitn.itdisi.unitn.it/~sebe/info/05-linguaggi.pdf · Abbiamo accennato diagrammi a blocchi... ... partire dai simboli del linguaggio ... Approccio

Blocchi di Codice

❖ Linguaggi diProgrammazione

❖ Il Linguaggio C

❖ Anatomia di unProgramma C

❖ Funzioni eVariabili in C

Informatica 17 / 22

● Un algoritmo strutturato e “scomponibile” in blocchi

✦ Blocchi concatenati o annidati

● In C, il simbolo “{” segna l’inizio di un blocco ed il simbolo“}” ne segnala la fine

✦ Ricorda: dopo un “{”, le righe che seguono vannoscritte piu a destra (4 spazi, 1 tab, ...)

✦ Col simbolo “}” si ritorna all’allineamento del “{”corrispondente

✦ Indentazione: permette di identificare visivamente ivari blocchi di codice in modo semplice!

● Blocchi usati per funzioni o cicli o selezioni

Page 18: Linguaggi di Programmazione - disi.unitn.itdisi.unitn.it/~sebe/info/05-linguaggi.pdf · Abbiamo accennato diagrammi a blocchi... ... partire dai simboli del linguaggio ... Approccio

Variabili

❖ Linguaggi diProgrammazione

❖ Il Linguaggio C

❖ Anatomia di unProgramma C

❖ Funzioni eVariabili in C

Informatica 18 / 22

● Variabile (n,v): n e il nome, v e il valore attuale

✦ Valore: elemento di un insieme detto insieme didefinizione della variabile

✦ I valori delle variabili sono specificati solo durantel’esecuzione dell’algoritmo

● Linguaggio di programmazione: nome variabile associatoad una o piu celle di memoria

✦ Quando e fatta / disfatta tale associazione?

■ Tempo di vita della variabile...

✦ Cosa contengono tali celle di memoria?

■ Insieme di definizione / Tipo della variabile...

✦ Inoltre: dove e visibile la variabile?

Page 19: Linguaggi di Programmazione - disi.unitn.itdisi.unitn.it/~sebe/info/05-linguaggi.pdf · Abbiamo accennato diagrammi a blocchi... ... partire dai simboli del linguaggio ... Approccio

Variabili in C

❖ Linguaggi diProgrammazione

❖ Il Linguaggio C

❖ Anatomia di unProgramma C

❖ Funzioni eVariabili in C

Informatica 19 / 22

● In C, le variabili vanno dichiarate (meglio: definite) primadi usarle

✦ Fuori da ogni blocco✦ All’inizio di un blocco

● tipo nome;

✦ Esempio int i;✦ Il tipo di una variabile ne specifica l’insieme di

definizione...✦ ...Vale a dire, come interpretare la sequenza di bit

contenuta nella memoria associata alla variabile

● Posizione della definizione (fuori da tutti i blocchi oall’inizio di un blocco) → tempo di vita e visibilita

Page 20: Linguaggi di Programmazione - disi.unitn.itdisi.unitn.it/~sebe/info/05-linguaggi.pdf · Abbiamo accennato diagrammi a blocchi... ... partire dai simboli del linguaggio ... Approccio

Funzioni in C

❖ Linguaggi diProgrammazione

❖ Il Linguaggio C

❖ Anatomia di unProgramma C

❖ Funzioni eVariabili in C

Informatica 20 / 22

● Caratterizzate da parametri (e loro insiemi di definizione)e insieme di definizione del risultato

✦ Possono avere effetti collaterali (esempio: printf())

● tipo nome(tipo parametro, ...)● seguito da un blocco (corpo della funzione)

✦ Esempio: int fattoriale(int n)✦ double discriminante(double a, double

b, double c)✦ Parametri non specificati: int main()✦ Nessun parametro: int esempio(void)✦ No valore di ritorno: void esempio2(int a)

Page 21: Linguaggi di Programmazione - disi.unitn.itdisi.unitn.it/~sebe/info/05-linguaggi.pdf · Abbiamo accennato diagrammi a blocchi... ... partire dai simboli del linguaggio ... Approccio

Definizione e Dichiarazione di Identificatori

❖ Linguaggi diProgrammazione

❖ Il Linguaggio C

❖ Anatomia di unProgramma C

❖ Funzioni eVariabili in C

Informatica 21 / 22

● Variabili e funzioni hanno un nome: Identificatore

✦ Case sensitive (int variabile e diverso da intVariabile)

✦ Composti da lettere, cifra e “ ”✦ Non possono cominciare con una cifra

● Dichiarazione: associa un identificatore ad una entita(variabile o funzione)

✦ Non “crea” realmente l’entita (quindi, non occorredescriverla appieno)

● Definizione: descrive come e fatta l’entita e la “crea”

✦ Per le variabili, spesso dichiarazione e definizionecoincidono

Page 22: Linguaggi di Programmazione - disi.unitn.itdisi.unitn.it/~sebe/info/05-linguaggi.pdf · Abbiamo accennato diagrammi a blocchi... ... partire dai simboli del linguaggio ... Approccio

Prototipi di Funzioni

❖ Linguaggi diProgrammazione

❖ Il Linguaggio C

❖ Anatomia di unProgramma C

❖ Funzioni eVariabili in C

Informatica 22 / 22

● Dichiarazione di funzione: prototipo

✦ Associa un identificatore ad una funzione✦ Specifica i parametri (con relativo insieme di

definizione) e l’insieme di definizione del valore diritorno della funzione

✦ Non descrive come la funzione e fatta

● Definizione di una funzione: include prototipo e corpo● Una funzione e invocabile solo se il prototipo e noto

✦ Ma... E printf("Hi there!!!\n");? Dove edichiarata printf()?

✦ Nel file stdio.h!!! Ecco a cosa serve #include<stdio.h>!!!