You are on page 1of 27

Objektno

orijentirano
programiranje
6. Iznimke
Upravljanje pogreškama
Što napraviti kada se u funkciji dogodi greška?

• prekinuti izvođenje programa


• vratiti status pogreške
• najčešće nema posebnog mjesta za vraćanje statusa
o funkcija vraća i podatak i status na istom mjestu → loše

• sastavni dio svakog programa


• ovdje govorimo o pogrešksms koje se javljaju dinamički,
tijekom izvođenja programa
Klasični pristup
Moderni pristup
• Noviji programski jezici (primjer je već C++) uvode pojam
iznimke koja opisuje iznimnu situaciju
• Engleski termin je Exception

• Ako metoda regularno završi onda sigurno vraća podatak


o nema razloga da povratni tip bude pogrešan

• Ako se tijekom izvođenja metode dogodi pogreška, izazvat će


se iznimna situacija koja će biti opisana prikladnim objektom

o Taj objekt nazivamo iznimkom i sadrži detaljnije informacije o razlogu nastanka iznimne
situacije
Iznimke (1)
• U programskom jeziku Java definira se koncept "iznimne
situacije" ili kraće, iznimke.

• Ideja je mehanizam upravljanja pogreškama i njihovom


obradom razdvojiti od argumenata i povratnih vrijednosti
metoda.

• u Javi je moguće pisati vrlo čitak jednostavan kod koji


korektno obrađuje pogreške.
Iznimke (2)
• Java platforma definira čitav niz iznimnih situacija i razreda
čiji se primjerci koriste za njihov opis

• Najopćenitiji opis iznimne situacije predstavlja razred


Throwable.
• Iz tog razreda izvedeni su razredi Error i Exception.
• Oba razreda dalje imaju razrađeno stablo nasljeđivanja.
• Razredi tipa Error (ili iz njega izvedeni) koriste se za
opisivanje iznimnih situacija koje su rezultati ozbiljnih
problema koje tipična aplikacija ne bi trebala obrađivati
Iznimke (3)
• Razredi tipa Exception (ili iz njega izvedeni) služe za
modeliranje "normalnijih" pogrešaka koje bi program mogao
obraditi na prikladan način
Klasa Throwable
• Klasa Throwable omogućava pristup podatcima kao što su:
o cjelokupno stanje na stogu u trenutku kada je nastala iznimna situacija
o točna lokacije iznimke u kodu (koja datoteka, koji redak) za svaku metodu
o poruka pogreške
o pristup do “omotane” iznimke, ako takva postoji
• Omogućava i pristup metodama poput metode
printStackTrace() za ispis svih informacija na standardni
izlaz za pogreške
• Razredi izvedeni iz razreda Throwable dodavat će druge
prikladne informacije ovisno o vrstama iznimnih situacija koje
opisuju
Stablo iznimki
Primjer pojave iznimke (1)
Primjer pojave iznimke (2)
• Java api doc:
https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.ht
ml#parseInt-java.lang.String-
Obrada iznimki
• kod koji može izazvati iznimku smješta se u try blok
• ovisno o vrstama iznimki koje se očekuju piše se jedan ili više
catch blokova
• redoslijed catch blokova je bitan, jer se po nastupanju iznimne
situacije ispitivanje provodi od prvog catch bloka
• prvi blok koji deklarira obradu iznimke koja je „kompatibilna”
s nastalom iznimkom bit će odabran za izvođenje
o ako takvog nema, iznimka se propagira dalje

• nakon izvođenja catch bloka, program se nastavlja s prvom


naredbom koja slijedi iza čitave try-catch strukture
o nema povratka u try blok
Primjer obrade iznimke
Primjer obrade više iznimki
Multi-catch
• U slučaju da se obrada više vrsta iznimaka obavlja na
identičan način, umjesto kopiranja obrade u više blokova
možemo koristiti multi-catch
• Više tipova iznimaka „dodaje” se znakom |
Primjer neispravnog poretka catch blokova
• Pri poretku catch blokova treba voditi računa o nasljeđivanju
iznimki.
Izazivanje iznimne situacije (1)
• Programer u Javi sam može izazvati iznimnu situaciju
odnosno „baciti” iznimku ukoliko smatra da u tom trenutku
vrijednost varijable nije ispravna

• Najprije je potrebno stvoriti prikladan primjerak razreda koji


opisuje nastalu iznimnu situaciju a potom pokrenuti postupak
obrade iznimne situacije uporabom ključne riječi throw.
Izazivanje iznimne situacije (2)
finally blok (1)
• Rješenje za zajednički kod try i catch bloka može biti finally
blok
• Kod smješten u blok finally izvodi se uvijek, neovisno o tome
kako je završeno izvođenje bloka try-catch
• Koristi se kad treba obaviti dio koda koji će predstavlja
završno čišćenje resursa

o npr., zatvaranje veze prema nekoj datoteci prilikom korištenja objekta tipa Scanner
finally blok (2)
Automatsko upravljanje resursima (1)
• Za jednostavnije upravljanje određenom vrstom resursa, od
Jave 7 dostupan je još jedan oblik bloka try koji nas oslobađa
pisanja repetitivnog koda

• takav oblik try bloka naziva se try-with-resources

• može se koristiti samo s razredima koji implementiraju


interface AutoCloseable
Automatsko upravljanje resursima (2)
• resursi ovog tipa otvaraju se unutar zagrade koja slijedi odmah
nakon ključne riječi try

• nema potrebe za pisanjem eksplicitnoga koda koji će se brinuti


za zatvaranje ovih resursa: kompajler će sam generirati
potreban kod za finally blok

• ovakav način rada s resursima koristit ćemo kod rada s


datotekama (odnosno tokovima podataka općenito)
Automatsko upravljanje resursima (3)
Stvaranje vlastitih iznimki (1)
• U okviru standardnih Javinih biblioteka dostupno je mnoštvo
raznovrsnih iznimaka koje se mogu slobodno koristiti
• međutim, ponekad je praktično definirati novu vrstu iznimke
(ili čak novu porodicu iznimki)
• primjerice, za rad s binarnim brojevima ima smisla definirati
novu vršnu iznimku npr. BinaryException
o ako korisnik pokuša unijeti broj 2 u format za binarni broj, zgodno je imati
NumberBinaryException
o ako pokuša zbrojiti binarni i dekadski broj, zgodno je imati OperationBinaryException
Stvaranje vlastitih iznimki (2)
• Da bismo razred BinaryException mogli koristiti pri
izazivanju iznimne situacije, nužno je da ga izvedemo iz
razreda koji je barem Throwable

o izvođenje iz razreda Throwable je nepoželjno; to je preopćenita iznimka


o Izvođenje iz grane razreda Error nema smisla jer ovo nisu neoporavive pogreške
o ostaje odluka hoćemo li razred izvesti iz nekog od razreda koji su izvedeni iz razreda
RuntimeException ili ne (drugim riječima, hoće li iznimke biti provjeravane ili ne)
o ako se očekuje da se program može jednostavno oporaviti od iznimke, neka iznimka bude
provjeravana.
o ako program(er) ne može napraviti ništa da bi se oporavio od iznimke, preporuča se
bacanje neprovjeravane iznimke.
Stvaranje vlastitih iznimki (3)
• Sljedeće predavanje :
7. Generici

• Info: hrvoje.radovan@aspira.hr

You might also like