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