Poznámky
Prezentace
Osnova
1
"Róbert Novotný"
  • Róbert Novotný
  • robert.novotny@upjs.sk
  • 7. 12. 2007
2
Ako nenechať vybuchnúť program pri udeľovaní zápočtu
  • Život programátora je smutný
  • Všade je kopa chýb
    • chyby syntaktické:
      • hlásené kompilátorom – vieme vyriešiť
    • chyby pri behu programu
      • ako na ne?
3
Ako nenechať vybuchnúť program pri udeľovaní zápočtu
  • Behové chyby: čím je bližšie termín odovzdania projektu, tým viac behových chýb vzniká
    • programátorský škriatok dá na vstup nesprávne údaje
    • ,,Pretože tam, kde očakávate vstup 12, užívateľ just zadá Britney Spears is not dead!
    • súbory sa záhadne presúvajú po disku
    • na disku dôjde miesto
      • príčinou nemusí byť nutne DC++/Torrent/eMule...
    • administrátor sa rozhodol zmeniť heslá k databáze
    • ,,Jsem princezná Rosella a zaspívám vám písničku: Divide by zero overflow"
4
Ako nenechať vybuchnúť program pri udeľovaní zápočtu
  • Riešenie: Výnimky
  • Príklad: synček píše domácu úlohu.
  • Algoritmus:
    • vezmi učebnicu, písanku a pero
    • vyrieš príklad
    • po skončení ju odlož do aktovky


5
Ako nenechať vybuchnúť program pri udeľovaní zápočtu
  • Klasické jazyky:
    • nájdi pero. Podarilo sa?
      • nájdi písanku. Podarilo sa?
        • nájdi zadanie. Podarilo sa?
  • Jazyky s podporou výnimiek:
    • Nebudeme sa synčeka pýtať, či našiel pero, či má písanku, a či si vôbec zapísal znenie DÚ
    • Necháme ho pracovať a synček sám zahlási, ak mu niečo prekáža vo vyriešení úlohy
    • Všetky prekážky bude musieť niekto (otecko?) odstrániť, resp. sa s nimi vysporiadať
6
Ako nenechať vybuchnúť program pri udeľovaní zápočtu
  • skús toto:
    • nájdi pero
    • nájdi písanku
    • nájdi zadanie
    • vyrieš príklad
    • odlož všetko do tašky
  • ak sa niečo nepodarilo...
    • pero nemá atrament, písanku zjedol pes, zadanie je naškrabané...
  • ....DÚ asi nedokončíme, musíme sa s tým nejak vysporiadať
7
Ako nenechať vybuchnúť...
  • try {
    • Pero pero = izba.getPero();
    • Písanka zošit = izba.getPísanka();
    • String zadanie = učebnica.getDÚ();
    • dieťa.vyriešDomácuÚlohu(pero, zošit, zadanie)
    • taška.odlož(pero, zošit)
  • } catch (PeroJePrázdneException e) {
    • System.out.println("Prepáčte, že som
    • nenapísal DÚ, ale nemal som atrament");
  • } catch (NemámPísankuException e) {
    • System.out.println("Prepáčte, že som
    • nenapísal DÚ, ale nemal som písanku a
    • obchod bol zavretý");
  • }


8
Ako nenechať vybuchnúť...
  • Čo je PeroJePrazdneException?
  • exception = výnimka
  • ľubovoľná metóda môže v prípade chyby vyhodiť výnimku
  • výnimka znamená, že nastala chybová situácia a beh metódy sa ukončil
  • kus kódu, ktorý takúto metódu volá, môže  výnimku odchytiť a vysporiadať sa s ňou
9
Reálnejší príklad – čítanie zo súboru
10
Reálnejší príklad – čítanie zo súboru
11
Reálnejší príklad – čítanie zo súboru
12
Reálnejší príklad – čítanie zo súboru
13
A nakoniec sa všetko dobre skončilo...
14
A nakoniec sa všetko dobre skončilo...
15
Riešenie č. 1
16
Riešenie č. 2 – blok finally
17
Konečne .. blok finally
  • Blok finally sa vykoná vždy
  • Ak nastane v try bloku výnimka
    • vykoná sa kód v príslušnom catch bloku
    • Potom sa vykoná finally blok
  • Ak výnimka nenastane
    • dokončí sa try blok
    • Potom sa vykoná finally blok
18
Prípad, že je všetko OK
19
Ak sa veci pokazia...
20
Praktický príklad – načítanie súboru
21
Praktický príklad – načítanie súboru 2
22
Praktický príklad – načítanie súboru 3
23
Ako vyhodiť vlastnú výnimku
24
Ako vyhodiť vlastnú výnimku
25
Pohadzujeme výnimky hore-dole
26
Pohadzujeme výnimky hore-dole
27
Pohadzujeme výnimky hore-dole
28
Pohadzujeme výnimky hore-dole
29
Pohadzujeme výnimky hore-dole
30
Časté chyby
31
Časté chyby