Programmazione - polito.it · 2019-03-12 · ha un basso livello di astrazione è più facile da...

23
La programmazione Ver. 2.4.1 © 2010 - Claudio Fornaro - Corso di programmazione in C

Transcript of Programmazione - polito.it · 2019-03-12 · ha un basso livello di astrazione è più facile da...

Page 1: Programmazione - polito.it · 2019-03-12 · ha un basso livello di astrazione è più facile da ricordare (ad es. per avere una somma invece di scrivere 1001001 si scrive ADD) viene

La programmazione

Ver. 2.4.1

© 2010 - Claudio Fornaro - Corso di programmazione in C

Page 2: Programmazione - polito.it · 2019-03-12 · ha un basso livello di astrazione è più facile da ricordare (ad es. per avere una somma invece di scrivere 1001001 si scrive ADD) viene

2

Programmazione La programmazione è quell’attività che porta a

sviluppare un software, ossia un programma Se esiste un procedimento che:

può essere descritto in modo non ambiguo conduce sempre all'obiettivo desiderato in un

tempo finitoallora esistono le condizioni per affidare questo compito a un calcolatore

Questo procedimento si chiama algoritmo Esempi di algoritmi non informatici:

Una ricetta di cucina Il metodo per risolvere un’equazione di 2o grado

Page 3: Programmazione - polito.it · 2019-03-12 · ha un basso livello di astrazione è più facile da ricordare (ad es. per avere una somma invece di scrivere 1001001 si scrive ADD) viene

3

Algoritmo Proprietà fondamentali dell'algoritmo:

la sequenza delle operazioni deve essere finita (finitezza);

la sequenza delle operazioni deve portare ad un risultato (efficacia);

le istruzioni devono essere eseguibili materialmente (realizzabilità);

le istruzioni devono essere espresse in modo non ambiguo (non ambiguità).

È importante valutare le risorse utilizzate (tempo, memoria, …) perché un consumo eccessivo delle stesse può pregiudicare la possibilità stessa di utilizzo di un algoritmo

Page 4: Programmazione - polito.it · 2019-03-12 · ha un basso livello di astrazione è più facile da ricordare (ad es. per avere una somma invece di scrivere 1001001 si scrive ADD) viene

4

Programma Il calcolatore mette a disposizione molte

operazioni di base: somma, sottrazione, AND, spostamenti di valori, letture da periferici, ecc.

L’attività del programmatore consiste nell’inventare una sequenza di operazioni di baseeseguendo le quali il calcolatore risolve un problema

Il programmatore “insegna” al calcolatore come risolvere un problema

Page 5: Programmazione - polito.it · 2019-03-12 · ha un basso livello di astrazione è più facile da ricordare (ad es. per avere una somma invece di scrivere 1001001 si scrive ADD) viene

5

Linguaggi Perché il programmatore possa istruire il

calcolatore sulle operazioni da fare, serve un linguaggio noto ad entrambi

Problema: Il calcolatore comprende solo sequenze di zeri e

uno (ad es. la sequenza 1001001 potrebbe significare, per un ipotetico calcolatore, “fai la somma”): linguaggio macchina

Il programmatore comprende le parole “fai la somma” (mentre 1001001 non significa nulla per lui): linguaggio umano

Page 6: Programmazione - polito.it · 2019-03-12 · ha un basso livello di astrazione è più facile da ricordare (ad es. per avere una somma invece di scrivere 1001001 si scrive ADD) viene

6

Linguaggio di programmazione Soluzione 1

Il programmatore impara il linguaggio macchina, ma questo: ha un basso livello di astrazione (scende molto nei

dettagli realizzativi e perde la visione di insieme del problema da risolvere)

è difficile da ricordare (le istruzioni possono essere diverse centinaia)

è diverso per ogni piattaforma hardware (ogni tipo di microprocessore ha il suo set di istruzioni)

Page 7: Programmazione - polito.it · 2019-03-12 · ha un basso livello di astrazione è più facile da ricordare (ad es. per avere una somma invece di scrivere 1001001 si scrive ADD) viene

7

Linguaggio di programmazione Soluzione 2

Il programmatore impara un linguaggio simile al linguaggio macchina detto assembly (in Italia molti lo chiamano assembler)

Ogni istruzione del linguaggio assembly corrisponde ad un’istruzione in linguaggio macchina, ma ha il vantaggio di essere mnemonico (es. ADD è l’istruzione per calcolare una somma)

Page 8: Programmazione - polito.it · 2019-03-12 · ha un basso livello di astrazione è più facile da ricordare (ad es. per avere una somma invece di scrivere 1001001 si scrive ADD) viene

