Sei sulla pagina 1di 23

La programmazione

Ver. 2.4.1

© 2010 - Claudio Fornaro - Corso di programmazione in C


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 finito
allora 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
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
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 base
eseguendo le quali il calcolatore risolve un
problema
 Il programmatore “insegna” al calcolatore
come risolvere un problema
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
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)
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)
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
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
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
11

Traduttore di tipo interprete


 Le istruzioni del codice sorgente vengono ad
una ad una tradotte in linguaggio macchina e
subito eseguite dalla CPU

Sorgente
somma
stampa
leggi
calcola
...
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

Sorgente Eseguibile
somma 1001001010101
0010100101010
stampa
1001001010010
leggi 1010010100101
0101010101011
calcola
0101001010100
... 1001001010010
13

Differenze
Velocità 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
14

Differenze
Competenze 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
15

Differenze
Copyright 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
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)
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 unico
file eseguibile
La fase di link può creare un eseguibile collegando
insieme più file oggetti e più librerie
18

Librerie statiche
 Nella compilazione il codice delle funzioni di
libreria viene inserito nel file eseguibile

File eseguibile

File oggetto

File libreria
19

Librerie statiche
 Spesso le stesse librerie sono usate da più
programmi (es. le operazioni di input/output):
spreco di memoria

Eseguibile A Eseguibile B Eseguibile C


Oggetto A Oggetto B Oggetto C

Libreria Libreria Libreria

RAM
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
21

Librerie dinamiche
 Quando viene eseguito un programma che
usa quella libreria, questa viene caricata in
memoria, ma è utilizzabile anche dagli altri
programmi

Eseguibile A Eseguibile B Eseguibile C


Oggetto A Oggetto B Oggetto C

Libreria
RAM
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!
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

Potrebbero piacerti anche