220 likes | 359 Views
Programare Orientata Obiect. Curs 8 Exceptii. Continutul cursului. Introducere Platforma Java, Clase si Obiecte Modificatori, Constructori Pachete. Incapsularea datelor Mostenirea / Extinderea claselor Conversii de date. Clase si metode abstracte Interfete Exceptii (I). Curs 8.
E N D
Programare Orientata Obiect Curs8 Exceptii Curs 8
Continutul cursului • Introducere • Platforma Java, Clase si Obiecte • Modificatori, Constructori • Pachete. Incapsularea datelor • Mostenirea / Extinderea claselor • Conversii de date. Clase si metode abstracte • Interfete • Exceptii (I) Curs 8
Curs 8 • Exceptii (I) 1.1 Introducere 1.2 Erorisimanagementulerorilor 1.3Exceptii 1.4 Tipuri de exceptii 1.5 Mecanismultry/catch/finally 1.6 Exemple Curs 8
C8. Exceptii • 1.1. Introducere • Utilizatorii de aplicatii se asteapta ca acesteasafunctionezefaraprobleme. • Aplicatiilesuntfolositeuneori in moduri care nu au fost anticipate de dezvoltatori • Datoritaproblemelor de design sauerorilor de programare, aplicatiile pot sa “crape” in timpulexecutiei • Este responsabilitateaprogramatorilorsadezvolteaplicatii care sa nu isiintrerupaexecutia in mod neasteptat (!) • Solutia? Managementulerorilorprinfolosireaexceptiilor
C8. Exceptii • 1.2. Erorisimanagamentulerorilor • O eroarereprezinta un rezultatneasteptatobtinut in urmaexecutieiunui program • Erorilenetrate (unhandeld) pot avea ca rezultat un comportamentneasteptat din parteaaplicatieisauchiarintrerupereaexecutiei • Eroriletrebuietratate de catreprogramatorastfelincatelesa nu ajunga la utilizator
C8. Exceptii • 1.2. Erorisimanagamentulerorilor • Cauzeposibile ale erorilor: • Managementulmemoriei (alocareincorecta, folosirea de pointerinuli) • Sistemul de fisiere (spatiuinsuficient, drepturi de scriere/citire) • Retea (nu existaconexiune, URL nu exista) • Erori de calcul (impartirea cu zero)
C8. Exceptii • 1.2. Erorisimanagamentulerorilor • Celemai des intalniteerori: • Erori de accesare a vectorilor (accesareaelementului de pepozitia -1) • Erori de conversie (transformareaunui string intr-o valoarenumerica) • ?
C8. Exceptii • 1.2. Erorisimanagamentulerorilor • Abordareaclasica de tratare a erorilor: • Fiecaremetodaintoarce o valoare (indicator) care aratadaca s-a executat cu successau nu (in acestcaz se returneaza un cod de eroare)Dezavantaj: Programatorultrebuiesa is aminteascasaverificeceeacereturneazametodelesisaactioneze in consecinta.Se foloseste in limbajeprocedurale cum arfilimbajul C
C8. Exceptii • 1.2. Erorisimanagamentulerorilor • Abordareaclasica de tratare a erorilor: • Tratareaerorilor se face printr-un mecanism global si se foloseste un mecanism de “jump” pentru a apela o functieatuncicandapare o eroareDezavantaj: Folosireaintructiunii de “jump” (GoTo) esteconsiderata o practica “nesanatoasa” siestedescurajata.Se foloseste in limbaje cum arfi C, FORTRAN, dar se poateadaptasi in C++ si Java
C8. Exceptii • 1.2. Erorisimanagamentulerorilor • O metodamaibuna: exceptiile • Exceptiilepreiaupartilebune de la abordarileclasice • Actioneaza in mod similar cu metodele care intorccoduri de eroare. Oricemetodapoate “arunca” o exceptiedacaapare o eroare • Sunt un mecanism global de management de tratare a erorilor, mecanismimplementat la nivelulmasiniivirtuale
C8. Exceptii • 1.3. Exceptii • Cesuntexceptiile? • O exceptieeste o reprezentare a uneierorisauuneisituatiineasteptate • Exceptiilesuntimplementate in limbajul Java sisuntdisponibile in toateniveleleuneiaplicatii Java • Exceptiileizoleazasiidentificacodul in care apareeroare
C8. Exceptii • 1.3. Exceptii • Cesuntexceptiile? • Atuncicand o eroareapare in timpulexecutieunui program, masinavirtuala Java creaza un obiect de tip exceptie care contineinformatiireferitoare la eroare (tipulerorii, metodasiclasaunde a aparut, stiva de apeluri, etc.) • Obiectulrezultateste “aruncat” in program pentru a fitratat (“tratareaexceptiilor”). • Important! O exceptieesteun obiect care descriere o eroare.
C8. Exceptii • 1.3. Exceptii • Existaclase care descriutoateerorilorcomunesi care sunt derivate din clasagenericaException (http://docs.oracle.com/javase/7/docs/api/ - Exception) • Tipuri de exceptii: • Checked – exceptii care nu sunt “fatale” pentruexecutiaprogramuluisi pot fitratate (“array index out of bounds”, “file not found”, “number format exception”) • Unchecked – exceptii “fatale” (“null pointer”)
C8. Exceptii • 1.3. Exceptii • Tratareaexceptiilor • Se face cu ajutorulintructiunilortry/catch/finallysauprinfolosindclauzathrows in declareametodei • Pentruoricesuccesiune de instructiuni care “arunca” o exceptiecheckedprogramatorultrebuiesadecidadacatrateazaexceptia local (in metoda) folosindtry/catch/finallysaupropagaexceptia la nivelulurmator (in metodasauclasaapelanta) folosindthrows
C8. Exceptii • 1.4. Mecanismultry/catch/finally • Atuncicand o succesiune de instructiuni pot saprovoace o eroare, acestea se plaseaza in interiorulunui bloc try • Dupablocultry, instructiunile care trateazacazul in care apareeroarea se plaseazaintr-un bloc catch • Bloculfinally contineinstructiuni care se executasidacaapare o eroare in timpulexecutieisidaca nu
C8. Exceptii • 1.4. Mecanismultry/catch/finally • try { //instructiuni care se incearca a fiexecutate}catch(Exception e) { • //instructiuni care se executadacaapare o eroare} • finally //optional • { • //instructiuni care se executaintotdeauna • }
C8. Exceptii • 1.5. Exemple • public class Exemplu { • public static voidmain(Stringargs[]) • { • int v[] = newint[10]; • v[10] = 0; //Exceptie ! • System.out.println("Aici nu se mai ajunge..."); • } • } • La rularea programului va fi generata o exceptie, programul se va opri la instructiunea care a cauzat exceptia si se va afisa un mesaj de eroare de genul: • Exception in thread "main" • java.lang.ArrayIndexOutOfBoundsException :10 • at Exceptii.main (Exceptii.java:4)
C8. Exceptii • 1.5. Exemple • public class Exemplu { • public static voidmain(Stringargs[]) • { • try • { • int v[] = newint[10]; • v[10] = 0; //Exceptie ! • System.out.println("Aici nu se mai ajunge..."); • } • catch (Exception ex) • { • System.out.println(“A aparut o eroare!”); • } • } • } • Se face tratareaerorilor. Exceptiaaruuncata din blocultryvafiprinsa in catchsitrata. Dupatratareaexceptieiprogramulisivaincheiaexecutia in mod normal.
C8. Exceptii • 1.5. Exemple • public class Exemplu { • public static voidmain(Stringargs[]) • { • try • { • int v[] = newint[10]; • v[10] = 0; //Exceptie ! • System.out.println("Aici nu se mai ajunge..."); • } • catch (ArrayIndexOutOfBoundsException ex) • { • System.out.println(“A aparut o eroare de tip ArrayIndexOutOfBounds!”); • } • } • } • Pentrutratareamaiprecisa a exceptiei se poatefolosi in catch o clasamaispecificadecatclasaException.
C8. Exceptii • 1.5. Exemple • public class Exemplu { • public static voidmain(Stringargs[]) • { • try • { • int v[] = newint[10]; • v[10] = 0; //Exceptie ! • System.out.println("Aici nu se mai ajunge..."); • } • catch (ArrayIndexOutOfBoundsException ex) • { • System.out.println(“A aparut o eroare!”); • } • catch (Exception ex) • { • System.out.println(“A aparut o eroare!”); • } • } • } • E posibilsaavemmaimulteinstructiunicatch pentru a puteatratamaimulteexeceptiice pot rezulta din aceeasibucata de cod.
C8. Exceptii • 1.5. Exemple • public class Exemplu { • public static voidmain(Stringargs[]) • { • try • { • int v[] = newint[10]; • v[10] = 0; //Exceptie ! • System.out.println("Aici nu se mai ajunge..."); • } • catch (ArrayIndexOutOfBoundsException ex) • { • System.out.println(“A aparut o eroare de tip ArrayIndex…!”); • } • catch (Exception ex) • { • System.out.println(“A aparut o eroare!”); • } • finally • { • System.out.println(“Se executaintotdeauna!”); • } • } • }
Continutul cursului • Introducere • Platforma Java, Clase si Obiecte • Modificatori, Constructori • Pachete. Incapsularea datelor • Mostenirea / Extinderea claselor • Conversii de date. Clase abstracte • Interfete • Exceptii (I) • Exceptii (II) • Fire de executie Curs 8