1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di...

37
1 I linguaggi di alto livello I linguaggi di alto livello Introduzione alla programmazione Introduzione alla programmazione Caratteristiche dei linguaggi di Caratteristiche dei linguaggi di programmazione programmazione I linguaggi di programmazione di alto I linguaggi di programmazione di alto livello livello Compilatori ed interpreti Compilatori ed interpreti L’arte della programmazione L’arte della programmazione Storia del linguaggio C Storia del linguaggio C Lo standard ANSI Lo standard ANSI Fondamenti di Informatica – a.a. Fondamenti di Informatica – a.a. 2008-09 2008-09 Fondamenti di Informatica – a.a. Fondamenti di Informatica – a.a. 2008-09 2008-09

Transcript of 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di...

Page 1: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

1

I linguaggi di alto livelloI linguaggi di alto livello

Introduzione alla programmazioneIntroduzione alla programmazioneCaratteristiche dei linguaggi di programmazioneCaratteristiche dei linguaggi di programmazione

I linguaggi di programmazione di alto livelloI linguaggi di programmazione di alto livello

Compilatori ed interpretiCompilatori ed interpreti

L’arte della programmazioneL’arte della programmazione

Storia del linguaggio CStoria del linguaggio CLo standard ANSILo standard ANSI

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Valued Acer Customer
I primi linguaggi di programmazione coincidevano con l’insieme delle istruzioni eseguibili dall’hardware. Le istruzioni hardware sono codificate in codice binario: ogni informazione è rappresentata, all’interno della macchina, come una sequenza di bit. LOAD 8 potrà essere rappresentata in una macchina reale come 00111000, dove 0011 è la rappresentazione interna del codice operativo LOAD -> Enorme sforzo programmativo richiesto per codificare algoritmi semplici. Dalla nascita dei primi calcolatori, si è cercato di diminuire lo sforzo ed aumentare la produttività dell’utente, anche a costo di caricare la macchina di maggiori compiti. La prima evoluzione dei linguaggi di programmazione ha portato ad una codifica di tipo simbolico, anziché binaria, dei programmi. Tali versioni simboliche dei linguaggi hardware sono note come linguaggi assemblatori, dal termine usato per indicare i programmi traduttori che, ricevendo come dato la versione simbolica di un programma, producono come risultato la corrispondente forma binaria direttamente eseguibile dalla macchina. Per la prima volta, con la nascita degli assembler, fu applicato il principio che è meglio risparmiare il tempo dell’uomo anche a costo di sprecare tempo-macchina (una parte del tempo è dedicata alla traduzione di programmi, non alla loro esecuzione diretta). Il passo successivo nell’evoluzione dei linguaggi di programmazione tese a rendere la codifica degli algoritmi il più possibile “vicina” al problema da risolvere anziché all’architettura della macchina destinata all’esecuzione del programma. Non a caso i primi due linguaggi di alto livello, FORTRAN e COBOL, hanno costrutti fortemente ispirati alla notazione usata per descrivere i problemi di maggior rilievo per il calcolo automatico degli anni '50, cioè l’elaborazione numerica e quella gestionale. Dopo il decennio pionieristico degli anni '50, gli anni '60 hanno visto, da un lato, un grande sforzo per razionalizzare la definizione e le tecniche di implementazione dei linguaggi, reso necessario dallo sviluppo quantitativamente impetuoso delle applicazioni (definizione dell’ALGOL 60, il capostipite dei moderni linguaggi, basato sui principi della programmazione strutturata), dall’altro, la proliferazione selvaggia, favorita dalle industrie, di nuovi linguaggi, sia general purpose che rivolti a specifici settori applicativi. Gli anni '70 vedono il fiorire dei linguaggi strutturati, quali il SIMULA 67, capostipite dei linguaggi Object-Oriented, l’ALGOL 68, ma soprattutto il PASCAL, primo esempio di prodotto di origine accademica che abbia conosciuto vasto successo ed applicazione anche nel mondo dell’industria. In modo simile, il C, concepito inizialmente come una sorta di assembler strutturato per trasportare facilmente UNIX, ha finito per diventare il linguaggio più affermato nella programmazione di sistema. Il periodo a cavallo tra gli anni '70 ed '80 è segnato da alcuni fatti apparentemente contraddittori. Da un lato viene lanciata dal Dipartimento della Difesa americano l’iniziativa per la definizione e la realizzazione di un nuovo linguaggio, che l’ente intende imporre come proprio standard. Nelle intenzioni dei progettisti, ADA dovrebbe rappresentare il punto di maturazione perfetta di tutti i principi di costruzione del software e dei relativi meccanismi linguistici elaborati negli anni precedenti. Dall’altro, si ha un fiorire di nuovi linguaggi tesi a rendere più gradevole ed efficiente la programmazione tradizionale e l’affermarsi dei linguaggi object-oriented. Tra i principali linguaggi ad oggetti attuali: C++, Visual BASIC, Java.
Page 2: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

