Sei sulla pagina 1di 47

Introduzione alla

programmazione
Informatica Generale – 14/15
Scienze della comunicazione

cristina gena

cgena@di.unito.it
http://www.di.unito.it/~cgena/
teaching.html
Concetti fondamentali di programmazione

I calcolatori hanno la caratteristica di essere


programmabili:

sono in grado di svolgere compiti diversi a seconda


delle istruzioni fornite dall’utente mediante un
programma

Tuttavia una programmazione diretta della


macchina hardware creerebbe serie difficoltà!

2
Concetti fondamentali di programmazione

Grazie alla definizione di macchine virtuali (software) sopra la


macchina hardware l’utente riesce ad interagire con la
macchina fisica usando un opportuno linguaggio di comandi

Il software moderno è organizzato secondo una gerarchia di


macchine virtuali

Il primo strato di macchina virtuale è rappresentato dall’insieme


di programmi che costituiscono il sistema operativo

3
Concetti fondamentali di programmazione

Funzioni sempre più astratte


Gerarchia di macchine virtuali:
Macchina virtuale n
Per ogni funzione definita
al livello i, viene definita la
traduzione nel linguaggio
Macchina virtuale 1 del livello sottostante i-1
Macchina hardware

Le macchine virtuali non consentono di fare nulla di più di


quanto possa essere fatto con la macchina fisica

4
Concetti fondamentali di programmazione

Concetto di gerarchia di macchine virtuali possibilità di definire


nuove funzioni astratte, che verranno tradotte per i livelli sottostanti

Programmare = definire un nuovo insieme di “comandi virtuali” che


consistono in una sequenza di istruzioni che devono essere eseguite

Per scrivere un programma ho bisogno di un linguaggio di


programmazione "ad alto livello" cioè che mi permette di definire
funzioni (comandi) virtuali in cima alla gerarchia

5
Concetti fondamentali di programmazione

Per eseguire un programma (scritto in un linguaggio di


programmazione ad alto livello) devo tradurlo nel
linguaggio della macchina virtuale sottostante… fino ad
arrivare alla traduzione nel linguaggio macchina

Per eseguire un programma ho quindi bisogno di:


Sistema Operativo (insieme di programmi per la gestione
dell’elaboratore)‫‏‬

Interpreti e compilatori (programmi che traducono le


funzioni dei linguaggi ad alto livello in funzioni
appartenenti ai linguaggi sottostanti… fino al linguaggio
macchina)‫‏‬
6
Concetti fondamentali di programmazione

Programma scritto dal programmatore = insieme di


istruzioni scritte in un linguaggio di programmazione
ad alto livello = codice sorgente (generalmente
contenuto in un file con un'estensione che indica il
linguaggio usato, per es: pippo.java, o pippo.c)‫‏‬

7
Concetti fondamentali di programmazione

Linguaggio:
alfabeto: insieme di simboli con cui si possono costruire i termini
del linguaggio (lessico)‫‏‬
sintassi: definita da una grammatica che fornisce le regole di
composizione dei termini in frasi ben formate del linguaggio
semantica: definisce il significato delle frasi ben formate del
linguaggio

Analizzatore sintattico (parser):


analizza frasi e decide se sono frasi ben formate del linguaggio o
no

8
Sintassi
articoli (indicati con ART)
nomi (indicati con N)
aggettivi (indicati con A)
verbi (indicati con V)

sintagma nominale (indicato con SN)


sintagma verbale (indicato con SV)
frase (indicata con F)

9
Codice

frase (indicata con F)  SN SV


sintagma verbale (indicato con SV)  V SN
sintagma nominale (indicato con SN)  ART N

10
Sintassi
il cane mangia una mela
il cane mangia il cane

mentre saranno scorrette frasi del tipo


il cane il mela
mangia il cane la mela

11
Semantica

la ragazza mangia un pollo 


corretto

un pollo mangia la ragazza 


scorretto

12
Concetti fondamentali di programmazione

Linguaggio di programmazione:
frasi ben formate = codice del programma
semantica = esecuzione del programma

Occorre tradurre il programma (scritto in un linguaggio ad alto livello)


in istruzioni in linguaggio macchina
Durante questa traduzione viene anche effettuato il controllo
sintattico!

Due tecniche per effettuare questa traduzione:


compilazione
interpretazione

13
Concetti fondamentali di programmazione

Compilare un programma:
tradurre il programma P nel linguaggio macchina della macchina M → Pc
eseguire Pc sulla macchina M
La traduzione viene eseguita da un compilatore.
> compila file_sorgente.src → file_eseguibile.exe
> esegui file_eseguibile.exe
Pro:
La compilazione è più efficiente, perché l’esecuzione del programma
compilato, cioè tradotto in linguaggio macchina (il cosiddetto
“eseguibile”) è molto veloce
Contro:
Per eseguire il programma su macchine diverse occorre ri-compilare i
sorgenti!

14
Concetti fondamentali di programmazione

Interpretare un programma:
richiedere l’esecuzione del programma P sulla macchina M

ogni istruzione di P viene tradotta (interpretata) in un insieme di


istruzioni nel linguaggio macchina di M → Pi

