Programmazione Dr. Francesco Fabozzi Corso di Informatica.

Post on 01-May-2015

223 views 2 download

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