2

Introduzione alla Introduzione alla programmazioneprogrammazione

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 3: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

3

Cos’è un linguaggioCos’è un linguaggio

Definizione 1 –Definizione 1 – Un linguaggio è un insieme di paroleinsieme di parole e di metodi di combinazione delle parolemetodi di combinazione delle parole usati e compresi da una comunità di personeÈ una definizione poco precisa perché…

…non evita le ambiguità dei linguaggi naturali…non si presta a descrivere processi computazionali automatici…non aiuta a stabilire proprietà

Definizione 2 –Definizione 2 – Il linguaggio è un sistema matematico che consente di rispondere a domande come:

quali sono le frasi lecite?si può stabilire se una frase appartiene al linguaggio?come si stabilisce il significato di una frase?quali sono gli elementi linguistici primitivi?

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 4: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

4

Lessico, sintassi e semanticaLessico, sintassi e semantica

LessicoLessico: l’insieme di regole formali per la scrittura di parole in un linguaggio

SintassiSintassi: l’insieme di regole formali per la scrittura di frasi in un linguaggio, che stabiliscono cioè la grammatica del linguaggio stesso

SemanticaSemantica: l’insieme dei significati da attribuire alle frasi (sintatticamente corrette) costruite nel linguaggio

NotaNota: una frase può essere sintatticamente corretta e tuttavia non avere significato!

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 5: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

5

Esempio: la sintassi di un numero Esempio: la sintassi di un numero naturalenaturale

Diagramma sintatticoDiagramma sintattico

<cifra-non-nulla> : 1|2|3|4|5|6|7|8|9

<cifra> : 0 | <cifra-non-nulla>

<naturale> : 0 | <cifra-non-nulla>{<cifra>}

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 6: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

6

Benché siano macchine in grado di compiere operazioni complesse, i calcolatori devono essere “guidati” per mezzo di istruzioni appartenenti ad un linguaggio specifico e limitato, a loro comprensibile

Un linguaggio di programmazione è costituito, come ogni altro tipo di linguaggio, da un alfabetoalfabeto, con cui viene costruito un insieme di parole parole chiavechiave (il vocabolario) e da un insieme di regole regole sintattichesintattiche per l’uso corretto delle parole del linguaggio

A livello hardware, i calcolatori riconoscono solo comandi semplici, del tipo copia un numero, addiziona due numeri, confronta due numeri

I linguaggi di programmazione:I linguaggi di programmazione:Cenni storiciCenni storici 1 1

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 7: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

7

I comandi realizzati in hardware definiscono il set di set di istruzioniistruzioni macchinamacchina e i programmi che li utilizzano direttamente sono i programmi in linguaggio linguaggio macchinamacchina

In linguaggio macchina… …ogni “operazione” richiede l’attivazione di numerose istruzioni base …qualunque entità, istruzioni, variabili, dati, è rappresentata da numeri binari: i programmi sono difficili da scrivere, leggere e manutenere

Il linguaggio macchina riflette l’organizzazione della macchina più che la natura del problema da risolvere

I linguaggi di programmazione: I linguaggi di programmazione: Cenni storiciCenni storici 2 2

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 8: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

8

Negli anni ‘50, tutti i programmi erano scritti in linguaggio macchina o in assemblyassembly

In assembly… …ogni istruzione è identificata da una sigla piuttosto che da un codice numerico…il riferimento alle variabili viene effettuato per mezzo di nomi piuttosto che mediante indirizzi di memoria

I programmi scritti in assembly necessitano di un apposito programma assemblatoreassemblatore per tradurre le istruzioni tipiche del linguaggio in istruzioni macchina

I linguaggi di programmazione:I linguaggi di programmazione:Cenni storiciCenni storici 3 3

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 9: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

9

