140 likes | 418 Vues
Errori di programmazione. Capitolo 10 dicembre 2003. Classificazione degli errori. Errori riconosciuti dal compilatore errori sintattici errori di semantica statica Errori non riconosciuti dal compilatore errori di semantica dinamica errori logici. Errori sintattici.
E N D
Errori di programmazione Capitolo 10 dicembre 2003 Errori di programmazione
Classificazione degli errori • Errori riconosciuti dal compilatore • errori sintattici • errori di semantica statica • Errori non riconosciuti dal compilatore • errori di semantica dinamica • errori logici Errori di programmazione
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 } Errori di programmazione
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 • ^ Errori di programmazione
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; // variabile non dichiarata • a = b; // b non inizializzata • a = "una stringa"; // errore di tipo • a.sommatiA(b); // non si possono inviare • // messaggi a valori primitivi • System.out.stampa(4); // metodo stampa non definito • // nella classe di System.out • y = Math.pow(2); // manca il secondo argomento Errori di programmazione
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; • a = ...; • b = ...; • c = a/b; // errata se b vale 0 Errori di programmazione
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) Errori di programmazione
Altri errori di semantica dinamica • Un altro esempio – r è un Robot • r.avanza(); • r.avanza(); • si possono verificare errori? Errori di programmazione
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é * Errori di programmazione
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; • } Errori di programmazione
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 • } Errori di programmazione
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 Errori di programmazione