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