Oggi si utilizza l’assembly solo se esistono vincoli stringenti sui tempi di esecuzione; viceversa, si usano linguaggi più vicini al linguaggio naturale, i linguaggi di alto livellolinguaggi di alto livelloI linguaggi di alto livello sono elementi intermedi di una varietà di linguaggi ai cui estremi si trovano il linguaggio macchina, da un lato, ed i linguaggi naturali, come l’italiano e l’inglese, dall’altro

I linguaggi di programmazione:I linguaggi di programmazione:Cenni storiciCenni storici 4 4

I linguaggi di programmazione differiscono comunque dai linguaggi naturali: sono infatti meno espressivi ma più precisiSono semplicisemplici e poveri poveri (poche parole chiave, poche regole), ma privi di privi di qualsiasi ambiguitàqualsiasi ambiguità

AstrazioneAstrazioneFondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 10: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

10

Astrazione Astrazione 1 1

In informatica si parla di programmazione a programmazione a basso livellobasso livello quando si utilizza un linguaggio molto vicino alla macchinaSi parla invece di programmazione di alto livelloprogrammazione di alto livello quando si utilizzano linguaggi più sofisticati ed astratti, slegati dal funzionamento fisico della macchina Si viene così a creare una gerarchia di linguaggi, dai meno evoluti (il linguaggio macchina o l’assembler) ai più evoluti (PascalPascal, PerlPerl, JavaJava, etc.)In questa gerarchia il linguaggiolinguaggio CC si pone ad un livello intermedio

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 11: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

11

Astrazione Astrazione 2 2

Linguaggi di alto livelloLinguaggi di alto livelloIl programmatore può astrarre dai dettagli legati all’architettura ed esprimere i propri algoritmi in modo simbolicoSono indipendenti dalla macchina hardware sottostante

Esistono, quindi, diversi livelli di astrazione:Linguaggio macchina e AssemblerLinguaggio macchina e Assembler

Implicano la conoscenza dettagliata delle caratteristiche della macchina (registri, dimensione dati, set di istruzioni)Semplici algoritmi implicano la specifica di molte istruzioni

Page 12: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

12

Evoluzione dei linguaggi di Evoluzione dei linguaggi di programmazioneprogrammazione

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 13: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

13

Consentono al programmatore di trattare oggetti complessi senza doversi preoccupare dei dettagli della particolare macchina sulla quale il programma viene eseguitoRichiedono un compilatorecompilatore o un interpreteinterprete che sia in grado di tradurre le istruzioni del linguaggio di alto livello in istruzioni macchina di basso livello, eseguibili dal calcolatoreUn compilatore è un programma traduttore simile ad un assemblatore, ma più complesso, infatti…

…esiste una corrispondenza biunivoca fra istruzioni in assembler ed istruzioni macchina…ogni singola istruzione di un linguaggio di alto livello corrisponde a molte istruzioni in linguaggio macchina: quanto più il linguaggio si discosta dal linguaggio macchina, tanto più il lavoro di traduzione del compilatore è difficile

Linguaggi di programmazione Linguaggi di programmazione di alto livello di alto livello 1 1

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 14: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

14

I linguaggi che non dipendono dall’architettura della macchina offrono due vantaggi fondamentali:

i programmatori non devono cimentarsi con i dettagli architetturali di ogni calcolatore

i programmi risultano più semplici da leggere e da modificare

portabilitàportabilità, leggibilitàleggibilità, manutenibilitàmanutenibilità

Linguaggi di programmazione Linguaggi di programmazione di alto livello di alto livello 2 2

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 15: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

15

Linguaggi di programmazione Linguaggi di programmazione di alto livello di alto livello 3 3

PortabilitàPortabilità: i programmi scritti per un calcolatore possono essere utilizzati su qualsiasi altro calcolatore, previa ricompilazione

LeggibilitàLeggibilità: la relativa similitudine con i linguaggi naturali rende i programmi più semplici, non solo da scrivere, ma anche da leggere