8

Linguaggio di programmazione Soluzione 2 (Continuazione) Il linguaggio assembly:

ha un basso livello di astrazione è più facile da ricordare (ad es. per avere una

somma invece di scrivere 1001001 si scrive ADD) viene tradotto in linguaggio macchina da un

programma relativamente semplice (assembler ) che, in linea di massima, sostituisce le istruzioni assembly con le corrispondenti istruzioni macchina

è diverso per ogni tipo di microprocessore (sebbene possano essere simili) e può essercene più di uno per lo stesso processore

Page 9: Programmazione - polito.it · 2019-03-12 · ha un basso livello di astrazione è più facile da ricordare (ad es. per avere una somma invece di scrivere 1001001 si scrive ADD) viene

9

Linguaggio di programmazione Soluzione 3

Il programmatore impara un linguaggio di programmazione ad alto livello (HLL) un traduttore complesso ed efficiente lo traduce in

linguaggio macchina o in assembly ha un alto livello di astrazione (esprime le

operazioni da svolgere senza entrare nei dettagli, es. A+B calcola la somma di due valori)

è più simile al linguaggio umano e quindi più facile da ricordare (es. “print X” potrebbe essere l’istruzione per visualizzare il valore di X)

è (quasi) indipendente da piattaforma hardware e sistema operativo (PC, Mac, Windows, Linux, ecc.), è il traduttore che lo converte per il sistema in uso

Page 10: Programmazione - polito.it · 2019-03-12 · ha un basso livello di astrazione è più facile da ricordare (ad es. per avere una somma invece di scrivere 1001001 si scrive ADD) viene

10

Programma sorgente Il programmatore sviluppa un programma

scrivendo in un linguaggio di programmazione (di alto o basso livello) le operazioni da far eseguire al calcolatore e le memorizza in un file detto: programma programma sorgente codice sorgente sorgente

Page 11: Programmazione - polito.it · 2019-03-12 · ha un basso livello di astrazione è più facile da ricordare (ad es. per avere una somma invece di scrivere 1001001 si scrive ADD) viene

11

Traduttore di tipo interprete Le istruzioni del codice sorgente vengono ad

una ad una tradotte in linguaggio macchina e subito eseguite dalla CPU

somma

stampa

leggi

calcola

...

Sorgente

Page 12: Programmazione - polito.it · 2019-03-12 · ha un basso livello di astrazione è più facile da ricordare (ad es. per avere una somma invece di scrivere 1001001 si scrive ADD) viene

12

Traduttore di tipo compilatore Tutto il codice sorgente viene tradotto in

linguaggio macchina e memorizzato in un file detto programma (o file o codice) eseguibile

somma

stampa

leggi

calcola

...

Sorgente1001001010101001010010101010010010100101010010100101010101010101101010010101001001001010010

Eseguibile

Page 13: Programmazione - polito.it · 2019-03-12 · ha un basso livello di astrazione è più facile da ricordare (ad es. per avere una somma invece di scrivere 1001001 si scrive ADD) viene

13

DifferenzeVelocità di esecuzione Ogni volta che l’interprete esegue un

programma, deve attuare la traduzione delle istruzioni in linguaggio macchina: lento

Il programma compilato è già tradotto e ha quindi una velocità di esecuzione molto superiore

Il compilatore è normalmente in grado di ottimizzare il codice (macchina) su richiesta del programmatore per produrre o un programma più veloce o un programma più piccolo

Page 14: Programmazione - polito.it · 2019-03-12 · ha un basso livello di astrazione è più facile da ricordare (ad es. per avere una somma invece di scrivere 1001001 si scrive ADD) viene

14

DifferenzeCompetenze per l’uso Eseguire un programma interpretato richiede

l’acquisto del programma interprete da parte dell’utente finale e l’acquisizione da parte di questi delle competenze necessarie al suo uso

Eseguire un programma compilato non richiede che una semplice interazione, ad esempio un doppio-click

Il compilatore viene acquistato solo dal programmatore e solo questi ha la necessità di avere la competenza necessaria per utilizzarlo

Page 15: Programmazione - polito.it · 2019-03-12 · ha un basso livello di astrazione è più facile da ricordare (ad es. per avere una somma invece di scrivere 1001001 si scrive ADD) viene

15

DifferenzeCopyright e gestione della complessità L’interprete richiede il codice sorgente del

programma che quindi risulta visibile e modificabile da chiunque

Il programma eseguibile non necessita del sorgente: protezione del copyright

La procedura di compilazione permette di suddividere un programma complesso in più parti

