Programmazione Dr. Francesco Fabozzi Corso di Informatica.
-
Upload
giachetta-motta -
Category
Documents
-
view
223 -
download
2
Transcript of Programmazione Dr. Francesco Fabozzi Corso di Informatica.
Programmazione
Dr. Francesco FabozziCorso di Informatica
2
Programmazione• La programmazione rappresenta la
seconda fase della risoluzione di un problema tramite un elaboratore– Consiste nella traduzione dell’algoritmo
definito nella fase di analisi in una serie di istruzioni che possano essere eseguite dai circuiti elettronici dell’elaboratore (programma)
• Il linguaggio di programmazione “comprensibile” dall’hardware si chiama linguaggio macchina
3
Linguaggio macchina• Strettamente legato all’hardware
dell’elaboratore– Chi programma in linguaggio macchina deve
conoscere l’hardware della macchina che deve eseguire il programma
• Le istruzioni e i dati sono stringhe binarie– La scrittura, lettura e il mantenimento di un
programma sono difficili– Operazioni anche semplici richiedono molte
istruzioni elementari
4
Linguaggio macchina
Esempio di istruzione in linguaggio macchina
0011 1000
8
Istruzione LOAD
Carica nel primo registro libero dellaCPU il numero 8
Rilevante sforzo da parte del programmatore anche per effettuare operazioni semplici!
5
Linguaggi simbolici• I linguaggi simbolici si collocano a un livello
immediatamente superiore al linguaggio macchina– Si parla di “linguaggi a basso livello”
• Codifica simbolica delle istruzioni anziché binaria– Ogni istruzione è identificata da una sigla– Una variabile può essere rappresentata da un
nome
6
Linguaggi simbolici• I linguaggi simbolici necessitano di un
programma per tradurre le istruzioni in linguaggio macchina (programma assemblatore)– Questi linguaggi sono detti anche linguaggi
assembler o assembly
7
Linguaggi simbolici
Esempio di istruzione in linguaggio assembler
MOV A 7 Scrivi 7 nella variabile A
Il vantaggio di un linguaggio assembler su un linguaggio ad alto livello è la possibilità di ottimizzare il programma rispetto ai tempi di esecuzione
8
Linguaggi ad alto livello• I linguaggi ad alto livello non sono legati
alle componenti fisiche dell’elaboratore– Sono più vicini al linguaggio naturale rispetto al
linguaggio macchina
Linguaggio macchina
Assembler
Linguaggi ad alto livello
Linguaggio naturale
pre
cisi
one
pote
nza
espressiva
+
+
9
Linguaggi ad alto livello• Ma rispetto al linguaggio naturale sono un
linguaggio di programmazione ad alto livello è più formale e preciso– Caratterizzato da una rigida semantica,
grammatica e sintassi
• Anche per i linguaggi ad alto livello sono necessari programmi per la traduzione di un programma in linguaggio macchina– Programmi compilatori e interpreti
10
Linguaggi ad alto livello• Vantaggi
– Portabilità: lo stesso programma può essere usato su diversi elaboratori
– Leggibilità– Mantenibilità: più facile correggere ed evolvere
il programma anche da parte di persone diverse dall’autore originale
• Svantaggio– Minore efficienza: controllo limitato sulla
modalità di traduzione del compilatore
11
Programmazione strutturata• Approccio disciplinato alla
programmazione nato negli anni ’60
• Obiettivi: realizzare programmi chiari, leggibili, facili da testare e modificare– Facilita il mantenimento del software
• Elementi basilari:– eliminazione dei salti– uso sistematico degli schemi di sequenza,
selezione, iterazione
12
Linguaggi procedurali• Una categoria di linguaggi di alto livello è
quella dei linguaggi procedurali– Il programma viene diviso in diverse unità
(procedure) ciascuna preposta allo svolgimento di una certa azione
• Una procedura può essere “chiamata” da un’altra e possono scambiarsi dati
– Il programma appare come una sequenza di chiamate di procedure accompagnato da un conseguente flusso di dati
13
Linguaggi Object-Oriented• Esistono anche linguaggi non procedurali
• Citiamo per la loro importanza i cosiddetti “linguaggi orientati agli oggetti”– Nel programma vengono definiti dei
componenti software che modellizzano gli elementi del problema (oggetti)
• Vengono definite le loro proprietà e azioni insieme alla loro interfaccia-utente
– Il programma appare come una serie di oggetti che sono creati all’occorrenza e ai quali si possono impartire comandi
14
Ambiente di sviluppo• Per scrivere un programma abbiamo
bisogno di altri programmi!
• Si dice ambiente di sviluppo l’insieme dei programmi che sono di ausilio alla scrittura di programmi applicativi in un certo linguaggio di programmazione
15
Ambiente di sviluppo• Un ambiente di sviluppo deve fornire:• Editor: per la scrittura mediante tastiera del
programma sorgente• Programmi traduttori: per la traduzione in
linguaggio macchina del programma sorgente– Interprete oppure compilatore
• Debugger: per la ricerca di errori (detti anche bachi o bug)– Analizza l’esecuzione del programma verificando
passo passo il risultato delle singole istruzioni
16
Programma interprete• Cosa fa un programma interprete:
– traduce ciascuna istruzione del programma sorgente in istruzioni macchina
– la esegue– passa all’istruzione successiva
• In caso di errore:– Si può correggere subito l’errore nel
programma che potrà riprendere dal punto in cui si era interrotto
• Ma…
17
Programma interprete• Ma…
– In genere programmi complessi hanno istruzioni che si ripetono diverse volte
– Questo significa che la traduzione in linguaggio macchina verrà ripetuta ogni volta
• I programmi interpreti sono poco efficienti per l’esecuzione di programmi complessi
18
Compilatore• Cosa fa un compilatore:
– traduce l’intero programma sorgente in un programma in codice macchina (programma oggetto)
– Istruzioni ripetute sono tradotte una sola volta
• Esistono compilatori ottimizzati– Generano un codice macchina particolarmente
efficiente per un migliore utilizzo delle risorse hardware
• Ma…
19
Compilatore• Ma…
– In caso di errore bisogna ricompilare il tutto e rigirare il programma dall’inizio
– I compilatori ottimizzati danno meno informazioni in caso di errore
20
Compilatore• Per ovviare al problema di ricompilare tutto
il programma in caso di errore, si divide il programma in moduli più piccoli da compilare separatamente– Ottengo un certo numero di programmi oggetto– I programmi oggetto contengono solo gli
indirizzi di memoria relativi ma non quelli assoluti
21
Compilatore• Si rende pertanto necessario un altro
programma: programma assemblatore (Linker)
• Il linker trasforma i vari programmi oggetto in un unico programma eseguibile – Assegna gli indirizzi di memoria assoluti– Associa anche le librerie necessarie
22
Librerie• Spesso programmi diversi richiedono di eseguire
lo stesso tipo di operazioni– Ad esempio il calcolo della radice quadrata di un
numero
• E’ utile incapsulare queste operazioni in programmi (o program unit) separati che possono essere linkate alla fine col programma principale (main program)
• E’ preferibile pre-compilare tutti questi programmi separatamente e raggruppare i programmi oggetto in collezioni (dette librerie) che vengono linkate all’occorrenza dal linker
23
Dai sorgenti all’eseguibile
Scrivo programmicon un editor
programma sorgente
programma oggetto (file .obj)
programma eseguibile (file .exe)
programma sorgente
programma sorgente
programma oggetto (file .obj)
programma oggetto (file .obj)
compilazione linkingediting
24
Cenni storici• Inizio anni ’50
– Nascono i linguaggi simbolici
• 1956: nasce il FORTRAN (FORMula TRANslator)– Primo linguaggio ad alto livello– Per scopi scientifici ed ingegneristici
• 1960: nasce il COBOL (COmmon Business Oriented Language)– Semplice e versatile– Per applicazioni commerciali e gestionali
25
Cenni storici• 1960-1970: proliferazione di numerosi
linguaggi, tentativo di razionalizzare la definizione e le tecniche di implementazione dei linguaggi– Nasce l’ALGOL 60 (viene considerato il
capostipite dei linguaggi moderni)
• Inizio anni ’70: diffusione di linguaggi strettamente aderenti ai principi della programmazione strutturata
26
Cenni storici• 1971: nasce il Pascal
– Nasce in ambito scientifico, largo uso didattico– Uso coerente della programmazione
strutturata
• 1974: nasce il C– Nasce in ambito scientifico– Struttura aderente ai principi della
programmazione strutturata– Molto diffuso: programmi per la risoluzione di
problemi molto complessi e per il software di base di sistemi
27
Cenni storici• Anni ’70: nasce il SIMULA 67
– Capostipite dei linguaggi Object-Oriented
• Dagli anni ’80 a oggi: sviluppo di linguaggi non procedurali, affermazione dei linguaggi Object-Oriented– Versioni ad oggetti del C (C++) e del Pascal
(TurboPascal 5.5)– VisualBasic, Java