Manutenibilità:Manutenibilità: facilità nell’effettuare modifiche di tipo correttivo, perfettivo, evolutivo e adattivoLa possibilità di codificare algoritmi in maniera astratta si traduce in una migliore comprensibilità del codice e quindi in una più facile analisi di correttezzaanalisi di correttezza

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Valued Acer Customer
L’essenza della programmazione di alto livello, ovvero dell’uso di linguaggi di elevata potenza espressiva, risiede nella capacità di astrazione, cioè nella possibilità di prescindere dai dettagli considerati inessenziali ai fini della soluzione di un problema, favorendo con ciò la concentrazione sugli elementi fondamentali. Un linguaggio di programmazione deve fornire all'utente buoni meccanismi per definire autonomamente tutte le astrazioni di cui ha bisogno: il programmatore, deve disporre di strumenti sufficienti per spiegare al calcolatore tutte le operazioni che intende effettuare.La funzione svolta da un programma ben strutturato in un linguaggio di programmazione di alto livello può essere facilmente compresa da un lettore: i simboli e le istruzioni utilizzate si avvicinano più ai simboli ed alle istruzioni di uso comune che non a quelle interne del calcolatore.
Page 16: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

16

Eventuale svantaggio dell’uso dei linguaggi di alto livello è la riduzione di efficienza

È possibile utilizzare istruzioni macchina diverse per scrivere programmi funzionalmente equivalenti: il programmatore ha un controllo limitato sulle modalità con cui il compilatore traduce il codiceTuttavia… compilatori sofisticati ricorrono a trucchi di cui molti programmatori ignorano l’esistenza

La ragione fondamentale per decretare la superiorità La ragione fondamentale per decretare la superiorità dei linguaggi di alto livello consiste nel fatto che la dei linguaggi di alto livello consiste nel fatto che la maggior parte dei costi di produzione del software è maggior parte dei costi di produzione del software è localizzata nella fase di manutenzione, per la quale localizzata nella fase di manutenzione, per la quale leggibilità e portabilità sono crucialileggibilità e portabilità sono cruciali

Linguaggi di programmazioneLinguaggi di programmazionedi alto livello di alto livello 4 4

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 17: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

17

Possiamo aggregare i numerosi linguaggi di programmazione esistenti sulla base del modello modello astratto di programmazioneastratto di programmazione che sottintendono e che è necessario adottare per utilizzarli

Tipi di linguaggi di Tipi di linguaggi di programmazione programmazione di alto livello di alto livello 1 1

Linguaggi di Linguaggi di programmazionprogrammazion

ee

ImperativiImperativi DichiarativiDichiarativi

ProceduraliProcedurali(C, Pascal)(C, Pascal)

Ad oggettiAd oggetti(C++, Java)(C++, Java)

ParalleliParalleli FunzionaliFunzionali(Lisp)(Lisp)

LogiciLogici(Prolog)(Prolog)

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 18: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

18

Linguaggi imperativiLinguaggi imperativiIl modello computazionale è basato sul cambiamento di cambiamento di stato della memoriastato della memoria della macchinaÈ centrale il concetto di assegnazione di un valoreassegnazione di un valore ad una locazione di memoriaIl compito del programmatore è costruire una sequenza di assegnazioni che producano lo stato finale (in modo tale che questo rappresenti la soluzione del problema)

Linguaggi dichiarativiLinguaggi dichiarativiIl modello computazionale è basato sui concetti di funzione e relazionefunzione e relazioneIl programmatore non ragiona in termini di assegnazioni di valori, ma di relazioni tra entità e di valori di una funzione

Tipi di linguaggi di Tipi di linguaggi di programmazione programmazione di alto livello di alto livello 2 2

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 19: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

19

Sulla base dell’ambito in cui si colloca il problema da risolvere, è opportuno adottare un linguaggio piuttosto che un altro:

Calcolo scientificoCalcolo scientifico: Fortran, C

Intelligenza ArtificialeIntelligenza Artificiale: Prolog, Lisp, C

Applicazioni gestionaliApplicazioni gestionali: Cobol, SQL, C

Sistemi operativiSistemi operativi: Assembler, C

Applicazioni visualiApplicazioni visuali: C, Java, Visual Basic

Applicazioni WebApplicazioni Web: Java, PHP, ASP

Tipi di linguaggi di Tipi di linguaggi di programmazione programmazione di alto livello di alto livello 3 3

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 20: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

20

Compilatori ed interpreti – 1Compilatori ed interpreti – 1

Affinché un programma scritto in un qualsiasi linguaggio di programmazione sia comprensibile (e quindi eseguibile) da parte di un calcolatore, occorre tradurlo dal linguaggio originario al linguaggio della macchinaOgni traduttore è in grado di comprendere e tradurre un solo linguaggioIl traduttore converte il testo di un programma scritto in un particolare linguaggio di programmazione (sorgentesorgente) nella corrispondente rappresentazione in linguaggio macchina (programma eseguibileeseguibile)

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 21: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

