SlideServe
Menu
Préférences
© SlideServe · v2026

proleće/leto 2008

meira avatar
21 diapositives · 349 Views · Sep 30, 2014

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

proleće/leto 2008 - slide 1
01 / 21proleće/leto 2008
1 / 17

Télécharger la présentation

proleće/leto 2008
Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation

Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement. Téléchargez la présentation en cliquant sur ce lien. Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.

F I N

Plus de contenu associé

Transcription de la présentation
  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