Programare Orientata Obiect

Post on 14-Jan-2016

80 views 1 download

description

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. - PowerPoint PPT Presentation

transcript

04/21/23 Curs 8 1

Programare Orientata Obiect

Curs 8Exceptii

04/21/23 Curs 8 2

Continutul cursului1. Introducere2. Platforma Java, Clase si Obiecte3. Modificatori, Constructori4. Pachete. Incapsularea datelor5. Mostenirea / Extinderea claselor6. Conversii de date. Clase si metode abstracte7. Interfete8. Exceptii (I)

04/21/23 Curs 8 3

Curs 8

1. Exceptii (I)1.1 Introducere1.2 Erori si managementul erorilor1.3 Exceptii1.4 Tipuri de exceptii1.5 Mecanismul try/catch/finally1.6 Exemple

C8. Exceptii1.1. Introducere

– Utilizatorii de aplicatii se asteapta ca acestea sa functioneze fara probleme.

– Aplicatiile sunt folosite uneori in moduri care nu au fost anticipate de dezvoltatori

– Datorita problemelor de design sau erorilor de programare, aplicatiile pot sa “crape” in timpul executiei

– Este responsabilitatea programatorilor sa dezvolte aplicatii care sa nu isi intrerupa executia in mod neasteptat (!)

– Solutia? Managementul erorilor prin folosirea exceptiilor

C8. Exceptii1.2. Erori si managamentul erorilor

– O eroare reprezinta un rezultat neasteptat obtinut in urma executiei unui program

– Erorile netrate (unhandeld) pot avea ca rezultat un comportament neasteptat din partea aplicatiei sau chiar intreruperea executiei

– Erorile trebuie tratate de catre programator astfel incat ele sa nu ajunga la utilizator

C8. Exceptii1.2. Erori si managamentul erorilor

– Cauze posibile ale erorilor:– Managementul memoriei (alocare incorecta,

folosirea de pointeri nuli)– Sistemul de fisiere (spatiu insuficient, drepturi

de scriere/citire)– Retea (nu exista conexiune, URL nu exista)– Erori de calcul (impartirea cu zero)

C8. Exceptii1.2. Erori si managamentul erorilor

– Cele mai des intalnite erori:– Erori de accesare a vectorilor (accesarea

elementului de pe pozitia -1)– Erori de conversie (transformarea unui string

intr-o valoare numerica)– ?

C8. Exceptii1.2. Erori si managamentul erorilor

– Abordarea clasica de tratare a erorilor:1. Fiecare metoda intoarce o valoare (indicator)

care arata daca s-a executat cu succes sau nu (in acest caz se returneaza un cod de eroare)

Dezavantaj: Programatorul trebuie sa is aminteasca sa verifice ceea ce returneaza metodele si sa actioneze in consecinta.

Se foloseste in limbaje procedurale cum ar fi limbajul C

C8. Exceptii1.2. Erori si managamentul erorilor

– Abordarea clasica de tratare a erorilor:2. Tratarea erorilor se face printr-un mecanism

global si se foloseste un mecanism de “jump” pentru a apela o functie atunci cand apare o eroare

Dezavantaj: Folosirea intructiunii de “jump” (GoTo) este considerata o practica “nesanatoasa” si este descurajata.

Se foloseste in limbaje cum ar fi C, FORTRAN, dar se poate adapta si in C++ si Java

C8. Exceptii1.2. Erori si managamentul erorilor

– O metoda mai buna: exceptiile– Exceptiile preiau partile bune de la abordarile

clasice– Actioneaza in mod similar cu metodele care

intorc coduri de eroare. Orice metoda poate “arunca” o exceptie daca apare o eroare

– Sunt un mecanism global de management de tratare a erorilor, mecanism implementat la nivelul masinii virtuale

C8. Exceptii1.3. Exceptii

– Ce sunt exceptiile?– O exceptie este o reprezentare a unei erori

sau unei situatii neasteptate– Exceptiile sunt implementate in limbajul Java

si sunt disponibile in toate nivelele unei aplicatii Java

– Exceptiile izoleaza si identifica codul in care apare eroare

C8. Exceptii1.3. Exceptii

– Ce sunt exceptiile?– Atunci cand o eroare apare in timpul executie

unui program, masina virtuala Java creaza un obiect de tip exceptie care contine informatii referitoare la eroare (tipul erorii, metoda si clasa unde a aparut, stiva de apeluri, etc.)

– Obiectul rezultat este “aruncat” in program pentru a fi tratat (“tratarea exceptiilor”).

– Important! O exceptie este un obiect care descriere o eroare.

C8. Exceptii1.3. Exceptii

– Exista clase care descriu toate erorilor comune si care sunt derivate din clasa generica Exception (http://docs.oracle.com/javase/7/docs/api/ - Exception)

– Tipuri de exceptii:– Checked – exceptii care nu sunt “fatale”

pentru executia programului si pot fi tratate (“array index out of bounds”, “file not found”, “number format exception”)

– Unchecked – exceptii “fatale” (“null pointer”)

C8. Exceptii1.3. Exceptii

– Tratarea exceptiilor– Se face cu ajutorul intructiunilor

try/catch/finally sau prin folosind clauza throws in declarea metodei

– Pentru orice succesiune de instructiuni care “arunca” o exceptie checked programatorul trebuie sa decida daca trateaza exceptia local (in metoda) folosind try/catch/finally sau propaga exceptia la nivelul urmator (in metoda sau clasa apelanta) folosind throws

C8. Exceptii1.4. Mecanismul try/catch/finally

– Atunci cand o succesiune de instructiuni pot sa provoace o eroare, acestea se plaseaza in interiorul unui bloc try

– Dupa blocul try, instructiunile care trateaza cazul in care apare eroarea se plaseaza intr-un bloc catch

– Blocul finally contine instructiuni care se executa si daca apare o eroare in timpul executiei si daca nu

C8. Exceptii1.4. Mecanismul try/catch/finally

try {//instructiuni care se incearca a fi executate

}catch(Exception e) {

//instructiuni care se executa daca apare o eroare}finally //optional{

//instructiuni care se executa intotdeauna}

C8. Exceptii1.5. Exemple

public class Exemplu { public static void main(String args[]) {

int v[] = new int[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 :10at Exceptii.main (Exceptii.java:4)

C8. Exceptii1.5. Exemple

public class Exemplu { public static void main(String args[]) {

try{

int v[] = new int[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 tratarea erorilor. Exceptia aruuncata din blocul try va fi prinsa in catch si trata. Dupa tratarea exceptiei programul isi va incheia executia in mod normal.

C8. Exceptii1.5. Exemple

public class Exemplu { public static void main(String args[]) {

try{

int v[] = new int[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!”);}

}}

Pentru tratarea mai precisa a exceptiei se poate folosi in catch o clasa mai specifica decat clasa Exception.

C8. Exceptii1.5. Exemple

public class Exemplu { public static void main(String args[]) {

try{

int v[] = new int[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 posibil sa avem mai multe instructiuni catch pentru a putea trata mai multe execeptii ce pot rezulta din aceeasi bucata de cod.

C8. Exceptii1.5. Exemple

public class Exemplu { public static void main(String args[]) {

try{

int v[] = new int[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 executa intotdeauna!”);}

}}

04/21/23 Curs 8 22

Continutul cursului1. Introducere2. Platforma Java, Clase si Obiecte3. Modificatori, Constructori4. Pachete. Incapsularea datelor5. Mostenirea / Extinderea claselor6. Conversii de date. Clase abstracte7. Interfete8. Exceptii (I)9. Exceptii (II)10. Fire de executie