21

Compilatori ed interpreti Compilatori ed interpreti – 2– 2

CompilatoreCompilatore: opera la traduzione di un programma sorgente (scritto in linguaggio di alto livello) in un programma oggetto direttamente eseguibile dal calcolatore

PRIMA si traduce tutto il programmaPOI si esegue la versione tradotta

InterpreteInterprete: traduce ed esegue il programma sorgente, istruzione per istruzione

Traduzione ed esecuzione sono intercalate

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 22: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

22

Compilatori ed interpreti Compilatori ed interpreti – 3– 3

Esempio di compilatoreEsempio di compilatoreDobbiamo sottoporre un curriculum, in inglese, ad una azienda, ma non conosciamo l’ingleseAbbiamo bisogno di un traduttore che traduca quanto scritto da noi dall’italiano all’inglese

contattiamo il traduttoreil traduttore riceve il testo da tradurreil traduttore fornisce il testo tradottopossiamo sottoporre il nostro curriculum all’azienda

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 23: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

Compilatori ed interpreti Compilatori ed interpreti – 4– 4

CompilatoreCompilatoreAnalisi lessicale tokenAnalisi sintattica albero sintattico

Analisi semantica tabella dei simboli

23Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 24: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

24

Compilatori ed interpreti Compilatori ed interpreti – 5– 5

Esempio di interpreteEsempio di interpreteDobbiamo incontrare un manager cinese per motivi di lavoro ma non conosciamo il cineseAbbiamo bisogno di un interprete che traduca il nostro dialogo

contattiamo l’interpreteparliamo in italiano, in presenza dell’interpretecontemporaneamentecontemporaneamente l’interprete comunica al manager cinese quanto detto da noi e viceversa

Il compito dell’interprete si svolge contestualmente all’incontro col manager cinese

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 25: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

25

Compilatori ed interpreti Compilatori ed interpreti – 6– 6

Riassumendo…I compilatori traducono un intero programma dal linguaggio L al linguaggio macchina della macchina prescelta:

traduzione e esecuzione procedono separatamenteal termine della compilazione è disponibile la versione tradotta del programmala versione tradotta è però specifica per quella macchina per eseguire il programma basta avere disponibile la versione tradotta (non è necessario ricompilare)

Gli interpreti invece traducono e immediatamente eseguono il programma istruzione per istruzioneistruzione per istruzione, infatti:

traduzione ed esecuzione procedono insiemeal termine non vi è alcuna versione tradotta del programma originalese si vuole rieseguire il programma occorre anche ritradurlo

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 26: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

26

Compilatori ed interpreti Compilatori ed interpreti – 7– 7

L’esecuzione di un programma compilato è più veloce dell’esecuzione di un programma interpretato

I linguaggi interpretati sono tipicamente più flessibili e semplici da utilizzare (nei linguaggi compilati esistono maggiori limitazioni alla semantica dei costrutti)

Per distribuire un programma interpretato si deve necessariamente distribuire il codice sorgente, rendendo possibili operazioni di plagio

Nei programmi interpretati, è facilitato il rilevamento di errori di runtime

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 27: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

27

L’arte della programmazione L’arte della programmazione – 1– 1

La soluzione di un problema tramite un programma è un procedimento che non si esaurisce nello scrivere codice in un dato linguaggio di programmazione, ma comprende una fase di progetto, che precede, e di verifica, che segue, la scrittura del codice

Definizione del problemaAlgoritmo per la soluzione del problemaCodificaDebuggingValidazioneDocumentazioneManutenzione

AnalisiAnalisi

ProgrammazioProgrammazionene

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 28: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

28

L’arte della programmazione L’arte della programmazione – 2– 2

Definizione del problemaDefinizione del problema Definizione degli ingressi e delle uscite

quali variabiliquale dominio per ogni variabile

Risoluzione delle ambiguitàScomposizione in problemi più semplici

Definizione dell’algoritmoDefinizione dell’algoritmoSoluzione in pseudocodiceSoluzione mediante diagramma a blocchi strutturato

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 29: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

29

L’arte della programmazione L’arte della programmazione – 3– 3