l’insieme di istruzioni Pi viene eseguito sulla macchina M


La traduzione viene eseguita da un interprete.
> interpreta&esegui file_sorgente.src

Pro:
L’interpretazione è più flessibile, perché posso eseguire il
programma su macchine diverse
Contro:
E’ meno efficiente (perché ogni volta, prima di eseguire, ritraduce)‫‏‬

15
Concetti fondamentali di programmazione

Approccio misto (per es. Java):


tradurre il programma in un linguaggio intermedio (bytecode),
indipendente dalla macchina → Pb
eseguire Pb
Il primo passo viene eseguito da un compilatore
Il secondo da un interprete

> compile file_sorgente.src → file_intermedio.obj


> interpreta&esegui file_intermedio.obj

Somma i vantaggi dei due approcci:


è efficiente (perché il linguaggio intermedio è “molto vicino” al
linguaggio macchina e la sua interpretazione - ed esecuzione - è
veloce)‫‏‬
è flessibile (perché posso eseguire il programma compilato su
macchine diverse)‫‏‬
16
Linguaggi ad alto livello
Linguaggi imperativi
Basati sul concetto di assegnamento: le istruzioni sono sostanzialmente
operazioni di modifica delle strutture dati
[es: Fortran, Cobol (non strutturati); Pascal, C (strutturati)]
Linguaggi funzionali
Basati sul concetto di funzione: le istruzioni sono funzioni che vengono valutate
[es: Lisp]
Linguaggi logici
Basati sul concetto di dimostrazione: le istruzioni esprimono relazioni logiche
tra input e output [es: Prolog]
Linguaggi ad oggetti
Basati sul concetto di dato come oggetto attivo, in grado di ricevere e inviare
messaggi [es: Smalltalk, C++, CLOS, Java]
Linguaggi di scripting
Linguaggi di programmazione interpretati che sono destinati in genere a compiti
di automazione del sistema o delle applicazioni (macro), o ad essere usato
all'interno delle pagine web. [es: Javascript, Php, Asp, Jsp, Python] 17
Concetti fondamentali di programmazione

Scopo di un programma è quello di risolvere un problema (un’insieme di


problemi)‫‏‬
bisogna analizzare il problema ed identificare una procedura di soluzione,
ovvero un algoritmo
Un algoritmo è insieme ordinato di passi che descrivono i dati che
devono essere utilizzati e determinano la sequenza di azioni
elementari che devono essere svolte per risolvere un problema
(un insieme di problemi)
bisogna poi tradurre l’algoritmo in un insieme di istruzioni per eseguire
quelle azioni sui dati = programma

Se il problema è complesso (es: gestione automatizzata di conti correnti


bancari) occorre un sistema software (= insieme di programmi)‫‏‬

18
Concetti fondamentali di programmazione

Nello sviluppo del software, la fase di analisi e progettazione


è importantissima

Si parte dall’analisi del problema e dalla progettazione


dell’architettura del sistema

Si passa poi alla realizzazione delle diverse componenti


dell’architettura

19
Concetti fondamentali di programmazione

Metodo classico di software design = top-down functional (structured)


design = scomposizione gerarchica funzionale (algoritmica)‫‏‬

paradigma procedurale: algoritmo = procedura ossia


Gestire il
sequenza di passi per raggiungere il risultato cc
Per es. gestire un cc =
scomposizione in passi via via più Inserire dati Versare prelevare
semplici, elementari = procedura soldi
per la gestione del conto
ins. PIN Eseguire
operazioni
ver. PIN

PROGRAMMI = ALGORITMI + STRUTTURE-DATI

20
Concetti fondamentali di programmazione

Object-oriented design

Ogni cosa è un oggetto

Un programma è un insieme di oggetti che si dicono


l’un l’altro che cosa fare inviandosi messaggi

Ogni oggetto ha un tipo un oggetto è un’istanza di una


classe

Tutti gli oggetti di un determinato tipo possono


ricevere e inviare gli stessi messaggi

21
Concetti fondamentali di programmazione

object-oriented design = si parte dagli oggetti, non dalle


funzionalità

PROGRAMMI = OGGETTI (DATI + ALGORITMI) +


COLLABORAZIONE (INTERFACCE)‫‏‬
Per es. gestire i conti correnti di una banca = entità coinvolte
nell'attività e loro relazioni

verifica PIN
Riceve PIN PIN
autorizz.
cliente
Riceve. versaSoldi. conto
EstrattoConto

22
Concetti fondamentali di programmazione

Astrazioni sui dati


•  Dati di base di un calcolatore:
–  Bit
–  Byte
–  Cella di memoria

23
Concetti fondamentali di programmazione

Tipi di dati
•  Necessità di astrarre dal concetto elementare
di bit/byte e definire dei tipi di informazione
più vicini a quelli che servono della
definizione di problemi reali

24
Concetti fondamentali di programmazione

Tipi di dati: Due passi


•  Definizione di tipi elementari di base
•  Definizione di costruttori per aggregare in
tipi di dati più complessi

25
Concetti fondamentali di programmazione

Tipi elementari di base


