Programmazione Dr. Francesco Fabozzi Corso di Informatica.

27
Programmazione Dr. Francesco Fabozzi Corso di Informatica

Transcript of Programmazione Dr. Francesco Fabozzi Corso di Informatica.

Page 1: Programmazione Dr. Francesco Fabozzi Corso di Informatica.

Programmazione

Dr. Francesco FabozziCorso di Informatica

Page 2: Programmazione Dr. Francesco Fabozzi Corso 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

Page 3: Programmazione Dr. Francesco Fabozzi Corso di Informatica.

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

Page 4: Programmazione Dr. Francesco Fabozzi Corso di Informatica.

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!

Page 5: Programmazione Dr. Francesco Fabozzi Corso di Informatica.

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

Page 6: Programmazione Dr. Francesco Fabozzi Corso di Informatica.

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

Page 7: Programmazione Dr. Francesco Fabozzi Corso di Informatica.

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

Page 8: Programmazione Dr. Francesco Fabozzi Corso di Informatica.

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

+

+

Page 9: Programmazione Dr. Francesco Fabozzi Corso di Informatica.

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

Page 10: Programmazione Dr. Francesco Fabozzi Corso di Informatica.

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

Page 11: Programmazione Dr. Francesco Fabozzi Corso di Informatica.

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

Page 12: Programmazione Dr. Francesco Fabozzi Corso di Informatica.

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

Page 13: Programmazione Dr. Francesco Fabozzi Corso di Informatica.

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

Page 14: Programmazione Dr. Francesco Fabozzi Corso di Informatica.

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

Page 15: Programmazione Dr. Francesco Fabozzi Corso di Informatica.

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

Page 16: Programmazione Dr. Francesco Fabozzi Corso di Informatica.

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…

Page 17: Programmazione Dr. Francesco Fabozzi Corso di Informatica.

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

Page 18: Programmazione Dr. Francesco Fabozzi Corso di Informatica.

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…

Page 19: Programmazione Dr. Francesco Fabozzi Corso di Informatica.

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

Page 20: Programmazione Dr. Francesco Fabozzi Corso di Informatica.

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

Page 21: Programmazione Dr. Francesco Fabozzi Corso di Informatica.

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

Page 22: Programmazione Dr. Francesco Fabozzi Corso di Informatica.

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

Page 23: Programmazione Dr. Francesco Fabozzi Corso di Informatica.

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

Page 24: Programmazione Dr. Francesco Fabozzi Corso di Informatica.

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

Page 25: Programmazione Dr. Francesco Fabozzi Corso di Informatica.

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

Page 26: Programmazione Dr. Francesco Fabozzi Corso di Informatica.

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

Page 27: Programmazione Dr. Francesco Fabozzi Corso di Informatica.

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