Page 16: Programmazione - polito.it · 2019-03-12 · ha un basso livello di astrazione è più facile da ricordare (ad es. per avere una somma invece di scrivere 1001001 si scrive ADD) viene

16

Librerie In un HLL il programmatore non ha necessità

di programmare le funzioni di base (ad es. leggere un numero dalla tastiera, calcolare la tangente, visualizzare un testo, ecc.)

Queste operazioni sono state programmate e compilate dal produttore del traduttore e sono a disposizione del programmatore sotto forma di funzioni (es. tan(x) calcola la tangente)

I codici eseguibili (quindi già tradotti in linguaggio macchina) che realizzano queste funzioni vengono raggruppati in file detti librerie (collezioni di funzioni di base)

Page 17: Programmazione - polito.it · 2019-03-12 · ha un basso livello di astrazione è più facile da ricordare (ad es. per avere una somma invece di scrivere 1001001 si scrive ADD) viene

17

Creazione di un eseguibile Il processo di creazione di un eseguibile a

partire dai sorgenti (build) è composto da 2 fasi: compilazione: il sorgente viene compilato, ma

alcune parti (le “funzioni di base”) sono ancora mancanti; viene generato un file intermedio detto file oggetto

linking: il file oggetto e le librerie vengono unite (collegate – “link”) così da aggiungere al file oggetto le parti mancanti e costituire un unicofile eseguibileLa fase di link può creare un eseguibile collegando insieme più file oggetti e più librerie

Page 18: Programmazione - polito.it · 2019-03-12 · ha un basso livello di astrazione è più facile da ricordare (ad es. per avere una somma invece di scrivere 1001001 si scrive ADD) viene

18

Librerie statiche Nella compilazione il codice delle funzioni di

libreria viene inserito nel file eseguibile

File eseguibile

File oggetto

File libreria

Page 19: Programmazione - polito.it · 2019-03-12 · ha un basso livello di astrazione è più facile da ricordare (ad es. per avere una somma invece di scrivere 1001001 si scrive ADD) viene

19

RAM

Librerie statiche Spesso le stesse librerie sono usate da più

programmi (es. le operazioni di input/output): spreco di memoria

Eseguibile AOggetto A

Libreria

Eseguibile COggetto C

Libreria

Eseguibile BOggetto B

Libreria

Page 20: Programmazione - polito.it · 2019-03-12 · ha un basso livello di astrazione è più facile da ricordare (ad es. per avere una somma invece di scrivere 1001001 si scrive ADD) viene

20

Librerie dinamiche Dynamic Link Libraries (DLL) Shared Libraries, Shared Objects Nella compilazione il codice delle funzioni di

libreria NON è inserito nel file eseguibile, viene invece indicato il nome del file che lo contiene

File eseguibile

File oggetto File libreria

Page 21: Programmazione - polito.it · 2019-03-12 · ha un basso livello di astrazione è più facile da ricordare (ad es. per avere una somma invece di scrivere 1001001 si scrive ADD) viene

21

RAM

Eseguibile AOggetto A

Eseguibile COggetto C

Eseguibile BOggetto B

Libreria

Librerie dinamiche Quando viene eseguito un programma che

usa quella libreria, questa viene caricata in memoria, ma è utilizzabile anche dagli altri programmi

Page 22: Programmazione - polito.it · 2019-03-12 · ha un basso livello di astrazione è più facile da ricordare (ad es. per avere una somma invece di scrivere 1001001 si scrive ADD) viene

22

Librerie dinamiche Quando viene eseguito un altro programma

che necessita di quella libreria, questa è già caricata in memoria e pronta all’uso: il programma impiega meno tempo a partire

Se una delle funzioni della libreria deve essere aggiornata (es. nuova versione), è sufficiente sostituire la DLL mentre il programma non viene modificato

Problemi: se la DLL manca, il programma non può essere eseguito; se viene sostituita da un’altra contenente il codice di un virus, il lancio del programma esegue il virus!

Page 23: Programmazione - polito.it · 2019-03-12 · ha un basso livello di astrazione è più facile da ricordare (ad es. per avere una somma invece di scrivere 1001001 si scrive ADD) viene

23

Interfacce utente L’interazione tra utente e programma può

avvenire tramite interfacce: a carattere (console mode):

vengono visualizzate e immesse solo righe di testo;l’utente interagisce soltanto con video e tastiera

grafiche (GUI – Graphical User Interface):vengono visualizzati pannelli, bottoni, caselle di testo, immagini, ecc.;l’utente interagisce con video, tastiera e mouse

Molti linguaggi dispongono di entrambe le interfacce