Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoEulalia Masi Modificato 11 anni fa
1
Anno accademico 2010-2011 1 I linguaggi di alto livello
2
Anno accademico 2010-2011 2 Sommario Introduzione alla programmazioneIntroduzione alla programmazione Caratteristiche dei linguaggi di programmazione Caratteristiche dei linguaggi di programmazione I linguaggi di programmazione di alto livello I linguaggi di programmazione di alto livello Compilatori e interpreti Compilatori e interpreti Larte della programmazione Larte della programmazione Storia del linguaggio CStoria del linguaggio C Lo standard ANSI Lo standard ANSI
3
Anno accademico 2010-2011 3 Introduzione alla programmazione
4
Anno accademico 2010-2011 4 Cosè un linguaggio Definizione 1Definizione 1 Un linguaggio è un insieme di parole e di metodi 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 2Definizione 2 Il linguaggio è uno strumento matematico che consente di rispondere a domande come: Quali sono gli elementi linguistici primitivi? Quali sono le frasi lecite? Si può decidere se una frase appartiene o no al linguaggio? Come si stabilisce il significato di una frase?
5
Anno accademico 2010-2011 5 Lessico, sintassi e semantica Lessico:Lessico: linsieme di regole formali per la scrittura di parole in un linguaggio Sintassi:Sintassi: linsieme di regole formali per la scrittura di frasi in un linguaggio, che stabiliscono cioè la grammatica del linguaggio stesso Semantica:Semantica: linsieme dei significati da attribuire alle frasi (sintatticamente corrette) costruite nel linguaggio Nota:Nota: una frase può essere sintatticamente corretta e tuttavia non avere significato! Sento il micino che cinguetta e annaffio nel giardino le mie mimose blu…
6
Anno accademico 2010-2011 6 Esempio: la sintassi di un numero naturale Diagramma sintattico : 1|2|3|4|5|6|7|8|9 : 0 | : 0 | { }
7
Anno accademico 2010-2011 7 I linguaggi di programmazione: Cenni storici 1 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 alfabeto parole chiave regole sintatticheUn linguaggio di programmazione è costituito, come ogni altro tipo di linguaggio, da un alfabeto, con cui viene costruito un insieme di parole chiave (il vocabolario) e da un insieme di regole sintattiche per luso corretto delle parole del linguaggio copia un numero addiziona due numeri confronta due numeriA livello hardware, i calcolatori riconoscono solo comandi semplici, del tipo copia un numero, addiziona due numeri, confronta due numeri
8
Anno accademico 2010-2011 8 I linguaggi di programmazione: Cenni storici 2 I primi linguaggi di programmazione coincidevano con linsieme delle istruzioni eseguibili dallhardware Le istruzioni hardware sono codificate in codice binario: ogni informazione è rappresentata, allinterno della macchina, come una sequenza di bit Enorme sforzo programmativo richiesto per codificare algoritmi semplici Enorme sforzo programmativo richiesto per codificare algoritmi semplici set di istruzioni macchina linguaggio macchinaI comandi realizzati in hardware definiscono il set di istruzioni macchina e i programmi che li utilizzano direttamente sono i programmi in linguaggio macchina
9
Anno accademico 2010-2011 9 I linguaggi di programmazione: Cenni storici 3 In linguaggio macchina… …ogni operazione richiede lattivazione 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 lorganizzazione della macchina più che la natura del problema da risolvere Dalla nascita dei primi calcolatori, si è cercato di diminuire lo sforzo ed aumentare la produttività dellutente, anche a costo di caricare la macchina di maggiori compitiDalla nascita dei primi calcolatori, si è cercato di diminuire lo sforzo ed aumentare la produttività dellutente, anche a costo di caricare la macchina di maggiori compiti
10
Anno accademico 2010-2011 10 I linguaggi di programmazione: Cenni storici 4 La prima evoluzione dei linguaggi di programmazione ha portato ad una codifica di tipo simbolico, anziché binaria, dei programmi linguaggi assemblatoriTali 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 delluomo anche a costo di sprecare tempo macchina (una parte del tempo è dedicata alla traduzione di programmi, non alla loro esecuzione)
11
Anno accademico 2010-2011 11 I linguaggi di programmazione: Cenni storici 5 assemblyNegli anni 50, tutti i programmi erano scritti in linguaggio macchina o in assembly In assembly… …le istruzioni corrispondono univocamente alle istruzioni macchina, ma vengono espresse tramite nomi simbolici (parole chiave) piuttosto che mediante codici numerici …il riferimento alle variabili viene effettuato per mezzo di nomi piuttosto che con indirizzi di memoria assemblatoreI programmi scritti in assembly necessitano di un apposito programma assemblatore per tradurre le istruzioni tipiche del linguaggio in istruzioni macchina
12
Anno accademico 2010-2011 12 I linguaggi di programmazione: Cenni storici 6 Il passo successivo nellevoluzione dei linguaggi di programmazione tese a rendere la codifica degli algoritmi il più possibile vicina al problema da risolvere, anziché allarchitettura della macchina destinata allesecuzione del programma linguaggi di alto livelloFORTRANCOBOL I primi due linguaggi di alto livello, FORTRAN e COBOL, hanno costrutti fortemente ispirati alla notazione usata, negli anni 50, per lelaborazione numerica e gestionale
13
Anno accademico 2010-2011 13 I linguaggi di programmazione: Cenni storici 7 Negli anni 60: Grande sforzo per razionalizzare la definizione e le tecniche di implementazione dei linguaggi, reso necessario dallo sviluppo quantitativamente impetuoso delle applicazioni ALGOL 60 Definizione dellALGOL 60, il capostipite dei moderni linguaggi, basato sui principi della programmazione strutturata Proliferazione selvaggia, favorita dalle industrie, di nuovi linguaggi, sia general purpose che rivolti a specifici settori applicativi
14
Anno accademico 2010-2011 14 I linguaggi di programmazione: Cenni storici 8 Negli anni 70: SIMULA 67 ALGOL 68 PASCAL Si diffondono i linguaggi strutturati, quali il SIMULA 67, capostipite dei linguaggi Object Oriented, lALGOL 68, ma soprattutto il PASCAL, primo esempio di prodotto di origine accademica che abbia conosciuto vasto successo ed applicazione nel mondo dellindustria C UNIX In modo simile, il C, concepito come un assembler strutturato per trasportare facilmente UNIX, ha finito per diventare il linguaggio più affermato nella programmazione di sistema
15
Anno accademico 2010-2011 15 I linguaggi di programmazione: Cenni storici 9 Il periodo a cavallo tra gli anni 70 ed 80 è segnato da tendenze contraddittorie: Viene lanciata dal Dipartimento della Difesa americano liniziativa per la definizione e la realizzazione di un nuovo linguaggio, che lente intende imporre come proprio standard ADA ADA dovrebbe rappresentare il punto di maturazione perfetta di tutti i principi di progettazione software e dei meccanismi linguistici elaborati negli anni precedenti C Visual BASICJava Si moltiplicano i nuovi linguaggi tesi a rendere più gradevole ed efficiente la programmazione tradizionale e si ha laffermarsi definitivo dei linguaggi object oriented (C, Visual BASIC, Java)
16
Anno accademico 2010-2011 16 I linguaggi di programmazione: Cenni storici 10 linguaggi di alto livelloNei linguaggi di alto livello ogni singola istruzione consente di effettuare unoperazione semplice, ma completa I 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 litaliano e linglese, dallaltro I linguaggi di programmazione differiscono comunque dai linguaggi naturali: sono infatti meno espressivi ma più precisi semplici e poveri privi di qualsiasi ambiguitàSono semplici e poveri (poche parole chiave, poche regole), ma privi di qualsiasi ambiguità
17
Anno accademico 2010-2011 17 Astrazione 1 programmazione di basso livelloIn informatica si parla di programmazione di basso livello quando si utilizza un linguaggio molto vicino alla macchina programmazione di alto livelloSi parla invece di programmazione di alto livello quando si utilizzano linguaggi più sofisticati ed astratti, slegati dal funzionamento fisico della macchina PascalPerl,JavaSi viene così a creare una gerarchia di linguaggi, dai meno evoluti (il linguaggio macchina o lassembler) ai più evoluti (Pascal, Perl, Java, etc.) linguaggio CIn questa gerarchia il linguaggio C si pone ad un livello intermedio
18
Anno accademico 2010-2011 18 Astrazione 2 Esistono, quindi, diversi livelli di astrazione: Linguaggio macchina e Assembler Linguaggio 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 Linguaggi di alto livello Linguaggi di alto livello Il programmatore può astrarre dai dettagli legati allarchitettura ed esprimere i propri algoritmi in modo simbolico Sono indipendenti dalla macchina hardware sottostante
19
Anno accademico 2010-2011 19 Evoluzione dei linguaggi di programmazione
20
Anno accademico 2010-2011 20 Linguaggi di programmazione di alto livello 1 Consentono al programmatore di trattare oggetti complessi senza doversi preoccupare dei dettagli della particolare macchina sulla quale il programma viene eseguito compilatoreinterpreteRichiedono un compilatore o un interprete che sia in grado di tradurre le istruzioni del linguaggio di alto livello in istruzioni macchina di basso livello, eseguibili dal calcolatore Un compilatore è un programma traduttore complesso, infatti… …mentre 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
21
Anno accademico 2010-2011 21 Linguaggi di programmazione di alto livello 2 I linguaggi che non dipendono dallarchitettura 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àleggibilitàmanutenibilità portabilità, leggibilità, manutenibilità
22
Anno accademico 2010-2011 22 Linguaggi di programmazione di alto livello 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à nelleffettuare modifiche di tipo correttivo, perfettivo, evolutivo e adattivo analisi di correttezzaLa possibilità di codificare algoritmi in maniera astratta si traduce in una migliore comprensibilità del codice e quindi in una più facile analisi di correttezza
23
Anno accademico 2010-2011 23 Linguaggi di programmazione di alto livello 4 Eventuale svantaggio delluso dei linguaggi di alto livello è la riduzione di efficienza È possibile utilizzare successioni di istruzioni macchina diverse per scrivere programmi funzionalmente equivalenti: il programmatore ha un controllo limitato sulle modalità con cui il compilatore traduce il codice Tuttavia… i compilatori attuali ricorrono a trucchi di cui molti programmatori ignorano lesistenza La ragione fondamentale per decretare la superiorità dei linguaggi di alto livello consiste nel fatto che la maggior parte dei costi di produzione del software è localizzata nella fase di manutenzione, per la quale leggibilità e portabilità sono crucialiLa ragione fondamentale per decretare la superiorità dei linguaggi di alto livello consiste nel fatto che la maggior parte dei costi di produzione del software è localizzata nella fase di manutenzione, per la quale leggibilità e portabilità sono cruciali
24
Anno accademico 2010-2011 24 Linguaggi di programmazione di alto livello 5 modello astratto di programmazionePossiamo aggregare i numerosi linguaggi di programmazione esistenti sulla base del modello astratto di programmazione che sottintendono e che è necessario adottare per utilizzarli Linguaggi di programmazione Imperativi Paralleli Procedurali (C, Pascal) Ad oggetti (C++, Java) Dichiarativi Funzionali(Lisp)Logici(Prolog)
25
Anno accademico 2010-2011 25 Linguaggi di programmazione di alto livello 6 Linguaggi imperativiLinguaggi imperativi cambiamento di stato della memoria Il modello computazionale è basato sul cambiamento di stato della memoria della macchina assegnazione di un valore È centrale il concetto di assegnazione di un valore ad una (variabile) locazione di memoria Il 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 dichiarativi funzione e relazione Il modello computazionale è basato sui concetti di funzione e relazione Il programmatore non ragiona in termini di assegnazioni di valori, ma di relazioni tra entità e di valori di una funzione
26
Anno accademico 2010-2011 2626 Sommario dei punti più importanti LinguaggioLinguaggio LessicoLessico SintassiSintassi SemanticaSemantica Differenza tra linguaggi ad alto e basso livelloDifferenza tra linguaggi ad alto e basso livello Linguaggio MacchinaLinguaggio Macchina AssemblerAssembler Linguaggio CLinguaggio C
27
Anno accademico 2010-2011 2727 Sommario dei punti più importanti Differenza tra compilatori ed interpretiDifferenza tra compilatori ed interpreti CompilatoriCompilatori TokenizzazioneTokenizzazione SintassiSintassi SemanticaSemantica Linguaggi Imperativi e dichiarativiLinguaggi Imperativi e dichiarativi Assegnamenti e cambio di stato della memoriaAssegnamenti e cambio di stato della memoria Definizione entità e relazioni tra esseDefinizione entità e relazioni tra esse
28
Anno accademico 2010-2011 2828 Sommario dei punti più importanti Vantaggi dei linguaggi ad alto livelloVantaggi dei linguaggi ad alto livello portabilitàleggibilitàmanutenibilità portabilità, leggibilità, manutenibilità
29
Anno accademico 2010-2011 29 Linguaggi di programmazione di alto livello 7 Sulla base dellambito in cui si colloca il problema da risolvere, è opportuno adottare un linguaggio piuttosto che un altro: Calcolo scientifico: C Calcolo scientifico: Fortran, C Intelligenza artificiale: C Intelligenza artificiale: Prolog, Lisp, C Applicazioni gestionali: C Applicazioni gestionali: Cobol, SQL, C Sistemi operativi: C Sistemi operativi: Assembler, C Applicazioni visuali: C Applicazioni visuali: C, Java, Visual Basic Applicazioni Web: Applicazioni Web: Java, PHP, ASP
30
Anno accademico 2010-2011 30 I programmi traduttori 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 macchina Ogni traduttore è in grado di comprendere e tradurre un solo linguaggio sorgente eseguibileIl traduttore converte il testo di un programma scritto in un particolare linguaggio di programmazione (sorgente) nella corrispondente rappresentazione in linguaggio macchina (eseguibile)
31
Anno accademico 2010-2011 31 I programmi traduttori 2 Compilatore:Compilatore: opera la traduzione di un programma sorgente (scritto in linguaggio di alto livello) in un programma direttamente eseguibile dal calcolatore PRIMA si traduce tutto il programma PRIMA si traduce tutto il programma POI si esegue la versione tradotta POI si esegue la versione tradotta Interprete:Interprete: traduce ed esegue il programma sorgente, istruzione per istruzione Traduzione ed esecuzione sono intercalate Traduzione ed esecuzione sono intercalate
32
Anno accademico 2010-2011 32 I programmi traduttori 3
33
Anno accademico 2010-2011 33 Il compilatore 1 Eseguire un programma scritto in un linguaggio compilatoEseguire un programma scritto in un linguaggio compilato Il programma P scritto in linguaggio L viene dato in ingresso a un programma P Comp C P Comp è il programma compilatore del linguaggio L (ad esempio il programma compilatore del C) FASE di COMPILAZIONEcompile time Lesecuzione da parte di un calcolatore di P Comp su P (dove P è il dato di ingresso) produce P exe FASE di COMPILAZIONE (compile time) FASE di ESECUZIONErun time Lesecuzione da parte di un calcolatore di P exe su particolari dati in input produce i relativi risultati FASE di ESECUZIONE (run time)
34
Anno accademico 2010-2011 34 Il compilatore 2 Esempio di compilatoreEsempio di compilatore Dobbiamo sottoporre un curriculum, in inglese, ad una azienda, ma non conosciamo linglese Abbiamo bisogno di un traduttore che traduca quanto scritto da noi dallitaliano allinglese contattiamo il traduttore il traduttore riceve il testo da tradurre il traduttore fornisce il testo tradotto possiamo sottoporre il nostro curriculum allazienda
35
Anno accademico 2010-2011 35 Il compilatore 3 CompilatoreCompilatore Analisi lessicale token (parole) Analisi sintattica albero sintattico Analisi semantica tabella dei simboli
36
Anno accademico 2010-2011 36 Il compilatore 4 analizzatore lessicale stringa di tokenLanalizzatore lessicale trasforma il programma sorgente da stringa di caratteri a stringa di token tokenUn token è un simbolo che esprime la natura di un elemento del linguaggio Punteggiatura ed operatori vengono trasformati direttamente in token Per parole riservate, nomi di variabili e costanti, lanalizzatore deve determinare il token appropriato, esaminando sia la stringa di caratteri, sia il contesto tabella dei simboli analisi semantica Ogni identificatore viene inserito nella tabella dei simboli ed i suoi attributi vengono aggiornati nella fase di analisi semantica
37
Anno accademico 2010-2011 37 Il compilatore 5 Loutput delanalisi lessicale è un insieme di coppie, il cui primo elemento identifica la classe del token ed il secondo punta alla posizione del token e dei suoi attributi nella tabella dei simboli Alcuni token non richiedono attributi e dunque avranno puntatori nulli (ad es., operatori e parole riservate del linguaggio)
38
Anno accademico 2010-2011 38 Il compilatore 6
39
Anno accademico 2010-2011 39 Il compilatore 7 analizzatore sintattico parserLanalizzatore sintattico (o parser) permette la costruzione dellalbero di derivazione del particolare programma basato sulla grammatica del linguaggio
40
Anno accademico 2010-2011 40 Il compilatore 8 analizzatore semanticoLanalizzatore semantico, infine, usa lalbero di derivazione per generare una rappresentazione intermedia e completare la tabella di simboli Un altro ruolo svolto dallanalizzatore semantico è la scoperta di errori dipendenti dal contesto (tipi di dati che non corrispondono, variabili non dichiarate, etc.)
41
Anno accademico 2010-2011 41 Il compilatore 9 generatore di codiceIl generatore di codice traduce la rappresentazione intermedia in linguaggio assembler o linguaggio macchina Prima della generazione di codice: Allocazione della memoria Allocazione dei registri ottimizzatore del codiceLottimizzatore del codice intermedio effettua trasformazioni atte a migliorare lefficienza del codice eseguibile finale D:=T;
42
Anno accademico 2010-2011 42 Il compilatore 10 Traduzione da algoritmo a codice C e da C ad Assembler
43
Anno accademico 2010-2011 43 Il compilatore 11 Interazione fra compilatore, SO e hardware
44
Anno accademico 2010-2011 44 Compilatore e linker 1 moduliI compilatori consentono tipicamente la compilazione separata di parti di programmi (moduli) librerieI diversi moduli possono essere progettati, costruiti e messi a punto separatamente, e archiviati in opportune librerie linkerNel momento in cui un programma deve essere eseguito, un programma apposito, detto linker, si occupa di collegare opportunamente fra loro i moduli oggetto modulo eseguibileIl risultato dellesecuzione del linker è un unico modulo, detto modulo eseguibile, pronto per il caricamento in memoria e lesecuzione
45
Anno accademico 2010-2011 45 Compilatore e linker 2 Il ruolo del linker
46
Anno accademico 2010-2011 46 Compilatore e linker 3 Da sorgente ad eseguibile
47
Anno accademico 2010-2011 47 Linterprete 1 Eseguire un programma scritto in un linguaggio interpretatoEseguire un programma scritto in un linguaggio interpretato Il programma P scritto in linguaggio L viene dato in ingresso a un programma P Int Python P Int è il programma interprete del linguaggio L (ad esempio il programma interprete del Python) Lesecuzione da parte di un calcolatore di P Int su P, con i dati di ingresso a P, produce i relativi risultati
48
Anno accademico 2010-2011 48 Linterprete 2 Esempio di interpreteEsempio di interprete Dobbiamo incontrare un manager cinese per motivi di lavoro ma non conosciamo il cinese Abbiamo bisogno di un interprete che traduca il nostro dialogo contattiamo linterprete parliamo in italiano, in presenza dellinterprete contemporaneamente contemporaneamente linterprete comunica al manager cinese quanto detto da noi (e viceversa) Il compito dellinterprete si svolge contestualmente allincontro col manager cinese
49
Anno accademico 2010-2011 49 Linterprete 3 Interazione fra interprete, SO e hardware
50
Anno accademico 2010-2011 50 Compilatori e interpreti 1 Riassumendo… I compilatori traducono un intero programma dal linguaggio L al linguaggio macchina della macchina prescelta: traduzione e esecuzione procedono separatamente al termine della compilazione è disponibile la versione tradotta del programma la versione tradotta è però specifica per quella macchina per eseguire il programma basta avere disponibile la versione tradotta (non è necessario ricompilare) istruzione per istruzione Gli interpreti invece traducono e immediatamente eseguono il programma istruzione per istruzione, infatti: traduzione ed esecuzione procedono insieme al termine non vi è alcuna versione tradotta del programma originale se si vuole rieseguire il programma occorre anche ritradurlo
51
Anno accademico 2010-2011 51 Lesecuzione di un programma compilato è generalmente più veloce dellesecuzione di un programma interpretato (nella compilazione si possono attuare processi di ottimizzazione delleseguibile), tuttavia… Linterprete ha il vantaggio di tradurre solo le istruzioni che effettivamente esegue, riducendo al minimo loperazione di traduzione nel caso in cui lesecuzione venga terminata o un gruppo di istruzioni non facciano parte del flusso esecutivo corrente Un compilatore ha il vantaggio di tradurre una sola volta lintero programma e reiterare certe istruzioni (iterazioni) per il numero di volte richiesto dalla particolare esecuzione Compilatori e interpreti 2
52
Anno accademico 2010-2011 52 Compilatori ed interpreti 3 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 run time
53
Anno accademico 2010-2011 53 Larte della programmazione 1 Analisi Programmazione 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 problema Algoritmo per la soluzione del problema Codifica Debugging Validazione Documentazione Manutenzione
54
Anno accademico 2010-2011 54 Larte della programmazione 2 Definizione del problemaDefinizione del problema Definizione degli ingressi e delle uscite quali variabili quale dominio per ogni variabile Risoluzione delle ambiguità Scomposizione in (sotto )problemi più semplici Definizione dellalgoritmoDefinizione dellalgoritmo Soluzione in pseudocodice Soluzione mediante diagramma a blocchi strutturato
55
Anno accademico 2010-2011 55 Larte della programmazione 3 CodificaCodifica Traduzione dellalgoritmo in istruzioni del linguaggio di programmazione DebuggingDebugging, correzione degli errori sintattici e semantici Errori sintattici Espressioni non valide o non ben formate nel linguaggio di programmazione Errori semantici Comportamento non aderente alle aspettative/alla intenzionalità del programmatore
56
Anno accademico 2010-2011 56 Larte della programmazione 4 ValidazioneValidazione Test su tutte le condizioni operative del programma Test su input estremi (es., vettori di dimensione 0 o 1, variabili nulle) DocumentazioneDocumentazione Inserimento di commenti esplicativi nelle varie parti del programma per facilitarne la comprensione (dopo molto tempo dalla stesura o per terze persone) ManutenzioneManutenzione Modifica del programma per soddisfare al cambiamento delle specifiche con cui deve operare
57
Anno accademico 2010-2011 57 I commenti 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 diverse parti del codice
58
Anno accademico 2010-2011 58 I commenti 2 Inoltre: Si devono evitare commenti inutili Si 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
59
Anno accademico 2010-2011 59 Storia del linguaggio C
60
Anno accademico 2010-2011 60 Storia del linguaggio C 1 linguaggio di programmazione di sistemaIl linguaggio C venne definito alla fine degli anni 60 da Dennis M. Ritchie, degli AT&T Bell Labs, come linguaggio 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 dallhardware e quindi portabile UNIXIl linguaggio C si dimostrò così flessibile, ed il codice macchina prodotto così efficiente che, nel 1973, Ritchie e Ken Thompson riscrissero UNIX in C
61
Anno accademico 2010-2011 61 Storia del linguaggio C 2 Oggi molti sistemi operativi sono sviluppati in C o C I vantaggi fondamentali della scrittura di sistemi operativi in linguaggio di alto livello sono la velocità di sviluppo e la manutenibilità portingCome effetto collaterale si ottiene un sistema operativo che può essere trasferito su architetture diverse, tramite ricompilazione su macchina target: porting The C Programming Languagestandard K&RNel 1977, Ritchie e Brian Kernighan pubblicarono The C Programming Language, che formalizza lo standard K&R Inizialmente 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
62
Anno accademico 2010-2011 62 ANSI C American National Standards InstituteNel 1983, lAmerican National Standards Institute (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 dallANSI nel 1989 Standard ANSI C American National Standard for Information Systems Programming Language CLo Standard ANSI C è descritto nel documentoAmerican National Standard for Information Systems Programming Language C Lo standard è stato rivisto ed aggiornato nel 1999
63
Anno accademico 2010-2011 63 Caratteristiche del linguaggio C 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 a run time Abbina ad un livello medio/alto di astrazione, un buon controllo delle operazioni a basso livello
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.