programmazione - polito.it · 2019-03-12 · ha un basso livello di astrazione è più facile da...
TRANSCRIPT
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 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
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 baseeseguendo 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
somma
stampa
leggi
calcola
...
Sorgente
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
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
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
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
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 unicofile eseguibileLa 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
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
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
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
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