Linguaggi e ambienti di programmazione
Transcript
Linguaggi e ambienti di programmazione
Fondamenti d’Informatica 1 A.A. 2016/2017 Corsi di Laurea in Ing. Civile e Ing. per l’Ambiente e il Territorio Docente: Giorgio Fumera Università degli Studi di Cagliari Linguaggi e ambienti di programmazione Linguaggi di programmazione I calcolatori sono in grado di “comprendere” ed eseguire solo algoritmi codificati in linguaggio macchina (programmi). Il linguaggio macchina è detto di basso livello, poiché le sue istruzioni corrispondono a operazioni molto elementari e fanno riferimento ai dettagli dell’organizzazione hardware di un calcolatore (indirizzi delle celle di memoria, registri della CPU, ecc.). Le istruzioni dei programmi in linguaggio macchina devono essere codificate a loro volta in binario. La loro rappresentazione simbolica, usata per comodità dai programmatori (per es., ADD, LOAD, JUMP), costituisce un linguaggio equivalente, detto Assembly. Linguaggi di programmazione Per semplificare l’attività di programmazione, a partire dagli anni ’50 sono stati introdotti diversi linguaggi di alto livello, che consentono di rappresentare gli algoritmi in una forma più vicina al linguaggio naturale rispetto al linguaggio macchina. Alcune caratteristiche dei linguaggi di alto livello: I non fanno esplicito riferimento agli indirizzi delle celle di memoria, ma usano nomi simbolici (detti variabili) I indicano le istruzioni con termini in linguaggio naturale (per esempio, if, while, for) I consentono di rappresentare espressioni aritmetiche composte da più operazioni elementari con una notazione simile a quella usata in matematica I consentono di rappresentare in modo semplice valori non numerici, non direttamente rappresentabili in linguaggio macchina (per esempio, sequenze di caratteri e vettori di numeri) Linguaggi di alto livello Esempi: Fortran (FORmula TRANslator ) I Pascal I SmallTalk I Lisp (LISt Processor ) I C++ I Cobol (COmmon Business Oriented Language) I Java I Python I Matlab I ... I I C I Basic Linguaggi di alto livello Ogni linguaggio di alto livello consente di rappresentare qualsiasi algoritmo. Ciascun linguaggio è stato però ideato con lo scopo di rappresentare più facilmente alcuni tipi di algoritmi; per esempio: I FORTRAN: calcolo numerico I Lisp: intelligenza artificiale (elaborazione “simbolica”) I COBOL: gestione dati I C: ideato per la scrittura del sistema operativo Unix I Java: applicazioni Internet I Matlab: calcolo numerico matriciale Linguaggi di alto livello I linguaggi esistenti possono essere suddivisi (in modo non mutuamente esclusivo) nelle seguenti categorie, in base al modo in cui consentono di rappresentare gli algoritmi: I imperativi/procedurali: descrivono gli algoritmi come sequenze di istruzioni (operazioni) da eseguire sui dati di ingresso e sui risultati intermedi, per ottenere il risultato desiderato I dichiarativi (logici, funzionali): “descrivono” il risultato che si vuole ottenere, non come ottenerlo I orientati agli oggetti: rappresentano i dati come “oggetti” appartenenti a “classi”, caratterizzate da certe “proprietà” (operazioni eseguibili sulle loro istanze) Dai linguaggi di alto livello al linguaggio macchina Un programma scritto in un linguaggio di alto livello è detto programma sorgente, e non è “comprensibile” (e quindi non è eseguibile) da un calcolatore. Per renderlo eseguibile è necessario tradurlo in linguaggio macchina. Il processo di traduzione può a sua volta essere descritto attraverso un algoritmo: può quindi essere codificato in linguaggio macchina ed eseguito dallo stesso calcolatore: s = input() somma = 0 for x in s: s = s + x print s traduzione programma sorgente (linguaggio di alto livello) 00101011 01010010 10100100 01010100 01010100 programma eseguibile (linguaggio macchina) Linguaggi compilati e interpretati Dal punto di vista del processo di traduzione, esistono due categorie di linguaggi di alto livello: I linguaggi compilati: l’intero programma sorgente viene tradotto in linguaggio macchina prima dell’esecuzione (esempi: Fortran, C, C++, . . . ) I linguaggi interpretati: ogni singola istruzione del programma sorgente viene tradotta in linguaggio macchina e subito eseguita, prima dell’elaborazione dell’istruzione successiva (esempi: Lisp, Basic, Python, Matlab, . . . ); questo rende l’esecuzione di programmi scritti in un linguaggio interpretato più lenta rispetto ai linguaggi compilati Ambienti di programmazione Per ogni linguaggio di alto livello sono disponibili uno o più ambienti di programmazione (o ambienti integrati di sviluppo – integrated development environment): un insieme di programmi che supportano gli utenti nello sviluppo dei propri programmi (scrittura, verifica, esecuzione). Componenti principali di un ambiente di programmazione: I editor : facilita la scrittura dei programmi (memorizzandoli in file di testo), per esempio evidenziando con colori diversi le diverse componenti (istruzioni, espressioni, ecc.) I compilatore o interprete: traduce i programmi in linguaggio macchina (ed esegue le singole istruzioni, nel caso dell’interprete) I debugger : facilita l’identificazione di eventuali errori (“bug”)