i linguaggi di programmazione imperativo-procedurali

Capitolo 4
I linguaggi per la formalizzazione
dell’informazione
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
I linguaggi per la formalizzazione
dei processi di elaborazione
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Alcuni concetti
Algoritmo = descrizione di come si risolve un problema
Programma = algoritmo scritto in modo che possa essere
eseguito da un calcolatore (linguaggio di programmazione)
Linguaggio macchina = linguaggio effettivamente
“compreso” da un calcolatore, caratterizzato da
• istruzioni primitive semplici (e.g. max 2 operandi)
• attenzione all’efficienza (costi, complessità, velocità)
• difficile e noioso da utilizzare per un programmatore
Due aspetti rilevanti:
• produrre algoritmi (cioè capire la sequenza di passi che portano alla
soluzione di un problema)
• codificarli in programmi (cioè renderli comprensibili al calcolatore)
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Linguaggio di Programmazione
La notazione con cui è possibile descrivere gli
algoritmi.
Programma: è la rappresentazione di un algoritmo
in un particolare linguaggio di programmazione.
Ogni linguaggio di programmazione dispone di un
insieme di “parole chiave” (keywords)
Ogni linguaggio è caratterizzato da una sintassi e
da una semantica
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Sintassi e semantica
Ogni
linguaggio di programmazione è
caratterizzato da due componenti,
complementari l’una con l’altra:
• la sua sintassi,
sintassi cioè l’insieme delle regole che
specificano come comporre istruzioni ben formate;
• la sua semantica,
semantica che di ogni istruzione ben
formata specifica il significato, e quindi la
successione delle operazioni che vengono compiute
allorché l’istruzione viene eseguita.
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Classificazione
In
base all’astrazione:
• Linguaggi di basso livello (vicini all’hardware):
• I generazione: linguaggi macchina (sequenze di bit)
• II generazione: linguaggi assemblativi (uso di codici
mnemonici per le istruzioni)
• Linguaggi di alto livello (vicini all’utente):
• III generazione: linguaggi imperativi e procedurali di uso
generale
• IV generazione: linguaggi per specifici ambiti applicativi
• V generazione: linguaggi di descrizione dei problemi
orientati alla risoluzione automatica
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Il linguaggio macchina
Il
linguaggio macchina è direttamente
eseguibile dall’elaboratore, senza nessuna
traduzione.
• Istruzioni ed operandi relativi al programma in
esecuzione sono caricati in memoria e quindi sono
memorizzati in forma binaria.
• Vincolo: conoscenza dei metodi di
rappresentazione delle informazioni utilizzati.
Istruzione:
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
carica nell’accumulatore
10010000
11001100
Copyright © 2008 – The McGraw-Hill Companies srl
Il linguaggio Assembler
Le istruzioni corrispondono univocamente a quelle
macchina, ma vengono espresse tramite nomi
simbolici (parole chiave).
Il programma prima di essere eseguito deve essere
tradotto in linguaggio macchina (assemblatore).
Vincolo: necessità di conoscere in dettaglio le
caratteristiche della macchina (registri,
dimensione dei dati, set di istruzioni)
Anche semplici algoritmi implicano la specifica di
molte istruzioni
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
I linguaggi di alto livello
Sono i linguaggi di terza generazione. Le istruzioni
esprimono una serie di azioni. Il programma prima
di essere eseguito deve essere tradotto in
linguaggio macchina (traduttore)
Il programmatore può astrarre dai dettagli legati
all’architettura ed esprimere i propri algoritmi in
modo simbolico
Sono indipendenti dalla macchina (astrazione)
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Linguaggi di II/III generazione
Programma in linguaggio
macchina
(Codice oggetto)
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Programma in linguaggio
procedurale
(Codice sorgente)
Traduttore
Assemblatore
Programma in linguaggio
assemblatore
(Codice sorgente)
Programma in linguaggio
macchina
(Codice oggetto)
Copyright © 2008 – The McGraw-Hill Companies srl
Sviluppo di un Programma
I
traduttori sono programmi particolari che
provvedono a convertire il codice di
programmi scritti in un dato linguaggio di
programmazione (sorgenti), nella
corrispondente rappresentazione in
linguaggio macchina (eseguibili)
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
CPU come interprete del
suo linguaggio macchina
Unità
Unità Centrale
Centrale di
di Elaborazione
Elaborazione
(CPU):
(CPU):
interprete
interprete ed
ed esecutore
esecutore del
del
linguaggio
linguaggio macchina
macchina LL
Programma P in linguaggio Dati del programma P
macchina L
Memoria
Bus di
sistema
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Due tipi di traduttori
Compilatori
• Accettano in ingresso l’intero programma e
producono in uscita la rappresentazione dell'intero
programma in linguaggio macchina.
Interpreti
• Traducono ed eseguono direttamente ciascuna
istruzione del programma sorgente, istruzione per
istruzione.
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Dati del compilatore
Compilatore
Programma
compilatore del
linguaggio ad
alto livello L
Unità
Unità Centrale
Centrale di
di
Elaborazione
Elaborazione
Programma P in un
linguaggio ad alto livello L
Programma P’ in linguag-gio
macchina della CPU
Fase 1
Memoria
Bus di
sistema
Unità
Unità Centrale
Centrale di
di
Elaborazione
Elaborazione
Programma P’ in
linguaggio macchina
della CPU
Dati del programma
P’
Fase 2
Memoria
Bus di
sistema
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Interprete
Dati dell’interprete
Programma
interprete del
linguaggio ad alto
livello L
Unità
Unità Centrale
Centrale di
di
Elaborazione
Elaborazione
Programma P in un linguaggio
ad alto livello L
Dati del programma P
Memoria
Bus di
sistema
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Due tipi di traduttori /2
Compilatori
• Per ogni programma da tradurre, lo schema viene percorso
una volta sola prima dell’esecuzione.
Interpreti
• Lo schema viene attraversato tante volte quante sono le
istruzioni che compongono il programma; ad ogni
attivazione dell'interprete su una particolare istruzione,
segue l’esecuzione dell’istruzione stessa.
L’esecuzione di un programma compilato è più
veloce dell’esecuzione di un programma
interpretato.
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Interprete vs compilatore
Quale delle due soluzioni è la migliore?
Compilazione
• applicazioni più veloci
• maggior lavoro nel processo di messa a punto e manutenzione
• OK per i prodotti commerciali a larga diffusione.
Interpretazione
• consente tempi di sviluppo più contenuti,
• produce programmi meno efficienti;
• OK in fase di proto-tipazione dei programmi che, una volta ultimati,
venivano compilati prima del rilascio commerciale.
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Paradigmi di programmazione
E’
possibile affrontare il problema della
descrizione dei programmi in modi differenti
Soluzioni differenti costituiscono paradigmi
di programmazione differenti:
• Imperativo-procedurale
• A oggetti (OO)
• Funzionale
• Dichiarativo
In
forma testuale o grafica
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Paradigma imperativo/procedurale
Idea
generale: descrivere al calcolatore i
passi di risoluzione del problema
Codifica un algoritmo in un linguaggio
formale interpretabile dalla macchina
• Passi elementari: indipendenti dal singolo
calcolatore (astrazione)
• Il linguaggio deve definire istruzioni e strutture
dati
• Passo di traduzione verso il linguaggio macchina
Molto
diffuso
• Esempi: Fortran, Basic, Pascal, C…
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Prodotto di due numeri naturali
Dati
a, b interi positivi
w, z interi
Risoluzione
leggi a e b
z ← 0
w ← a
finché w > 0 ripeti
z ← z + b
w ← w – 1
fine ciclo
scrivi z
fine
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Inizio
Dichiarazione: a, b, w, z
contengono numeri interi
Leggi a e b
w ← a;
z ← 0;
Sì
w>0?
z←z+b
w←w–1
No
Scrivi
z=a×b
Fine
Copyright © 2008 – The McGraw-Hill Companies srl
Prodotto di due numeri naturali
Algoritmo
Programma in C
Dati
a, b interi positivi
w, z interi
Risoluzione
leggi a e b
z←0
w←a
finché w > 0 ripeti
z←z+b
w←w–1
fine ciclo
scrivi z
fine
main() { /* prodotto C */
unsigned int a, b;
int w, z;
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
scanf("%d %d",&a,&b);
z = 0;
w = a;
while (w > 0) {
z = z + b;
w = w – 1;
}
printf("%d", z);
Programma in BASIC
'prodotto, Basic
dim a as integer, b as integer
dim w as integer, z as integer
input a, b
z=0
w=a
while w > 0
z=z+b
w=w–1
wend
print z
}
Copyright © 2008 – The McGraw-Hill Companies srl
Parti fondamentali di un programma
Identificazione del programma
Dichiarazione delle variabili utilizzate, di cui sono indicati
tipo e nome
Specificazione della parte esecutiva del programma, detta
anche corpo del programma
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Le istruzioni
Istruzioni di ingresso/uscita (leggi, print,…)
Istruzioni aritmetico–logiche (+,*, and, or, not…)
Istruzioni di controllo (if…then…else, while…do…)
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Selezione semplice
Frammento C
…
Sì
blocco
istruzioni
condizione
condizio
ne
No
…
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
main() /* C */
{…
/* selezione semplice */
if (condizione) {
/* blocco istruzioni
eseguito solo se
condizione è true */
…
}
…
}
Frammento
BASIC
' Basic
…
if condizione then
' blocco istruzioni
' eseguito solo se
' condizione è true
…
end if
…
Copyright © 2008 – The McGraw-Hill Companies srl
Selezione a due vie
…
Sì
No
condizione
condizio
ne
blocco 1
blocco 2
…
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Frammento C
main() /* C */
{ …
/* selezione a due vie */
if (condizione) {
… … /* blocco 1 */
} else {
… … /* blocco 2 */
}
…
}
Frammento BASIC
' Basic
…
' selezione a due vie
if condizione then
… … ‘ blocco 1
else
… … ‘ blocco 2
end if
…
Copyright © 2008 – The McGraw-Hill Companies srl
Selezione a più vie
Frammento C
……
Sì
cond_1
blocco
1
No
cond_2
blocco
2
……
blocco
……
cond_n
blocco
n
……
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
blocco
n+1
main() /* C */
{ … /* sel a più vie */
if (cond_1) {
… /* blocco_1 */
} else if (cond_2) {
… /* blocco_2 */
} else if (… …) {
… /* blocco_... */
} else if (cond_n) {
… /* blocco_n */
} else {
… /* blocco_n+1*/
}
…
}
Frammento BASIC
' Basic
… ' sel a più vie
if cond_1 then
… ' blocco_1
elseif cond_2 then
… ' blocco_2
elseif … … then
… ' blocco_...
elseif cond_n then
… ' blocco_n
else
… ' blocco_n+1
end if
…
Copyright © 2008 – The McGraw-Hill Companies srl
Ciclo a condizione iniziale
…
Sì
blocco
istruzioni
condizione
condizio
ne
No
…
Frammento C
Frammento BASIC
main() /* C */
{ … … /* ciclo a condizione iniziale */
while (condizione) {
… … /* blocco istruzioni */
/* ripetuto finché condizione è true */
}
… /* eseguito quando condizione è false */
}
' Basic
… … ' ciclo a condizione iniziale
while condizione
… … ' blocco istruzioni
' ripetuto finché condizione è true
wend
… … ' eseguito quando condizione è false
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Ciclo a condizione finale
Frammento C
…
blocco
istruzioni
Sì
cond
No
…
main() /* C */
{ … /* ciclo a condizione finale */
do {
… … /* blocco istruzioni */
/* eseguito una volta e
ripetuto se cond è true */
} while (cond)
… … /* eseguito se cond è false */
}
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Frammento BASIC
' Basic
… ' ciclo a condizione finale
do
… … ' blocco istruzioni
' eseguito una volta e
' ripetuto se cond è true
loop while cond
… … ' eseguito se cond è false
Copyright © 2008 – The McGraw-Hill Companies srl
I dati
Ogni
variabile è caratterizzata dal suo tipo.
• Tipi predefiniti: numeri, caratteri, booleani, …
• Altri tipi: stringhe, date, …
Variabili
strutturate:
• Vettori (o array)
• Record
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Variabili strutturate
Consentono di riferirsi a più valori reciprocamente
correlati come se si trattasse di un’unica variabile
aggregata:
• Vettori (array)
• Matrici (o array multidimensionali),
• Record (con campi o attributi)
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Uso degli array
somma degli elementi di un vettore
Algoritmo
Dati
n = 100 intero
f[ ] vettore di interi
w, z interi positivi
Risoluzione
...
w←1
z←0
finché (w ≤ n) ripeti
z ← z + f[w]
w←w+1
fine ciclo
scrivi z
Introduzione
... ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Programma in C
Programma in BASIC
main() { /* prodotto C */
int f[100];
int w, z;
…
w = 0;
z = 0;
while (w ≤ 99) {
z = z + f[w];
w = w + 1;
}
printf("%d", z);
…
}
dim f(100) as integer
dim w as integer
dim z as integer
…
w=1
z=0
while w <= 100
z = z + f(w)
w=w+1
wend
print z
…
Copyright © 2008 – The McGraw-Hill Companies srl
Un esempio di matrice
Esempio: il fatturato mensile di ogni prodotto di una azienda
Dati relativi al
j-esimo mese
Dati relativi al
prodotto i-esimo
f[1,1]
f[1,2]
……
f[1,j]
……
f[1,12]
f[2,1]
f[2,2]
……
f[2,j]
……
f[2,12]
……
……
……
……
……
……
f[i,1]
f[i,2]
……
f[i,j]
……
f[i,12]
……
……
……
……
……
……
f[n,1]
f[n,2]
……
f[n,j]
……
f[n,12]
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Uso dei record
Esempio: definiamo il record PRODOTTO con 2 campi, nome e fatturato
Frammento C
struct prodotto { /* C */
char nome[DIMNOME];
int fatturato;
};
main()
main() /* operazioni su prodotti */
{ struct prodotto p;
……
p.fatturato = … …;
/* assegna un valore al
fatturato del prodotto p */
}
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Frammento BASIC
type prodotto ' Basic
nome as string * DIMNOME
fatturato as integer
end type
' operazioni su prodotti
dim p as prodotto
……
p.fatturato = … …
' assegna un valore al
' fatturato del prodotto p
Copyright © 2008 – The McGraw-Hill Companies srl
Array o vettore di record
Frammento C
Frammento BASIC
struct prodotto { /* C */
char nome[DIMNOME];
int fatturato;
};
main() /* operazioni su prodotti */
{ struct prodotto p[100] ;
……
p[5].fatturato = … … ;
/* assegna un valore al fatturato
del prodotto di indice 5 */
}
type prodotto ' Basic
nome as string * DIMNOME
fatturato as integer
end type
' operazioni su prodotti
dim p(100) as prodotto
……
p(5).fatturato = … …
' assegna un valore al fatturato
' del prodotto di indice 5
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
PRODOTTI
Nome Fatturato
0
1
2
3
4
5
6
7
…
98
99
HT5231
HT5441
NS221
NS321
NS222
NS322
HT5321
HT5442
………
RX521
RX522
129 000
105 000
144 000
123 000
133 000
136 000
139 000
136 000
………
183 000
175 000
Copyright © 2008 – The McGraw-Hill Companies srl
Uso dei sottoprogrammi (main)
Algoritmo
Dati
w intero (numero riga)
z razionale
fine booleano
Risoluzione
fine ← false
finché (non fine) ripeti
leggi w
se (w > 0)
z ← media(w)
scrivi z
altrimenti
fine ← true
fine condizione
fine ciclo
fine
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Programma C
main() /* C */
{ int w;
float z;
bool fine;
fine = 0;
while (!fine) {
scanf("%d",&w);
if (w > –1) {
z = media(w);
printf("%d", z);
} else {
fine = 1;
}
}
Programma BASIC
' Basic
dim w as integer
dim z as single
dim fine as bool
fine = 0
while not fine
input w
if w > 0 then
z = media(w)
print z
else
fine = -1
end if
wend
}
Copyright © 2008 – The McGraw-Hill Companies srl
Uso dei sottoprogrammi (sub)
Esempio: calcolare il fatturato medio mensile di ogni prodotto
Programma in C
Algoritmo
funzione media(w)
Dati
i, j interi
z razionale
p[ ] matrice di interi
Risoluzione
i←1e j←0
finché (i < 13) ripeti
j ← j + (p[w, i])
i←i+1
fine ciclo
z = j / 12
restituisci z
Introduzione
ai sistemi informatici 4/ed
fine funzione
Donatella Sciuto, Giacomo Buonanno, Luca Mari
float media(int w) {
int i,j;
float z;
int p[100][12];
i = 0; j = 0;
while (i < 12) {
j = j + p[w][i];
i = i + 1;
}
z = j / 12;
return (z);
}
Programma in BASIC
function media (w as integer)
dim i as integer
dim j as integer
dim z as single
dim p(100, 12) as integer
i = 1: j = 0
while i <= 12
j = j + p(w, i)
i=i+1
wend
z = j / 12
media = z
end function
Copyright © 2008 – The McGraw-Hill Companies srl
Senza sottoprogrammi
Inizio
Esempio: z=x2+y2
Leggi x e y
w←x
z←0
Sì
w>0?
z ← z+x
w ← w-1
No
x2 ← z
w←y
z←0
Sì
w>0?
z ← z+y
w ← w-1
No
y2 ← z
q ← x2+y2
Scrivi
x2+y2=q
Fine
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
main()
main /* q = x2 + y2 */
{ int x,y,x2,y2,q,w,z;
scanf("%d %d",&x,&y);
w = x;
z = 0;
while (w > 0) {
z = z + x;
w = w – 1; }
x2 = z;
w = y;
z = 0;
while (w > 0) {
z = z + y;
w = w – 1; }
y2 = z;
q = x2+y2;
printf("%d", q);
}
Copyright © 2008 – The McGraw-Hill Companies srl
Con sottoprogrammi
Esempio: z=x2+y2
Inizio
funzione quad(a)
Leggi x e y
w←a
z←0
x2 ← quad(x)
Sì
z ← z+a
w ← w-1
w>0?
No
y2 ← quad(y)
q ← x2+y2
return (z)
Scrivi
x2+y2=q
Fine
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
int quad (int a) {
/* restituisce a2 /
int w, z;
w = a; z = 0;
while (w > 0) {
z = z + a;
w = w – 1; }
return (z); }
main() /* q = x2 + y2 */
{ int x,y,x2,y2,q;
scanf("%d %d",&x,&y);
x2 = quad(x);
y2 = quad(y);
q = x2+y2;
printf("%d", q);}
Copyright © 2008 – The McGraw-Hill Companies srl
Sottoprogrammi ricorsivi
Un sottoprogramma si dice ricorsivo se comprende se stesso nella
propria definizione
Fattoriale (N!)
•
•
•
•
0! = 1
1! = 1
N! = N × (N–1)!
Per esempio, 4! = 4×3! = 4×(3×2!) = 4×(3×(2×1!)) = 4×3×2×1 = 24
Esercizio: cercare una soluzione non ricorsiva del problemi proposto.
Esistono dei problemi la cui unica soluzione è di tipo ricorsivo. Spesso
le strutture di dati che meglio si adattano alla soluzione di un problema
ben si prestano a essere gestite tramite procedure ricorsive, che
quindi, in questi casi, sono molto utili per migliorare l’efficienza dei
programmi.
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Paradigma ad oggetti
Idea:
imitare la realtà
• Il programma si definisce come sequenze di
interazioni tra oggetti dotati di un comportamento
• Gli oggetti reagiscono alle interazioni risolvendo la
loro parte di problema
• E’ possibile usare oggetti senza conoscere la
struttura ed il funzionamento interni
• Linguaggi Object Oriented e Object Based
Molto
diffuso (adatto per progetti ampi)
• Simula, Smalltalk, C++, Object Pascal, Java…
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Classi e oggetti
Concetto
di classe
• Una classe modella una entità del problema (ad
esempio, la classe Studente e la classe Esame)
• Ha i propri metodi, funzioni che ne modificano lo
stato interno e permettono di interagire con essa
• Ha le proprie proprietà, variabili interne che ne
costituiscono lo stato modificate con i metodi
• Metodi e proprietà possono essere pubblici o
privati (ovvero accessibili o meno dall’esterno)
Concetto
di oggetto
• Una istanza singola di una classe è detta oggetto
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Esempio
Classe Automobile
• Definisce l’idea astratta di automobile
• Metodi: accendi(), spegni(), frena(T), accelera(T),
sterza(angolo), apriportiera(quale)…
• Proprietà: ruote, livello carburante, velocità, velocità max,
targa, numeroporte…
• Interfaccia: senza conoscerne i dettagli interni (ovvero come
realizza le proprie funzionalità), è sufficiente chiamare i
metodi visti per usarla
• Al suo interno potrebbe avere una proprietà privata di classe
Motore (che fornisce i propri servizi a accelera(T)), oggetti
di classe Portiera, oggetti di classe Freno…
Oggetto di classe automobile
• Un oggetto di classe Automobile rappresenta una singola
determinata automobile (con uno specifico valore per targa)
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Caratteristiche della OO
Ereditarietà
• E’ possibile creare nuove classi (figlie) mediante
ereditarietà, ovvero estendendo classi esistenti
(padri) mediante aggiunta o sostituzione di
metodi e proprietà creando una gerarchia di classi
Polimorfismo
• Ogni oggetto appartenente a una classe figlia
appartiene anche a tutte le classi padre
Overloading
dei metodi
• E’ possibile avere un comportamento diverso dei
metodi se chiamati con parametri di tipi o numero
diversi
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Esempio
Automobile
• Gerarchia dei mezzi di trasporto: Automobile derivata da
Motoveicolo per sfruttarne gli aspetti comuni; Motocicletta
derivata da Motoveicolo; Motoveicolo derivato da Veicolo;
FiatTipo, OpelAstraSW, RenaultKangoo, FerrariF40 derivate
da Automobile per specializzarne i comportamenti standard
• Automobile può ereditare frena() e sterza() da Veicolo ed
accendi(), spegni() da Motoveicolo ma non apriportiera()
che le è proprio (Moto è derivata da Motoveicolo e quindi
apriportiera non può essere un metodo di Motoveicolo)
• FiatTipo, OpelAstraSW, RenaultKangoo e FerrariF40
ereditano tutto da Automobile ma fissano propri valori per
numeroporte e velocitàmax e modificano i comportamenti
di accelera() e frena()
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Esempio: interfaccia utente
Esempio di interfaccia utente di un programma a oggetti: tutti gli elementi che
sono inclusi nella finestra sono oggetti che vengono attivati da eventi generati
dall’utente operando con la tastiera o il mouse.
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Esempio IU: oggetti e metodi
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Riuso
Distinzione tra l’attività di
• creazione di classi
per esempio programmare per creare una nuova classe “pulsante” (magari con
caratteristiche particolari, cioè con specifici metodi o proprietà),
• uso di classi esistenti, attraverso la generazione di loro istanze, cioè di oggetti,
per esempio programmare per istanziare la classe “pulsante” e creare così dei
pulsanti sulla finestra di un’applicazione.
Naturalmente queste attività devono essere realizzate in successione:
prima si creano le classi, poi si usano per creare oggetti e perciò
applicazioni.
Uno dei punti di forza della programmazione a oggetti deriva dalla
sostanziale autonomia di cui godono le classi, che possono venire
create e quindi “impacchettate”, pronte per essere distribuite ai
programmatori che ne vorranno fare uso. In questo modo i
programmatori applicativi possono operare in ambienti di sviluppo assai
ricchi di funzionalità, grazie alla disponibilità di classi che arricchiscono
il linguaggio di programmazione impiegato.
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Paradigma funzionale
Idea
generale: unificare dati e istruzioni,
considerando un programma come una serie
di funzioni innestate
Esempi
1
1
kt
La.s+Ra
• Lisp: un unico
costrutto,
detto lista
• print 12 + 23 diventa
(print (+ 12 23))
• LabView, Simulink:
linguaggi grafici
1
s
k
J.s+beta
kv
B* u
1
s
C* u
A* u
L* u
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Paradigma dichiarativo
Idea:
descrivere le caratteristiche della
soluzione con dichiarazioni che le
descrivono piuttosto che il procedimento per
ottenerla
• Il programma viene eseguito da un risolutore di
problemi che determina la strategia migliore
• Paradigma utilizzabile in campi specifici
Esempi:
Prolog, SQL
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
I linguaggi per la descrizione e
la manipolazione dei dati
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Descrizione e manipolazione dati
I
tradizionali linguaggi per la descrizione dei
processi di elaborazione trattano i dati in
maniera generica
• Disponibilità di strutture dati complesse ma
necessità di definirle da parte del programmatore
caso per caso
• Strutture regolari
Necessità
di linguaggi specifici per la
definizione e la manipolazione di dati
Esempi: SQL, ER, HTML, XML,…
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
SQL
Linguaggio
per la definizione e la
manipolazione di dati secondo il modello
relazionale
• La parte di definizione dei dati ne descrive la
struttura in termini di relazioni (o tabelle) e
vincoli
• La parte di manipolazione è un linguaggio
dichiarativo
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Tabella
Rappresentazione sotto
forma di tabella dell’array
di record definito e
utilizzato nei frammenti di
codice riportato
precedentemente.
Il numero riportato alla
sinistra di ogni riga
rappresenta l’indice
dell’array (in questo caso a
partire da 0 e quindi in
accordo alla sintassi C) ed è
utilizzato per accedere al
contenuto del
corrispondente record.
PRODOTTI
Nome Fatturato
0
1
2
3
4
5
6
7
…
98
99
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
HT5231
HT5441
NS221
NS321
NS222
NS322
HT5321
HT5442
………
RX521
RX522
129 000
105 000
144 000
123 000
133 000
136 000
139 000
136 000
………
183 000
175 000
Copyright © 2008 – The McGraw-Hill Companies srl
Il modello relazionale
Nelle situazioni in cui la quantità di dati da
elaborare e archiviare è molto grande l’accesso
diretto diventa di fatto inapplicabile perché
inefficiente. In queste condizioni si impiegano dei
sistemi per la gestione di basi di dati (Database
Management System, DBMS)
Tra i modelli di organizzazione ed elaborazione dei
dati quello che si è diffuso di più è il modello
relazionale
Un DataBase Relazionale è costituito da un insieme
di tabelle e di vincoli su e tra di esse
Ogni tabella è caratterizzata da uno schema
(l’insieme dei suoi campi) fisso per ogni record
(tupla)
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Il modello relazionale
STUDENTI
Matr Cognome
Nome
Nato_il
3571 Banfi
Alessandro 19/02/1982
999 Bosio
Umberto
27/01/1983
2805 Castelnuovo Andrea
06/05/1982
3719 Colpi
Marco
15/01/1983
773 Izzo
Stefania
08/10/1982
3672 Librandi
Silvia
12/03/1983
1539 Longoni
Mauro
05/02/1983
3500 Matta
Vera
26/04/1982
1886 Merlo
Andrea
05/05/1983
1427 Morelli
Riccardo
14/04/1982
2608 Ornaghi
Gabriele
09/09/1982
3711 Panico
Andrea
29/05/1982
1940 Poretti
Stefania
20/02/1982
1814 Quaglia
Andrea
13/08/1982
1662 Salmoiraghi Veronica
19/09/1982
2744 Sterlocchi
Elena
29/06/1982
3024 Tarantola
Marcello
17/06/1982
3527 Valentini
Samuele
10/07/1982
3615 Venturi
Anita
28/07/1982
681 Zaccaretti
Carolina
23/02/1983
Nato_a
Milano
Aosta
Torino
Genova
Firenze
Bologna
Venezia
Roma
Trento
Trieste
Perugia
Pescara
Ancona
Napoli
Cagliari
Palermo
Reggio Calabria
Bari
Potenza
Campobasso
ISCRITTI
Matr Codice
2805 IG06
3527 BA03
1940 IG10
773 IG11
1539 IG05
1940 IG03
3672 ICT3
681 ICT2
1886 IG05
1940 ICT1
3500 BA08
1886 IG01
3024 BA01
3719 IG10
3672 IG08
773 ICT2
3719 IG06
1814 ICT2
2744 BA09
2744 IG03
2805 IG09
Codice
BA01
BA02
BA03
BA04
ICT1
IG01
IG02
ICT2
IG03
…
IG04
IG05
BA09
ICT3
IG09
IG10
IG11
IG12
CORSI
Titolo
Analisi Matematica I
Analisi Matematica II
Elettromagnetismo
Fond. Meccanica Teorica e Applicata
Fond. Informatica I (laboratorio)
Elettrotecnica
Fisica Tecnica
Fond. Informatica II
Fond. Automatica
………
Economia Organizzazione Aziendale
Gestione Produzione Industriale
Ricerca Operativa
Produzione Assistita Calcolatore
Sistemi di Controllo di Gestione
Logistica Industriale
Gestione Aziendale
Gestione della Qualità
Settore
MAT/05
MAT/05
FIS/01
ING-IND/13
ING-INF/05
ING-IND/31
ING-IND/10
ING-INF/05
ING-INF/04
…
ING-IND/35
ING-IND/17
MAT/09
ING-IND/16
ING-IND/35
ING-IND/17
ING-IND/35
ING-IND/17
Tipo
Crediti
Base
7.5
Base
7.5
Base
5
Affine
5
Affine
4
Affine
5
Affine
5
Base
6
Caratt.
5
…
…
Caratt.
10
Caratt.
10
Base
5
Caratt.
5
Caratt.
5
Caratt.
5
Caratt.
5
Caratt.
5
Studenti (Matr, Cognome, Nome, Nato_il, Nato_a);
Corsi (Codice, Titolo, Settore, Tipo, Crediti);
Iscritti (Matr, Codice).
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Vincoli principali
Vincolo di dominio:
• Impone ad ogni campo un tipo definito ed eventualmente
un range di valori valido
Vincolo di chiave:
• Si definisce chiave di una tabella un campo, o un insieme
di campi, il cui contenuto sia garantito unico tra i vari
record della tabella
Vincolo di chiave esterna:
• La chiave primaria viene impiegata anche per mettere in
corrispondenza record appartenenti a tabelle diverse,
vincolando i valori presenti in un certo campo ad assumere
solo valori esistenti nella chiave di un’altra tabella
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
SQL per la definizione dei dati (DDL)
SQL prevede specifici costrutti per la creazione e
l’eliminazione di tabelle del DB.
Esempi
• generare tabelle
CREATE TABLE Studenti CREATE TABLE Corsi CREATE TABLE Iscritti
( [Matr]
integer,
( [Codice] text:4, ( [Matr] integer,
[Cognome] text:50,
[Titolo] text:50, [Codice] text:4)
[Nome]
text:50,
[Crediti] single,
[Nato il]
data,
[Settore] text:10,
[Nato a]
text:50)
[Tipo]
text:10)
• rimuovere una tabella dal DB
DROP TABLE Studenti
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
SQL per la manipolazione (DML)
L’elemento di base di questa parte del linguaggio è il
seguente (detto anche “blocco SQL”):
SELECT
C1, …, Cn
FROM
T1, …, Tm
WHERE
P
• parte dalle tabelle T1, …, Tm
• come risultato della sua esecuzione genera una nuova tabella
il cui schema è definito dai campi C1, …, Cn estratti dalle
tabelle di partenza
• la tabella finale comprende i record che si generano
combinando i record compresi nelle tabelle di partenza,
partenza
con il vincolo che la condizione P sia soddisfatta.
• Si noti che vengono definite le caratteristiche della soluzione
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Esempio di query SELECT in SQL
SELECT
FROM
WHERE
Matr, Cognome, Nome
Studenti
Nato_a = 'Milano'
genera una nuova tabella il cui schema è (Matr, Cognome, Nome) e che
comprende l’elenco degli studenti nati a Milano.
SELECT Studenti.Matr, Cognome, Nome
FROM Studenti, Iscritti, Corsi
WHERE Studenti.Matr = Iscritti.Matr
AND Iscritti.Codice = Corsi.Codice
AND Corsi.Titolo = “Fondamenti di Informatica II”
ORDER BY Cognome
genera una tabella con l’elenco, ordinato per cognome, degli studenti
iscritti al corso di “Fondamenti di Informatica II”, e per ognuno di essi
include il numero di matricola, il cognome e il nome.
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
SQl per la modifica dei dati (DML)
I costrutti di manipolazione prevedono la possibilità di inserire, eliminare e
modificare il contenuto di record selezionati di una tabella.
Esempi
• inserisce nella tabella Studenti due nuovi record
INSERT INTO
Studenti
(4321, 'Rossi', 'Paolo', 12.12.1980, 'Milano')
(4322, 'Bianchi', 'Luca', 21.08.1980, 'Roma')
• cancella dalla tabella Studenti tutti i record che soddisfano la condizione indicata
DELETE FROM
WHERE
Studenti
Matr < 1000
• modifica come specificato il contenuto del campo Crediti della tabella Corsi per tutti i
record che soddisfano la condizione specificata
UPDATE
SET
WHERE
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Corsi
Crediti = 6
Titolo = 'Elettromagnetismo'
Copyright © 2008 – The McGraw-Hill Companies srl
ER (Entity-Relationship)
Linguaggio
(grafico) per la definizione di
modelli dei dati
• Formalismo utilizzato per descrivere la struttura
dei dati di un problema e i relativi vincoli
• Usato per l’analisi e la progettazione di basi di dati
Linguaggio
con primitive grafiche
• La forma grafica facilita il processo di
progettazione e di condivisione dell’informazione
strutturata tramite i diagrammi ER
• Descrive il modello concettuale dei dati
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Modello concettuale dei dati
Modello dei dati è la descrizione (mediante un linguaggio formale) della
realtà che si vuole rappresentare.
Tipicamente un modello ER dei dati è costituito da:
• entità, organizzate in insiemi di entità
• attributi,
attributi ognuno caratterizzato da un insieme di valori e valutabile su un
insieme di entità, nel senso che a ogni entità dell’insieme è associato un valore
dell’attributo
• relazioni,
relazioni particolari attributi caratterizzati da un insieme di valori che è in
effetti un insieme di entità
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Modello concettuale dei dati
STUDENTE
0:N
Matricola
Anno di corso Iscritto regolarmente
{1,2,3,4}
{vero, falso}
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Esami
sostenuti
CORSO
0:M
Codice
Denominazione
Copyright © 2008 – The McGraw-Hill Companies srl
HTML (HyperText Markup Language)
Linguaggio
per la descrizione di ipertesti
• Formalismo utilizzato per descrivere la struttura e
i collegamenti di un ipertesto (dati non strutturati)
• Arricchisce i contenuti di un documento
ipertestuale con tag che descrivono
l’organizzazione dello stesso (paragrafi, titoli di
vari livelli, liste, tabelle, evidenziazione di parti di
testo,…)
Limitate
capacità di input (form) per
l’interazione sul web
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Ipertesto
Ipertesto è un documento la cui
struttura di consultazione non è
lineare
• le parti di cui è logicamente costituito
sono organizzate non semplicemente
in successione, ma secondo una
Anchor point
struttura più complessa;
• ogni nodo può contenere degli anchor
point, per relazioni (link o hyperlink)
che rimandano ad altre parti (target)
Link
del documento.
Se l’ipertesto è consultato tramite
un calcolatore, gli anchor point
presenti nella parte visualizzata
sono “aree attive” la cui selezione
(point-and-click) ha come risultato
l’attivazione di un link e quindi la
visualizzazione del contenuto della
parte relazionata.
Se l’ipertesto contiene anche
riferimenti a contenuti audio/video
è detto ipertesto multimediale
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Target
Copyright © 2008 – The McGraw-Hill Companies srl
Ipertesto
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
HTML: la struttura del documento
Un documento HTML è costituito da 2 parti fondamentali:
• HEAD: contiene le informazioni relative, per esempio:
• titolo della pagina visualizzato sulla barra di Explorer
• informazioni utili per i motori di ricerca (Google, Yahoo, ect…)
• BODY: contiene il documento vero e proprio (la pagina)
Struttura tipica
<HTML>
<HEAD>
… descrizione delle caratteristiche del documento …
</HEAD>
<BODY>
… documento …
</BODY>
</HTML>
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
HTML: la struttura dei documenti
<HTML>
<HEAD>
<TITLE>
</TITLE>
HTML
BODY
HEAD
H1
DIV
P
TITLE
P
A
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
BR
</HEAD>
<BODY>
<H1></H1>
<DIV>
<P>
<A>
</A>
</P>
</DIV>
<P>
<BR>
</P>
</BODY>
</HTML>
Copyright © 2008 – The McGraw-Hill Companies srl
Un esempio di form
<H3>Esempio di un <I>form</I> compilabile da parte
dell'utente</H3>
<FORM METHOD="post" ACTION="scripts/formman.exe">
Condizione di ricerca: <INPUT TYPE="text" NAME="condizione">
<BR>
Riporta i risultati della ricerca in forma:
<INPUT TYPE="radio" NAME="modo" VALUE="breve" CHECKED>breve
<INPUT TYPE="radio" NAME="modo" VALUE="estesa">estesa
<BR>
<INPUT TYPE="submit" VALUE="Esegui la ricerca">
</FORM>
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
XML (eXtensible markup language)
Linguaggio
per la definizione di linguaggi di
descrizione dei dati
• Metalinguaggio
• Permette la definizione di tag personalizzati
• Usato per formalizzare linguaggi di descrizione dei
dati per problemi specifici
• Linguaggio simile a ma “più potente” di HTML
Definizione:
DTD e XML Schema
Manipolazione: XSLT (trasformazione),
XQuery (estrazione)…
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Esempio XML
<?xml version=“1.0” standalone=“yes” ?>
<!-- Esempio di bibliografia -->
<BIB>
<LIBRO nome=“Info”>
<AUTORE id=“dony”> D. Sciuto </AUTORE>
<AUTORE id=“jack”> G. Buonanno </AUTORE>
<AUTORE id=“luca”> L. Mari </AUTORE>
<AUTORE id=“mau” role=“collab”> M. Iacono </AUTORE>
<TITOLO> Introduzione ai sistemi informatici </TITOLO>
<EDITORE> McGraw-Hill Italia </EDITORE>
<ANNO> 2008 </ANNO>
</LIBRO>
<LIBRO>
<AUTORE idref=“luca”/>
<TITOLO> Accesso a database via Web </TITOLO>
<EDITORE> Apogeo </EDITORE>
<ANNO> 2001 </ANNO>
</LIBRO>
</BIB>
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Esempio DTD e XMLSchema
<!DOCTYPE bib [
<!ELEMENT BIB (LIBRO+)>
<!ELEMENT LIBRO (AUTORE+, TITOLO, EDITORE?, ANNO?)>
<!ATTLIST LIBRO
isbn CDATA #IMPLIED
nome CDATA #IMPLIED>
<!ELEMENT AUTORE (#PCDATA)>
<!ATTLIST AUTORE
id ID #IMPLIED
idref IDREF #IMPLIED>
<!ELEMENT TITOLO (#PCDATA)>
<!ELEMENT EDITORE (#PCDATA)>
<!ELEMENT ANNO (#PCDATA)>
]>
(a)
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
<xsd:schema xmlns:xsd=“http://www.w3.org/1999/XMLSchema”>
<xsd:element name=“LIBRO” type=“BOOKTYPE”/>
<xsd:complexType name=“BOOKTYPE” >
<xsd:element name=“AUTORE” type=“xsd:string”
minOccurs=“1” maxOccurs=“unbounded”/>
<xsd:element name=“TITOLO” type=“xsd:string”/>
<xsd:element name=“EDITORE” type=“xsd:string”
minOccurs=“0” maxOccurs=“1”/>
<xsd:element name=“ANNO” type=“xsd:decimal”
minOccurs=“0” maxOccurs=“1”/>
<xsd:attribute name=“isbn” type=“xsd:string”/>
<xsd:attribute name=“nome” type=“xsd:string”/>
</xsd:complexType>
</xsd:schema>
(b)
Copyright © 2008 – The McGraw-Hill Companies srl
Esempio XSLT
<?xml version="1.0" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<AUTORI> <xsl:apply-templates/> </AUTORI>
</xsl:template>
<xsl:template match="/BIB/LIBRO">
<xsl:for-each select= "AUTORE">
<xsl:if test="@id">
<AUTORENOTO codename="{@id}">
<xsl:value-of select="text()" />
</AUTORENOTO>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Applicando il filtro all’esempio XML visto l’XML risultante è il seguente:
<?xml version="1.0" encoding="UTF-8"?>
<AUTORI>
<AUTORENOTO codename="dony"> D. Sciuto </AUTORENOTO>
<AUTORENOTO codename="jack"> G. Buonanno </AUTORENOTO>
<AUTORENOTO codename="luca"> L. Mari </AUTORENOTO>
<AUTORENOTO codename="mau"> M. Iacono </AUTORENOTO>
</AUTORI>
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Copyright © 2008 – The McGraw-Hill Companies srl
Esempio XQuery
XQuery che genera una
risposta in HTML
<html><head/><body>
{
for $libro in doc("bibliografia.xml")
//LIBRO
order by $libro/ANNO/text()
return
<span>
<h1>{ $libro/TITOLO/text() }</h1>
<i>{$libro/EDITORE/text()}</i>
{$libro/ANNO/text()}
</span>
}
</body></html>
Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
Risposta
<html>
<head/>
<body>
<span>
<h1> Accesso a database via Web </h1>
<i> Apogeo </i> 2001
</span>
<span>
<h1> Introduzione ai sistemi informatici </h1>
<i> McGraw-Hill Italia </i> 2008
</span>
</body>
</html>
Copyright © 2008 – The McGraw-Hill Companies srl