linguaggi di programmazione: le...

46
Andrea Prevete - UNINA2 - a.a. 2009/10 1 ELEMENTI DI PROGRAMMAZIONE LINGUAGGI DI PROGRAMMAZIONE: LE BASI

Upload: others

Post on 28-Jan-2021

6 views

Category:

Documents


0 download

TRANSCRIPT

  • Andrea Prevete - UNINA2 - a.a. 2009/101

    ELEMENTI DI PROGRAMMAZIONE

    LINGUAGGI DI PROGRAMMAZIONE:

    LE BASI

  • Andrea Prevete - UNINA2 - a.a. 2009/102

    LINGUAGGI DI

    PROGRAMMAZIONE: LE BASI

    Un computer digitale è un dispositivo che elabora simboli codificati (a partire da un alfabeto finito di simboli primitivi, ‘cifre’ o

    ‘digit’) così che, opportunamente interpretati, i simboli di partenza e quelli terminali costituiscono rispettivamente la descrizione di un problema e la sua

    soluzione.

  • Andrea Prevete - UNINA2 - a.a. 2009/103

    LINGUAGGI DI

    PROGRAMMAZIONE: LE BASIOsservando l’azione di un repertorio di

    quadruple che duplica una sequenza di ‘1’ sul nastro di una macchina di Turing possiamo

    ragionevolmente interpretare il tutto affermando che la macchina ha eseguito una

    moltiplicazione per due.

    Immaginiamo però di voler determinare le quadruple capaci, dato due interi qualsiasi x

    ed y, di eseguire l’operazione xy.

    Il compito ci appare fastidioso ed innaturale!

  • Andrea Prevete - UNINA2 - a.a. 2009/104

    LINGUAGGI DI

    PROGRAMMAZIONE: LE BASI

    Il codice “base” delle quadruple è evidentemente sufficiente alla macchina per manipolare

    efficientemente i suoi simboli-nastro, ma prolisso e non intuitivo rispetto alle nostre necessità di descrivere dati e passi risolutivi di un problema!

  • Andrea Prevete - UNINA2 - a.a. 2009/105

    LINGUAGGI DI

    PROGRAMMAZIONE: LE BASI

    Allo stesso modo una sequenza di istruzioni di una macchina di Von Neumann (quindi il PC che abbiamo in questo momento sulla scrivania!), pur perfetta per manipolare

    efficientemente i contenuti di celle di memoria e registri, è interpretabile per i macroeffetti che produce (e quindi al livello del problema!) solo a patto di un esame attento e minuzioso

  • Andrea Prevete - UNINA2 - a.a. 2009/106

    LINGUAGGI DI

    PROGRAMMAZIONE: LE BASIEsempio di sequenza per stampare le parole immesse dalla tastiera (processore x86):READ_STRING:

    MOV BX, KEYBOARD

    MOV CX, L_BUFFER

    LEA DX, BUFFER

    MOV AH, 3FH

    INT 21H

    MOV BYTES_READ, AX

    CMP BYTES_READ, 0

    JE FINISHED

    MOV BX, PRINTER

    MOV CX, BYTES_READ

    LEA DX, BUFFER

    MOV AH, 40H

    INT 21H

    JMP READ_STRING

    FINISHED:

  • Andrea Prevete - UNINA2 - a.a. 2009/107

    LINGUAGGI DI

    PROGRAMMAZIONE: LE BASI

    Fortunatamente, in tutti i moderni sistemi di elaborazione, l’interazione con la macchina reale è mediata da almeno due componenti fondamentali ..

    1) il Sistema Operativo, che garantisce la “virtualizzazione” di tutta una serie di servizi fondamentali quali la gestione della memoria fisica, delle periferiche, dell’interfaccia utente, etc.

    2) i linguaggi di programmazione cosiddetti di alto livello, che consentono di progettare e realizzare compiti elaborativi concentrandosi sul livello del problema e quindi astraendo dalle specifiche tecniche della macchina fisica.

  • Andrea Prevete - UNINA2 - a.a. 2009/108

    LINGUAGGI DI

    PROGRAMMAZIONE: LE BASI

  • Andrea Prevete - UNINA2 - a.a. 2009/109

    LINGUAGGI DI

    PROGRAMMAZIONE: LE BASI

  • Andrea Prevete - UNINA2 - a.a. 2009/1010

    LINGUAGGI DI

    PROGRAMMAZIONE: LE BASI

    L’ insieme di istruzioni scritte in un linguaggio di

    programmazione ad alto livello prende il nome di

    codice sorgente ed è generalmente contenuto in

    uno o più file le cui estensioni caratterizzano

    linguaggio usato, per es: mioprog.c, o mioprog.cpp

  • Andrea Prevete - UNINA2 - a.a. 2009/1011

    LINGUAGGI DI

    PROGRAMMAZIONE: LE BASI

    La definizione di un Linguaggio richiede :

    1) Un alfabeto, cioè l’insieme di simboli con cui si può costruire il suo

    lessico, ovvero i termini del linguaggio

    2) Una sintassi, quindi le regole di composizione dei termini in frasi

    ben formate del linguaggio

    3) Una semantica, cioè il significato delle frasi ben formate del

    linguaggio

    Un parser o analizzatore sintattico per un linguaggio è una

    procedura che analizza frasi del linguaggio stesso accettando solo

    quelle ben formate nel senso visto sopra.

  • Andrea Prevete - UNINA2 - a.a. 2009/1012

    LINGUAGGI DI

    PROGRAMMAZIONE: LE BASI

    Perché possano essere eseguite da una

    macchina reale le istruzioni scritte in un

    linguaggio di alto livello devono essere

    tradotte nelle corrispondenti istruzioni native

    della macchina che li eseguirà.

    Questo processo può avvenire

    essenzialmente utilizzando due strategie:

    � Un processo di compilazione

    � Un processo di interpretazione

  • Andrea Prevete - UNINA2 - a.a. 2009/1013

    LINGUAGGI DI

    PROGRAMMAZIONE: LE BASI

    Sintetizzando …

    Un compilatore traduce “definitivamente” uno o più file contenenti le istruzioni in linguaggio ad alto livello producendo il cosiddetto file eseguibile:

    > compila file_sorgente.src ���� file_eseguibile.exe

    A questo punto il file eseguibile può essere lanciato ogni volta che si vuole e senza ulteriori interventi del compilatore:

    > esegui file_eseguibile.exe

    Vantaggi:La traduzione, come detto sopra, è realizzata una volta sola e l’eseguibile è quindi sempre pronto per essere lanciato

    Svantaggi:Per eseguire il programma su macchine diverse occorre compilare ogni volta i sorgenti!

  • Andrea Prevete - UNINA2 - a.a. 2009/1014

    LINGUAGGI DI

    PROGRAMMAZIONE: LE BASI

    Un Interprete, invece, ogni volta che viene chiamato in causa

    traduce ed esegue una per volta le istruzioni contenute nel file

    sorgente:

    > Interpreta file_sorgente.src

    Vantaggi:

    L’interpretazione è più flessibile, perché è possibile eseguire lo

    stesso file sorgente su macchine diverse

    Svantaggi:

    E’ sicuramente meno efficiente dovendo ogni volta, prima di

    eseguire, tradurre da linguaggio sorgente a linguaggio

    macchina

  • Andrea Prevete - UNINA2 - a.a. 2009/1015

    LINGUAGGI DI PROGRAMMAZIONE:

    LE BASISono possibili ibridazioni fra le due tecniche (per es. Java):

    Le istruzioni vengono tradotte in un linguaggio intermedio (bytecode)

    indipendente dalla macchina, quindi interpretate ed eseguite.

    Il primo passo viene eseguito da un compilatore

    Il secondo da un interprete

    > compila file_sorgente.src ���� file_intermedio.obj

    > interpreta file_intermedio.obj

    Sono quindi assicurati i vantaggi dei due approcci:

    • Il metodo è efficiente perché il linguaggio intermedio è “molto vicino” al

    linguaggio macchina e la sua interpretazione - ed esecuzione - è veloce

    • è anche flessibile perché è possibile eseguire il codice intermedio su

    macchine diverse

  • Andrea Prevete - UNINA2 - a.a. 2009/1016

    LINGUAGGI DI

    PROGRAMMAZIONE: LE BASI

  • Andrea Prevete - UNINA2 - a.a. 2009/1017

    LINGUAGGI DI

    PROGRAMMAZIONE: LE BASI

  • Andrea Prevete - UNINA2 - a.a. 2009/1018

    LINGUAGGI DI PROGRAMMAZIONE:

    LE BASIUNA TASSONOMIA PER I LINGUAGGI DI PROGRAMMAZIONE

    - Linguaggi imperativiBasati sul concetto di assegnamento: le istruzioni sono sostanzialmente operazioni di modifica delle strutture dati[es: Fortran, Cobol, Pascal, C, Basic]

    - Linguaggi funzionaliBasati sul concetto di funzione: le istruzioni sono funzioni che vengono valutate [es: Lisp]

    - Linguaggi logiciBasati sul concetto di dimostrazione: le istruzioni esprimono relazioni logiche tra input e output [es: Prolog]

    - Linguaggi ad oggettiBasati sul concetto di dato come oggetto attivo, in grado di ricevere e inviare messaggi [es: Smalltalk, C++, CLOS, Java]

    - Linguaggi di scriptingLinguaggi di programmazione interpretati che sono destinati in genere a compiti di automazione del sistema o delle applicazioni (macro), o ad essere usato all'interno delle pagine web. [es: Javascript, Php, Asp, Jsp, Python]

  • Andrea Prevete - UNINA2 - a.a. 2009/1019

    LINGUAGGI DI

    PROGRAMMAZIONE: LE BASI

    Nella restante parte del corso avremo a che fare

    essenzialmente con linguaggi imperativi.

    Ribadiamo, a scanso di equivoci, che tutte le tipologie di

    linguaggi prima citate sono equipotenti in termini di

    ampiezza della classe di problemi che possono affrontare

    e risolvere.

    Scegliere un tipo di linguaggio piuttosto che un altro

    significa optare per una certa prospettiva di descrizione di

    un problema, selezionare una metodologia di approccio

    alla soluzione – non certo dotarsi di strumenti più o meno

    potenti.

  • Andrea Prevete - UNINA2 - a.a. 2009/1020

    LINGUAGGI DI

    PROGRAMMAZIONE: LE BASI

    Passiamo finalmente ad occuparci di cosa concretamente ci rende

    disponibile un linguaggio di tipo imperativo, sia in termini di descrizione dei

    dati che di strumenti risolutivi.

    Cominciamo con l’osservare che fondamentalmente un problema è sempre

    caratterizzato da dei dati in ingresso su cui vogliamo operare per ottenere un

    risultato. Quindi avremo bisogno di svolgere dei calcoli e di mettere da parte

    dei risultati parziali. Per fare ciò, ci viene incontro la nozione di contenitore

    dei dati, cioè un’astrazione della nozione di area di memoria contenente dei

    dati. Tale contenitore di dati è detta variabile di un programma. In un

    programma avremmo tante variabili quanti sono i dati che ci interessa

    memorizzare! Ogni contenitore di dati (variabile) avrà un tipo; a seconda del

    tipo di variabile, avremo un insieme di elementi rappresentabili ed un

    insieme di operazioni possibili su di essa.

  • Andrea Prevete - UNINA2 - a.a. 2009/1021

    LINGUAGGI DI PROGRAMMAZIONE:

    LE BASICertamente avremo a che fare con variabili di tipo intero (int);

    ciascuna di queste variabili occuperà tipicamente 4 byte in

    memoria (32 bit) e permetterà di rappresentare un intervallo di

    numeri interi.

    Tra le operazioni possibili incontreremo certamente le classiche

    +, -, *, /, >,

  • Andrea Prevete - UNINA2 - a.a. 2009/1022

    Vi è poi da fare la distinzione tra dati di tipo semplice (Es. una variabile di tipo intero,

    reale, testo o logico) ed i dati di tipo strutturato. I dati di tipo strutturato sono dati

    composti, ad esempio matrici o vettori (es. [1 2 3 4 5]).

    Un altro dato di tipo strutturato sono i record: strutture non uniformi, cioè contenenti

    più valori non necessariamente dello stesso tipo.

    Esempio:

    1) NUM è una variabile di tipo int che vale 1

    L’istruzione PRINT(NUM) stamperà il valore di NUM, quindi 1

    2) VET è una variabile di tipo vettore di interi che contiene i tre interi 4, 5, -1

    L’istruzione PRINT(VET[3]) stamperà il valore del terzo elemento del vettore,

    quindi -1

    3) REC è una variabile record composta dai tre campi NOME, COGNOME,

    CODCLIENTE

    L’istruzione PRINT(VET.CODCLIENTE) stamperà il contenuto del campo

    CODCLIENTE del record corrente

    LINGUAGGI DI PROGRAMMAZIONE:

    LE BASI

  • Andrea Prevete - UNINA2 - a.a. 2009/1023

    Ma quali sono le istruzioni fondamentali

    per lavorare sui dati?

    Fondamentalmente tre:

    1) Istruzioni di Input / Output;

    2) Istruzioni di Assegnazione;

    3) Istruzioni di controllo.

    LINGUAGGI DI PROGRAMMAZIONE:

    LE BASI

  • Andrea Prevete - UNINA2 - a.a. 2009/1024

    INPUT/ OUTPUT

    Le istruzioni di ingresso / uscita permettono di

    acquisire dati e di presentare risultati.

    Ad esempio:

    read (a) - acquisisci un dato da tastiera ed assegnalo

    come valore alla variabile a;

    print ('La media dei valori dati in ingresso è ',

    media) - stampa il contenuto della variabile

    media , preceduto da una stringa commento

    LINGUAGGI DI

    PROGRAMMAZIONE: LE BASI

  • Andrea Prevete - UNINA2 - a.a. 2009/1025

    ASSEGNAZIONE

    Le istruzioni di assegnazione modificano lo stato di memoria, cioè i valori dei contenitori dati (detti variabili).

    Sono della forma:

    VARIABILE = ESPRESSIONE

    [(leggi: assegna a VARIABILE il valore di ESPRESSIONE)]

    Es.: a = b + 3

    ESPRESSIONE può essere una costante, una variabile, un’espressione algebrica, una funzione, etc

    Una volta calcolato il valore di ESPRESSIONE sostituisce il vecchio valore di VARIABILE

    LINGUAGGI DI

    PROGRAMMAZIONE: LE BASI

  • Andrea Prevete - UNINA2 - a.a. 2009/1026

    ISTRUZIONI DI CONTROLLO

    Le istruzioni di controllo permettono di pilotare il

    flusso di esecuzione delle istruzioni all’interno di un

    programma, altrimenti puramente sequenziale.

    Esempio:

    IF x > 0,

    esegui la prossima istruzione,

    ELSE

    termina l’esecuzione del programma.

    LINGUAGGI DI

    PROGRAMMAZIONE: LE BASI

  • Andrea Prevete - UNINA2 - a.a. 2009/1027

    LINGUAGGI DI

    PROGRAMMAZIONE: LE

    BASI

  • Andrea Prevete - UNINA2 - a.a. 2009/1028

    LINGUAGGI DI

    PROGRAMMAZIONE: LE

    BASI

  • Andrea Prevete - UNINA2 - a.a. 2009/1029

    LINGUAGGI DI

    PROGRAMMAZIONE: LE

    BASI

  • Andrea Prevete - UNINA2 - a.a. 2009/1030

    LINGUAGGI DI

    PROGRAMMAZIONE: LE

    BASI

  • Andrea Prevete - UNINA2 - a.a. 2009/1031

    LINGUAGGI DI

    PROGRAMMAZIONE: LE

    BASI

  • Andrea Prevete - UNINA2 - a.a. 2009/1032

    LINGUAGGI DI

    PROGRAMMAZIONE: LE

    BASI

    ESPR?

    CMD2 CMD1

    THEN (TRUE!)ELSE (FALSE!)

  • Andrea Prevete - UNINA2 - a.a. 2009/1033

    LINGUAGGI DI

    PROGRAMMAZIONE: LE

    BASI

  • Andrea Prevete - UNINA2 - a.a. 2009/1034

    LINGUAGGI DI

    PROGRAMMAZIONE: LE

    BASI

  • Andrea Prevete - UNINA2 - a.a. 2009/1035

    LINGUAGGI DI

    PROGRAMMAZIONE: LE

    BASI

  • Andrea Prevete - UNINA2 - a.a. 2009/1036

    LINGUAGGI DI

    PROGRAMMAZIONE: LE

    BASI

    BESPR?

    .. continua!

    CMD1

    TRUE

    FALSE

    CMDn

  • Andrea Prevete - UNINA2 - a.a. 2009/1037

    LINGUAGGI DI

    PROGRAMMAZIONE: LE

    BASI

  • Andrea Prevete - UNINA2 - a.a. 2009/1038

    LINGUAGGI DI

    PROGRAMMAZIONE: LE

    BASI

    .. continua!

    TRUE

    FALSEBESPR?

    CMD1

    CMDn

  • Andrea Prevete - UNINA2 - a.a. 2009/1039

    LINGUAGGI DI

    PROGRAMMAZIONE: LE

    BASI

  • Andrea Prevete - UNINA2 - a.a. 2009/1040

    LINGUAGGI DI

    PROGRAMMAZIONE: LE

    BASI

    .. continua!

    TRUE

    FALSEN

  • Andrea Prevete - UNINA2 - a.a. 2009/1041

    LINGUAGGI DI

    PROGRAMMAZIONE: LE

    BASI

  • Andrea Prevete - UNINA2 - a.a. 2009/1042

    LINGUAGGI DI

    PROGRAMMAZIONE: LE

    BASI

  • Andrea Prevete - UNINA2 - a.a. 2009/1043

    LINGUAGGI DI

    PROGRAMMAZIONE: LE

    BASI

  • Andrea Prevete - UNINA2 - a.a. 2009/1044

    LINGUAGGI DI

    PROGRAMMAZIONE: LE

    BASI

  • Andrea Prevete - UNINA2 - a.a. 2009/1045

    LINGUAGGI DI

    PROGRAMMAZIONE: LE

    BASI

  • Andrea Prevete - UNINA2 - a.a. 2009/1046

    LINGUAGGI DI

    PROGRAMMAZIONE: LE

    BASI