•  Ci possono essere differenze da linguaggio a
linguaggio
•  Numerici
–  Int
–  Short
–  Long
–  Real
–  Double
26
Concetti fondamentali di programmazione

Tipi elementari di base


•  Stringhe
–  Char (ASCII su 8 bit, e UNICODE su 16)‫‏‬
–  String: qualche linguaggio lo ha come tipo di
base

27
Concetti fondamentali di programmazione

Tipi elementari di base


•  Boolean
–  TRUE e FALSE
•  Per le enumerazioni
–  Elenchi di costanti specificate
• Es. colori: red, blue, white, black,..

28
Concetti fondamentali di programmazione

Per ogni tipo elementare sono definiti degli operatori


•  Numerici
+ * - / sqrt…
•  Caratteri
–  Succ, prec
•  Stringhe
–  Concact, add, Substring…
•  Boolean
–  And, not, or…

29
Concetti fondamentali di programmazione
Variabili, espressioni, assegnamento
•  Assegnamento
–  Modo per inserire un valore dentro una
variabile
int x
x=3
x=3+5
int y = x + 7

x = “c” errore di tipo di dati


30
Concetti fondamentali di programmazione

Variabili, espressioni, assegnamento


•  Assegnamento

variabile = espressione

Lato sinistro (left hand side)‫‏‬


Deve essere una variabile

Lato destro (right hand side)‫‏‬


Espressione che viene valutata
31
Concetti fondamentali di programmazione
La memoria principale
• E’ formata da un insieme di celle
• Ogni cella ha un indirizzo e un contenuto

3278 “a”

3279 “b”

32
Concetti fondamentali di programmazione
Nome simbolico per la cella di memoria:
variabile

x “a”

x = “a”
y “b”

A x è associato
l’indirizzo 3278
33
Concetti fondamentali di programmazione

Espressioni, assegnamento
•  Espressione
–  Può essere costruita usando costanti e variabili
e usando gli operatori specificati per il tipo di
dati costanti e variabili
int x

x = 2+4
x=y+z

34
Concetti fondamentali di programmazione

Tipi di dati: Due passi


•  Definizione di tipi elementari di base
•  Definizione di costruttori per aggregare in
tipi di dati più complessi

35
Concetti fondamentali di programmazione

Costruttori per creare tipi complessi

•  Approccio composizionale per aggregare tipi di dati in nuovi tipi di dati


più complessi

•  Il numero e le caratteristiche dei costruttori di tipi complessi può


variare da linguaggio a linguaggio, ma i meccanismi fondamentali sono
–  Array
–  Record
–  Set
–  File
–  Puntatori

36
Concetti fondamentali di programmazione
Array: struttura dati (vettore) composta da dati omogenei,
aventi lo stesso tipo

23
9
5
45
Array di interi 78
0
99
3
52
9

37
Concetti fondamentali di programmazione
Array: struttura dati composta da dati omogenei, aventi lo stesso tipo

listaDiNumeri[0] 23 Il selettore [] permette di accedere


alle componenti del vettore
listaDiNumeri[1] 9 attraverso la loro posizione
listaDiNumeri[2] 5
listaDiNumeri[3] 45 listaDiNumeri[0] = 23;
listaDiNumeri[4] listaDiNumeri[1] = 4 + 5;
78
listaDiNumeri[5] 0 x = 0;
listaDiNumeri[6] 99 listaDiNumeri[x] = 23;
listaDiNumeri[7] 3 x = x+1;
listaDiNumeri[8] 52 listaDiNumeri[x] = 4 + 5;
listaDiNumeri[9] 9

38
Concetti fondamentali di programmazione
Array
•  Si possono definire vettori di qualunque tipo di dati
•  Le dimensioni del vettore possono essere soggette a restrizioni in alcuni
linguaggi
–  Devono essere prefissate in alcuni, non in altri
•  Gli indici del vettore possono essere fissi (solo numeri interi) in alcuni
linguaggi, o possono essere un qualunque tipo elementare

39
Concetti fondamentali di programmazione
Record
Prodotto cartesiano di tipi differenti. Le sue istanze sono gli elementi del
prodotto cartesiano

Record conto
{contatore numero,
int denaro,
char[] nome}

Le istanze di questo record sono delle triple, come ad esempio (1, 2500,
“rossi”)‫‏‬

40
41
Concetti fondamentali di programmazione
Record
Posso definire delle variabili per ottenere delle istanze

Es. Conto c
c.numero = 1
c.denaro = 2500
c.nome = “rossi”

42
Ogni riga di una tabella di un
database è un record

43
<?xml version="1.0" encoding="iso-8859-1"?>

<rubrica>
<contatto>
<nome>Mario</nome>
<cognome>Rossi</cognome>
<telefono>011-555-5678</telefono>
<email>mario.rossi@libero.it</email>
</contatto>
In questo esempio in XML, ogni
</rubrica> contatto è un record!

44
Concetti fondamentali di programmazione
Puntatore
•  Meccanismo per utilizzare gli indirizzi dei dati. Astrazione del concetto
di indirizzo di memoria: si può definire l’indirizzo per un qualunque tipo
di dati

45
46
47

Potrebbero piacerti anche