 
                                Fondamenti di informatica
Oggetti e Java
Luca Cabibbo
Errori di programmazione
Capitolo 10
dicembre 2003
1
Errori di programmazione
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Classificazione degli errori
Errori riconosciuti dal compilatore
 errori sintattici
 errori di semantica statica
Errori non riconosciuti dal compilatore
 errori di semantica dinamica
 errori logici
2
Errori di programmazione
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Errori sintattici
Gli errori sintattici (o grammaticali) sono legati all’uso non
corretto delle regole grammaticali (lessico e sintassi)
Class ErroriSintattici {
// Class anziché class
public static metodoConErrori() {
// manca l'indicazione del tipo di ritorno
double ;
// manca la variabile
x = 5
// manca il punto e virgola
x = 5,1;
// virgola anziché punto
x = Math.pow(2 3);
// manca la virgola
x = 3 + * 5;
// espressione mal formata
}
// manca }
3
Errori di programmazione
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Segnalazione di errori da parte del compilatore
Il compilatore segnala posizione e tipo di errore riscontrato
(secondo lui)
ErroriSintattici.java:4: ';' expected
x = 5
// manca il punto e virgola
^
In alcuni casi, la segnalazione è apparentemente sbagliata
ErroriSintattici.java:7: ')' expected
x = Math.pow(2 3);
// manca la virgola
^
4
Errori di programmazione
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Errori di semantica statica
Gli errori di semantica statica sono relativi a istruzioni che, pur
correttamente formate, sono errate in quanto prive di significato
int a, b, c;
double y, z;
x = 0;
a = b;
a = "una stringa";
a.sommatiA(b);
//
//
//
//
//
System.out.stampa(4); //
//
y = Math.pow(2);
//
5
Errori di programmazione
variabile non dichiarata
b non inizializzata
errore di tipo
non si possono inviare
messaggi a valori primitivi
metodo stampa non definito
nella classe di System.out
manca il secondo argomento
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Errori di semantica dinamica
Gli errori di semantica dinamica sono relativi all’impossibilità di
poter eseguire il codice (in alcuni casi)
 questi errori possono causare dei malfunzionamenti durante
l’esecuzione
int
a =
b =
c =
6
a, b, c;
...;
...;
a/b;
// errata se b vale 0
Errori di programmazione
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Eccezioni
Gli errori di semantica dinamica sono anche chiamati errori al
tempo di esecuzione (runtime error)
 si manifestano come eccezioni
 una eccezione rappresenta il verificarsi di un evento
imprevisto (quindi eccezionale) durante l’esecuzione del
codice
java.lang.ArithmeticException: / by zero
at DivisionePerZero.main(DivisionePerZero.java:11)
7
Errori di programmazione
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Altri errori di semantica dinamica
Un altro esempio – r è un Robot
r.avanza();
r.avanza();
8
si possono verificare errori?
Errori di programmazione
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Errori logici
Gli errori logici sono errori che derivano da una non corretta
realizzazione dei requisiti del metodo
... calcola il doppio del valore di n ...
int doppio;
// il doppio di n
doppio = n + 2;
// OOPS, + anziché *
9
Errori di programmazione
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Altri errori logici
... calcola il fattoriale nfatt di n ...
int nfatt;
// il fattoriale di n
int i;
// per iterare tra 1 e n
nfatt = 0;
i = 1;
while (i<n) {
nfatt = nfatt*i;
i = i+1;
}
10
Errori di programmazione
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Altri errori logici
... calcola il fattoriale nfatt di n ...
int nfatt;
// il fattoriale di n
int i;
// per iterare tra 1 e n
nfatt = 0;
i = 1;
while (i<n) {
nfatt = nfatt*i;
// OOPS: manca l'incremento di i
}
11
Errori di programmazione
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Discussione
Per gli errori riconosciuti dal compilatore
 cercare e correggere gli errori
 uno alla volta
 partendo dal primo tra quelli segnalati
Per gli errori che non sono riconosciuti dal compilatore
 eseguire ripetutamente il programma, cercando di causare
errori
 verifica di correttezza
12
Errori di programmazione
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl