1 / 21

proleće/leto 2008

Programski jezici. proleće/leto 2008. Postupanje sa greškama. Ispravni i robustni programi Program je ispravan ako radi tačno ono što treba Program je robustan ako postupa sa neočekivanim okolnostima na razuman način. P ostupanje sa greškama. Primer: sortiranje brojeva

meira
Download Presentation

proleće/leto 2008

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programski jezici proleće/leto 2008

  2. Postupanje sa greškama • Ispravni i robustni programi • Program je ispravan ako radi tačno ono što treba • Program je robustan ako postupa sa neočekivanim okolnostima na razuman način Programski jezici

  3. Postupanje sa greškama • Primer: sortiranje brojeva • Program mora uvek da bude ispravan • Program koji pogrešno sortirabrojeve je beskoristan • Robustan programmora da pravilno postupa sa pogrešnim ulaznim podacima • Program ne mora uvek da bude robustan • Pomoćni program za svoje potrebe ne mora da bude potpuno robustan Programski jezici

  4. Postupanje sa greškama • Posledice loših programa • Nerviranje (program se “ukočio” ili “puca”) • Izgubljeno vreme i utrošen rad • Izgubljen novac i ugled u bankama, tel. komanijama, kosmičkim projektima • Gubitak ljudskih života zbog pogrešno programiranih medicinskih aparata Programski jezici

  5. Postupanje sa greškama • Ugrađeni mehanizmi u Javi • Sve promenljive moraju biti deklarisane • Proveravanje indeksa niza da li leži u dozvoljenim granicama (“buffer overflow errors”) • Direktno manipulisanje pokazivačima nije dozvoljeno • “Curenje” memorije nije moguće (ili bar smanjeno) Programski jezici

  6. Postupanje sa greškama • Problemi koji ostaju u Javi • Numerička izračunavanja ne podležu otkrivanju grešaka • celobrojno prekoračenje 2147483647 +1 → −2147483648 • realno prekoračenje Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY Double.NaN (“not a number”) – nedefinisan rezultat (1/0, √-4) • Približno predstavljanje realnih brojeva • 1/3 = 0.3333 … ≈ 0.3333333 Programski jezici

  7. Postupanje sa greškama • Robustni program mora “preživeti” neobične i izuzetne okolnosti • Jedan način za postupanje sa problemima: predvideti probleme u programu i uključiti testiranje za svaki mogući problem • Primer: korišćenje elemenata niza a Programski jezici

  8. Postupanje sa greškama if (i < 0 || i > a.length) { // postupanje sa problemom } else { // normalna obrada elementa a[i] } Programski jezici

  9. Postupanje sa greškama • Nedostaci ovog pristupa • Teško i ponekad nemoguće predvideti sve moguće probleme • Nije uvek jasno šta uraditi kada se otkrije problem • Jednostavan program postaje komplikovana mešavina “pravih” naredbi i if naredbi Programski jezici

  10. Izuzeci • Drugi način za postupanje sa problemima (u Javi): izuzeci • Izuzeci su opštiji pojam od grašaka – sve okolnosti koje predstavljaju izuzetak od normalnog toka izvršavanja • Sve greške • Specijalni slučajevi ne koje programer nema uticaja ili narušavaju normalnu logiku programa Programski jezici

  11. Izuzeci • Kada se izuzetak (izuzetna okolnost) dogodi u toku izvršavanja – izuzetak je izbačen • Izvršavanje programa se prekida (“puca”) ako se ne rukuje izuzetkom • Rukovanje izuzetkom – izuzetak se hvata i obrađuje Programski jezici

  12. Izuzeci • Kada se izuzetak dogodi, izbacuje se objekat izuzetka koji sadrži • poruku o tome šta je dovelo do izuzetka • listu metoda koji su se izvršavali kada se izuzetak dogodio (“method call stack”) • Svi objekti izuzetka moraju pripadati nekoj klasi koja je naslednica standardne klase java.lang.Throwable • Različiti tipovi izezetaka su predstavljeni nekom proširenom klasom klase Throwable Programski jezici

  13. Izuzeci • Složena hijerarhija klasa Throwable Programski jezici

  14. Izuzeci • Klasa Throwable sadrži nekoliko objektnih metoda koji se mogu koristiti sa svakim objektom izuzetka Throwable e; e.getMessage() – poruka o grešci e.toString() – stringovna reprezentacija objekta izuzetka e.printStackTrace() – lista aktivnih metoda (Method Call Stack) Programski jezici

  15. Izuzeci • Hvatanje i obrada izuzetaka try { // naredbe koje mogu dovesti do izuzetka } catch (Exception e) { // naredbe koje mogu obrađuju izuzetak } Programski jezici

  16. Izuzeci • Izvršavanje try-catch bloka • Izvršavaju se naredbe u try bloku • Ako se ne izbaci nijedan ili se izbaci izuzetak različitog tipa od onog navedenog u (…) iza reči catch, catch blok se preskače • Ako se izbaci izuzetak tipa navedenog u (…) iza reči catch, izvršava se catch blok • Nastavlja se izvršavanje programa iza catch bloka, ako drugačije nije rešeno Programski jezici

  17. Izuzeci • Primer try { a[i] = 0; } catch (ArrayIndexOutOfBoundsException e) { System.out.println(“Indeks izvan granica”); e.printStackTrace(); } Programski jezici

  18. Izuzeci • Pisanje try-catch bloka • Vitičaste zagrade su obavezne • Blok u catch klauzuli – rukovalac izuzecima (“exception handler”) • Hvata se samo izuzetak tipa ArrayIndexOutOfBoundsException • Može biti više catch klauzula Programski jezici

  19. Izuzeci • Primer try { a[i] = 0; } catch (ArrayIndexOutOfBoundsException e) { System.out.println(“Indeks izvan granica”); e.printStackTrace(); } catch (NullPointerException e) { System.out.println(“Niz a ne postoji”); e.printStackTrace(); } Programski jezici

  20. Izuzeci • ArrayIndexOutOfBoundsException i NullPointerExceptionsu klase naslednice odRuntimeException try { a[i] = 0; } catch (RuntimeException e) { System.out.println(“Greška u radu sa nizom a”); System.out.println(“Greška je “ + e); e.printStackTrace(); } Programski jezici

  21. Izuzeci • Prethodni primeri nisu realistični • Pažljivo programiranje je bolje od rukovanja izuzecima • Rukovanje izuzecima tipa RuntimeException nije obavezno • Rukovanje izuzecima nekih drugih tipova jeste obavezno Programski jezici

More Related