Click here to load reader

Objektno orijentisano programiranje

  • View
    36

  • Download
    1

Embed Size (px)

DESCRIPTION

Java, izuzeci. Objektno orijentisano programiranje. Izuzeci. Java koristi izuzetke kao način signaliziranja ozbiljnih problema prilikom izvršavanja programa. Standardne klase ih intenzivno koriste. - PowerPoint PPT Presentation

Text of Objektno orijentisano programiranje

  • Objektno orijentisano programiranjeJava, izuzeci

  • IzuzeciJava koristi izuzetke kao nain signaliziranja ozbiljnih problema prilikom izvravanja programa.Standardne klase ih intenzivno koriste.Poto oni nastaju kada u naim Java programima stvari krenu naopako, a pre ili kasnije tako neto se desi, izuzetke treba uzeti u ozbiljno razmatranje kada dizajniramo i piemo svoje programeRazlog zato izuzecima do sada nije posveeno vie panje je to je za njih potrebno razumevanje klasa i nasleivanja

  • Ideja koja stoji iza izuzetakaIzuzetak obino signalizira greku ili neki posebno neobian dogaaj u programu koji zasluuje posebnu panju.Ukoliko pokuamo da rukujemo mnotvom esto neobinih greaka usred koda koji rukuje normalnim operacijama programa, struktura naeg programa uskoro postaje komplikovana i teka za razumevanje.Glavna korist od izuzetaka jeste to oni razdvajaju kod koji obrauje greke od koda koji se izvrava kada stvari teku glatkoDrugi pozitivan aspekt izuzetaka jeste to obezbeuju nain prisiljavanja da se reaguje na odreene greke

  • IzuzeciVana ideja koju treba shvatiti je da ne treba sve greke u programima signalizirati izuzecima samo neuobiajene ili katastrofalne.Npr. ako korisnik ne unese ispravan ulazni podatak, za to ne treba koristiti izuzetke, jer se radi o uobiajenom dogaaju.Razlog je to rukovanje izuzecima ukljuuje mnogo dodatnog procesiranja, pa e program koji rukuje izuzecima veinu vremena biti znatno sporiji nego to bi morao da bude.U Javi, izuzetak je objekat koji se kreira kada se desi abnormalna situacija u naem programu.Taj objekat sadri polja ( atribute ) u koja se smetaju informacije o prirodi problema.

  • IzuzeciZa izuzetak se kae da je izbaen (thrown)Objekat koji identifikuje izuzetnu situaciju se izbacuje kao argument specifinom paretu koda koje se pie ba da bi rukovalo tom vrstom problema.Za kod koji prima objekat izuzetak kao parametar se kae da ga hvata (catch)Situacije koje uzrokuju izuzetke su prilino raznovrsne, ali spadaju u 4 kategorije:greke koda ili podataka (neispravan pokuaj kastovanja objekta, korienje indeksa koji je izvan granica za taj niz, deljenje integer-a nulom)izuzeci standardnih metoda (npr. izbacivanje StringIndexOutOfBoundsException izuzetaka) izbacivanje naih sopstvenih izuzetakaJava greke (obino posledica greke u naem programu)

  • Tipovi izuzetakaIzuzetak je uvek objekat neke potklase standardne klase Throwable. To vai i za izuzetke koje sami definiemo, kao i za standardne izuzetkeDve direktne potklase klase Throwable klasa Error i klasa Exception pokrivaju sve standardne izuzetkeObe ove klase imaju potklase za specifine izuzetke Object

    Throwable

    Error Exception

    izuzeci koje ne treba izuzeci koje treba hvatati hvatati

  • Error izuzeciIzuzeci definisani klasom Error i njenim potklasama karakteriu se injenicom da se od nas ne oekuje da preduzimamo nita, ne oekuje se da ih hvatamo.Error ima 3 direktne potklase:ThreadDeath izbacuje se kada se nit koja se izvrava namerno stopiraLinkageError ozbiljni problemi sa klasama u naem programu, npr. nekompatibilnost meu klasama ili pokuaj kreiranja objekta nepostojeeg klasnog tipa su neke od stvari koje mogu izazvati izbacivanje izuzetka ovog tipaVirtualMachineError ima 4 potklase izuzetaka koji se izbacuju kada se desi katastrofalni pad JVM

  • Error izuzeciIzuzeci koji odgovaraju objektima klasa izvedenih iz LinkageError i VirtualMachineError su rezultat katastrofalnih dogaaja i uslova. U takvim situacijama obino sve to mi moemo da uradimo jeste da proitamo poruku o greci koja se generie kada se izbaci izuzetak, posebno u sluaju LinkageError izuzetka i da pokuamo da shvatimo ta je u naem kodu moglo da izazove problem.

  • RuntimeException izuzeciZa skoro sve izuzetke predstavljene potklasama klase Exception, moramo u na program ukljuiti kod koji e rukovati njima ukoliko na kod moe izazvati njihovo izbacivanjeAko metod u naem programu moe da generie izuzetak tipa koji ima Exception kao superklasu, moramo ili rukovati izuzetkom unutar tog metoda ili registrovati da na metod moe izbaciti takav izuzetak. U suprotnom, program se nee iskompajliratiRazlog zbog kog se RuntimeException izuzeci drugaije tretiraju i kompajler doputa da ih ignoriemo je taj to oni generalno nastaju zbog ozbiljnih greaka u naem kodu.U veini sluajeva moemo da uradimo malo da popravimo situaciju.

  • RuntimeException izuzeciMeutim, u nekim kontekstima za neke od ovih izuzetaka, to nije uvek sluaj i moda elimo da ukljuimo kod za njihovo prepoznavanjePotklase RuntimeException definisane u standardnom paketu java.lang su:ArithmeticException (npr. deljenje integera nulom)IndexOutOfBoundsException (npr. za niz, String ili Vector objekat)NegativeArraySizeException (pokuaj definisanja niza negativne dimenzije)NullPointerException (korienje promenljive koja sadri null u sluaju kada ona treba da sadri referencu na objekat da bi se pozvao metod ili pristupilo atributu)ArrayStoreException, ClassCastException, IllegalArgumentException, SecurityException, IllegalMonitorStateException, IllegalStateException, UnsupportedOperationException ( vie o njima, Horton, strana 343.)

  • Ostale potklase klase ExceptionZa sve ostale klase izvedene iz klase Exception, kompajler e proveriti da li smo izvrili rukovanje izuzetkom u metodu gde je izuzetak mogao biti izbaen ili smo naznaili da metod moe izbaciti takav izuzetak. Ukoliko nismo nita od toga, kod se nece iskompajliratiOsim nekoliko koji imaju RuntimeException kao osnovu, svi izuzeci izbaeni od metoda Javine biblioteke klasa zahtevaju odgovarajue rukovanje.

  • Rukovanje izuzecimaDakle, ako na kod moe izbaciti izuzetke koji nisu tipa Error ili RuntimeException ( i njihovih potklasa to se podrazumeva ), moramo neto da preduzmemo povodom toga.Kadgod piemo kod koji moe da izbaci izuzetak, imamo izbor. Moemo obezbediti kod unutar metoda za rukovanje proizvoljnim izbaenim izuzetkom, ili ga moemo ignorisati omoguujui da metod koji sadri kod koji moe izbaciti izuzetak prosledi taj izuzetak kodu koji je pozvao metod

  • Zadavanje izuzetaka koje metod moe izbacitiPretpostavimo da imamo metod koji moe izbaciti izuzetak koji nije tipa potklase RuntimeException niti Error klase.Neka je izuzetak npr. tipa IOExceptionAko izuzetak nije uhvaen i nije zavreno sa njegovom obradom unutar metoda, najmanje to moramo da uradimo jeste da deklariemo da moe biti izbaen izuzetak. Kako se to radi?Jednostavno se doda throws klauza u definiciju metodanpr.double myMetod() throws IOException{...}double myMetod() throws IOException,FileNotFoundException {...}Kao to prethodni primeri pokazuju, da deklariemo da na metod moe izbaciti izuzetke, samo dodamo kljunu re throws nakon liste parametara metoda. Zatim se navodi lista klasa za izuzetke koji mogu biti izbaeni, razdvojenih zapetama.

  • Zadavanje izuzetaka koje metod moe izbacitiAko neki drugi metod poziva ovaj metod, on mora da uzme u obzir izuzetke koje ovaj moe izbaciti, pa ili ih obraivati ili i on deklarisati da izbacuje izuzetke istog tipaUkoliko se ne uradi ni jedno ni drugo, kompajler e to utvrditi i kod se nee iskompajlirati

  • Rukovanje izuzecimaAko elimo da rukujemo izuzecima tamo gde se oni dese, moemo ukljuiti 3 vrste blokova koda u metod koji rukuje izuzecima, i to su:try blok obuhvata kod gde se moe javiti 1 ili vie izuzetaka. Kod koji moe da izbaci izuzetak koji elimo da uhvatimo mora biti u try blokucatch blok obuhvata kod koji je namenjen da rukuje izuzecima odreenog tipa koji mogu biti izbaeni u pridruenom try blokufinally blok uvek se izvrava pre nego se metod zavri, bez obzira da li je bilo koji izuzetak izbaen u try bloku ili nije

  • try blokkada elimo da uhvatimo izuzetak, kod metoda koji moe izbaciti izuzetak mora biti uhvaen try-blokom.Kod koji moe izazvati izuzetke ne mora biti u try-bloku, ali onda metod nee biti sposoban da uhvati nijedan od izbaenih izuzetaka i metod mora deklarisati da moe izbaciti tipove izuzetaka koji nisu uhvaenitry-blok ini kljuna re try za kojom sledi par vitiastih zagrada koje okruuju kod koji moe izbaciti izuzetaktry{// kod koji moze izbaciti 1 ili vise izuzetaka}try-blokovi su neophodni i kada elimo da uhvatimo izuzetke tipa Error ili RuntimeException ( oni se lako generiu )

  • catch blokkod za rukovanje izuzetkom datog tipa se ograuje catch-blokom.catch-blok se mora nalaziti neposredno iza try-bloka koji sadri kod koji moe izbaciti taj odreeni izuzetakcatch-blok se sastoji od kljune rei catch praene jednim parametrom unutar oblih zagrada kojim se identifikuje tip izuzetka kojim blok rukuje. Ovo prati kod za rukovanje izuzetkom koji se nalazi unutar para vitiastih zagradatry{// kod koji moze izbaciti 1 ili vise izuzetaka}catch(ArithmeticException e){// kod za rukovanje izuzetkom tipa ArithmeticException}

  • catch blokovaj catch blok rukuje samo izuzecima tipa ArithmeticExceptionTo povlai da je to jedina vrsta izuzetaka koja moe biti izbaena u try-bloku. Ako mogu biti izbaeni i drugi, ovo se nee iskompajliratiGeneralno, parametar za catch blok mora biti tipa Throwable ili neke njene potklase. Ako klasa koju zadamo kao parametar ima potklase, od catch bloka se oekuje da procesira izuzetke tog tipa, ali i svih potklasa tog tipa

  • Jednostavan primernije bitno ta radi kod, ve da izbacuje izuzetak koji hvatamoi/0 se nee iskompajlirati, da bismo izazvali deljenje nulom moramo koristiti promenljivu ( int j = 0; )Trea linija u try bloku moe se izvriti samo ako se ne izbaci izuzetak to se u ovom primeru ne moe desitiKada se izbaci izuzetak, kontrola se neposredno prenosi na prvu naredbu catch-blokaNakon to se catch-blok izvri, izvravanje se nastavlja od naredbe koja sledi za catch-blokomNaredbe try-bloka nako

Search related