CodificaCodificaTraduzione dell’algoritmo in istruzioni del linguaggio di programmazione

DebuggingDebugging, correzione degli errori sintattici e semantici

Errori sintatticiEspressioni non valide o non ben formate nel linguaggio di programmazione

Errori semanticiComportamento non aderente alle aspettative/alla intenzionalità del programmatore

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 30: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

30

L’arte della programmazione L’arte della programmazione – 4– 4

ValidazioneValidazioneTest su tutte le condizioni operative del programmaTest su input estremi (es., vettori di dimensione 0 o 1, variabili nulle)

DocumentazioneDocumentazioneInserimento di commenti esplicativi nelle varie parti del programma per facilitarne la comprensione (dopo molto tempo dalla stesura o per terze persone)

ManutenzioneManutenzioneModifica del programma per soddisfare il cambiamento delle specifiche con cui deve operare

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 31: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

31

I commenti I commenti – 1– 1

Perché commentare e documentare i programmi?

I programmi vengono utilizzati più volte nel corso di tempi lunghi (mesi, anni) per…

…fare cambiamenti (aggiunta di caratteristiche)…risolvere errori

Commentare il programma serve a rendere chiaro ed evidente lo scopo delle varie parti del codice

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 32: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

32

I commenti I commenti – 2– 2

Inoltre:Si devono evitare commenti inutiliSi deve evitare di inserirne “troppo pochi”

Un buon metodo per verificare il livello di documentazione è quello di leggere solo i commenti (e non il codice) ed ottenere una chiara idea su “cosa fa un programma e come lo fa”

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 33: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

33

Storia delStoria dellinguaggio Clinguaggio C

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 34: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

34

Storia del linguaggio CStoria del linguaggio C 1 1

Il linguaggio C venne definito alla fine degli anni ‘60 da Dennis M. Ritchie, degli AT&T Bell Labs, come linguaggio di programmazione di sistemalinguaggio di programmazione di sistema

Il linguaggio C doveva essere……un linguaggio di livello sufficientemente alto per garantire ai programmi leggibilità e manutenibilità…un linguaggio sufficientemente semplice da stabilire una corrispondenza immediata con la macchina sottostante…indipendente dall’hardware e quindi portabile

Il linguaggio C si dimostrò così flessibile, ed il codice macchina prodotto così efficiente che, nel 1973, Ritchie e Ken Thompson riscrissero UNIXUNIX in C

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 35: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

35

Oggi molti sistemi operativi sono sviluppati in C o CI vantaggi fondamentali della scrittura di sistemi operativi in linguaggio di alto livello sono la velocità di sviluppo e la manutenibilitàCome effetto collaterale si ottiene un sistema operativo che può essere trasferito su architetture diverse, tramite ricompilazione su macchina target: portingportingNel 1977, Ritchie e Brian Kernighan pubblicarono “The The C Programming LanguageC Programming Language”, che formalizza lo standard standard K&RK&RInizialmente il linguaggio C veniva usato soprattutto sui sistemi UNIX (PCC Portable C Compiler) ma, con la diffusione dei PC, compilatori C furono prodotti per nuove architetture e nuovi sistemi operativi

Storia del linguaggio CStoria del linguaggio C 2 2

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 36: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

36

Nel 1983, l’American National Standards American National Standards InstituteInstitute (ANSI), costituì la commissione X3J11, che doveva formulare uno standard per il C, che includesse le nuove caratteristiche che il linguaggio aveva progressivamente maturato, mantenendone la portabilità

La versione finale dello standard C fu approvata dall’ANSI nel 1989

Lo Standard ANSI C Standard ANSI C è descritto nel documento “American National Standard for Information American National Standard for Information Systems Systems Programming Language C Programming Language C”

Lo standard è stato rivisto ed aggiornato nel 1999

ANSI CANSI C

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909

Page 37: 1 I linguaggi di alto livello Introduzione alla programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello.

37

Linguaggio di medio/alto livello; basso livello di controllo degli errori nella fase di compilazione

Variabili tipizzate, con notevoli possibilità di conversione mediante il type casting, che permette di forzare una variabile a cambiare tipo

Abbina ad un livello medio/alto di astrazione, un buon controllo delle operazioni a basso livello

Caratteristiche del linguaggio CCaratteristiche del linguaggio C

Fondamenti di Informatica – a.a. 2008-Fondamenti di Informatica – a.a. 2008-0909