014 izuzeci

Upload: mihajlo-jonic

Post on 07-Jul-2018

224 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/19/2019 014 Izuzeci

    1/38

    1

    MEHANIZMI ZA OBRADU

    IZUZETAKA

  • 8/19/2019 014 Izuzeci

    2/38

    2

     Pojam izuzetka Pojam izuzetka

    Izuzetak je događaj koji onemogućava regularno izvršenje

    programa.

    Izuzetak treba posebno obraditi izvan osnovnog toka

    programa. Primeri:

    U izrarzu se pojavilo deljenje nulom,

    Pri rezervaciji memorijskog prostora, u dinamičkoj zonimemorije nije bilo dovoljno mesta,

    ošlo je do prekoračenja opsega pri pristupu elementima niza, !ksterni uredjaj sa kojeg se čitaju podaci je u kvaru,

    ošlo se do kraja datoteke iz koje se čitaju podaci...

  • 8/19/2019 014 Izuzeci

    3/38

    3

     Reakcija na standardne izuzetke Reakcija na standardne izuzetke

    Mnogi računarski sistemi imaju harderske mogu!nostida generi"u  signa#e kojima reaguju na odre$ene gre"kekoje nastaju u toku i%r"aanja &rograma' Na &rimer(&ojaa &rekora!enja u toku i%r"aanja aritmeti)kiho&era)ija( de#jenje nu#om i s#'

    *rogramski je%i)i su o+ično rea#i%oani tako da u takimsitua)ijama do#a%i do &rekida &rograma( kontro#a se

    &renosi o&eratinom sistemu koji o+ično "tam&aodgoaraju!u &oruku i &rekida da#je i%r"aanje&rograma'

  • 8/19/2019 014 Izuzeci

    4/38

    4

     Reakcija na standardne izuzetke Reakcija na standardne izuzetke

    U slučaju ulazno izlaznih operacija situacija je neštodrugačija. Na primer,u programskom jezikuF!"!#N postoji mogu$nost da se u ok%iru !'

    nared(e de)iniše la(ela na koju se prenosiupra%ljanje kada se u toku iz%rša%anja o%e nared(edo*e do kraja datoteke koja se čita.

    +sti mehanizam je iskoriš$en da se de)iniše odgo%orsistema na greške koje mogu da nastanu u toku

    iz%rša%anja !' nared(e. Na primer u nared(i

    READ,UNIT-.(/TM-0111(ERR-011(END-2223

  • 8/19/2019 014 Izuzeci

    5/38

    -

    Tehnike za obradu izuzetakaTehnike za obradu izuzetaka

    od no%ijih programskih jezika razradjenisu mehanizmi za /rih%atanje standardnih hard%erskih izuzetaka i

    'e)inisanje i o(radu so)t%erskih izuzetaka.

    od starijih programskih jezika o%i su se pro(lemi o(ično reša%ali pomo$u

    oriš$enja statusnih promenlji%ih i /otprograma koji se akti%iraju u odre*enim

    situacijama.

  • 8/19/2019 014 Izuzeci

    6/38

    0

    Tehnike za obradu izuzetakaTehnike za obradu izuzetaka

    "ehnika zasno%ana na koriš$enju statusnih parametara /otprogramu se dodaje ekstara parametar koji nosi in)ormaciju o

    statusu odre*enog doga*aja.

    ada nastane doga*aj koji se kontroliše taj parametar menja

    %rednost. /ri po%ratku iz potprograma u%ek se ispituje %rednost statusnog

     parametra

     Nedostaci o%e tehnike od postaje jako nepregledan gomilaju se i) nared(e za

    ispiti%anje statusnih promenlji%ih /ropagacija izuzetka kroz %e$i (roj pozi%anih procedura zahte%a

    ispiti%anje statusnog parametra u s%akoj proceduri.

  • 8/19/2019 014 Izuzeci

    7/38

    Tehnike za obradu izuzetakaTehnike za obradu izuzetaka

    'ruga mogu$nost je da se u potprogramu koristi parametar oznaka, kao u slučaju !' nared(e iz

    F!"!#N5a.

    "o omogu$a%a da se izlaz iz potprograma razlikuje zaslučaj kada se program normalno iz%rša%a i za slučaj kada

     je nastao izuzetak koji se kontroliše.

    6e*utim, kod jezika sa dinamičkom implementacijom

    o%a tehnika se ne mo7e koristiti jer ote7a%a manipulisanjesa run5time stekom z(og toga što se tačke izlaska iz

     potprograma razlikuju u za%isnosti od situacije nastale u

    toku iz%rša%anja programa.

  • 8/19/2019 014 Izuzeci

    8/38

    8

    Tehnike za obradu izuzetakaTehnike za obradu izuzetaka

    "re$a mogu$nost je da postoji potprogram za o(radu

    izuzetaka kao od%ojen modul i da se kao parametar

     prenosi u potprograme u kojima se kontroliše

    odre*eni izuzetak.

    sno%ni nedostatak kod o%ak%og pristupa je u tome

    što se pri s%akom pozi%u mora prenosiiti i taj

     potprogram koji o(ra*uje izuzetak. #ko u jednom potprogramu kontrolišemo %iše izuzetaka kod

     postaje pretrpan tak%im elementima.

  • 8/19/2019 014 Izuzeci

    9/38

    9

    Struktura programa sa kodomStruktura programa sa kodom

     za obradu izuzetaka. za obradu izuzetaka.procedure primer"

    ....

    #$%! :U'()*)+"

    ....

    return "--od za obradu izuzetka

    ....

    when zero-divide do

    #$%! :&/"print 012reška 3 4e moze se izracunati srednja vrednost15"

    print 01)*)+ je nula15

    end "

    ....

    end primer"

  • 8/19/2019 014 Izuzeci

    10/38

    1:

    Upravljanje izuzecimaUpravljanje izuzecima

     Kod programa

    ...

    +egin

    .....

     Neka naredba

    .....

    end4

     Aktiviranje izuzetka

     Kod za obradu

    izuzetka5hen

    +egin

    ....

    end4

    5hen+egin

    ....

    end4

    '''''

    5hen+egin

    ....

    end4?

    ?

     Kraj programa

  • 8/19/2019 014 Izuzeci

    11/38

    11

     PL! PL!

    orisničke sek%ence koda za o(radu izuzetaka uo%om jeziku imaju o(lik (loka nared(i

    N +me5izuzetka ;&

  • 8/19/2019 014 Izuzeci

    12/38

    12

     PL! PL!

     "ako*e, postoji mogu$nost de)inisanja korisničkih

    so)t%erskih izuzetaka koji se kreiraju pomo$u

    >N'+"+N +me5izuzetka.

    orisnički izuzeci moraju da se akti%iraju podignu

    eksplicitno, što se posti7e nared(om

    ?+N'+"+N +me5izuzetka

  • 8/19/2019 014 Izuzeci

    13/38

    13

     AdaStandardni izuzeci AdaStandardni izuzeci

    >N?"!#+N"A&!!!  B #kti%ira se u slučaju izlaska iz

    opsega %rednosti nekog diskretnog tipa podataka range

    constraint , upotre(e indeksa %an dimenzija polja indeC

    constraint i sl. /r6 : integer range 7..8/"

    a : array 07..7/5of integer"

    .....

    6:&9/"-- 6 dobija vrednost van opsega tipa

    6 :& a065"

    --aktivira se izuzetak kada 6 nije u opsegu 7..7/, ali i

    kada a065 nije u opsegu 7..8/.

  • 8/19/2019 014 Izuzeci

    14/38

    14

     AdaStandardni izuzeci AdaStandardni izuzeci

     NU6&!+>A&!!!  5 akti%ira se hard%erski u slučaju

     poja%e greške u iz%rša%anju numeričkih operacija kao

    što su podkoračenja i prekoračenja ili deljenje sa nulom.

    /!

    semantičlke greške u toku iz%rša%anja programa, na

     primer kada se koristi promenlji%a kojoj nije

    inicijalizo%ana %rednost.

  • 8/19/2019 014 Izuzeci

    15/38

    1-

     AdaStandardni izuzeci AdaStandardni izuzeci

    ?"!#

  • 8/19/2019 014 Izuzeci

    16/38

    10

     AdaUpravljanje izuzecima AdaUpravljanje izuzecima

    4aredba za privatanje izuzetaka u +di

    begin

      -- od koji se nadgleda

    exceptionwhen ImeIzuzetka1 &; Naredba1"

    when ImeIzuzetka2  &; Naredba2 "

      <

    end"

  • 8/19/2019 014 Izuzeci

    17/38

    1

     AdaUpravljanje izuzecima AdaUpravljanje izuzecima

    function =+)*%I! 04:in I4)!2!%5 return=*+) is

    =+):=*+) :&7./"

    begin

    for I in 8..4 loop=+) :&=+) >=*+)0I5"

    end loop "

    return =+)"

    exception

    when 4U'!%I?@!%%*% &;

    return =*+)+#)"

    end =+)*%I!"

  • 8/19/2019 014 Izuzeci

    18/38

    18

     AdaSo"tverski izuzeci AdaSo"tverski izuzeci

    program #*=)$!%#I @IAUA!?I is

    2%!#+:exception "--*pis izuzetka

    begin

    ....

    raise 2%!#+"--+ktiviranje izuzetka"

    ....

    exceptionwhen 2%!#+ &;

    --od za upravljanje izuzetkom

    ....

    end "

  • 8/19/2019 014 Izuzeci

    19/38

    19

     AdaSo"tverski izuzeci AdaSo"tverski izuzeci

    exceptionwhen 2%!#+@7 &;--eo koda koji se ispunjava kada je aktivirana2%!#+@7"when 2%!#+@8 &;

    --eo koda koji se ispunjava kada je aktivirana2%!#+@8"....when 2%!#+@k &;--eo koda koji se ispunjava kada je aktivirana

    2%!#+@k"when others &;--eo koda koji se ispunjava kada je aktiviran bilo kojiizuzetak--koji nema posebno upravljanje"end "

  • 8/19/2019 014 Izuzeci

    20/38

    2:

     AdaSo"tverski izuzeci AdaSo"tverski izuzeci

    with )!B)@I*"use )!B)@I*"

    procedure 2%+!@!#?%IP)I*4 is

    package I4)!2!%@)!B)@I* is new I4)!2!%@I*

    0I4)!2!%5"use I4)!2!%@)!B)@I*"

    =%!C:array 07..7/5of I4)!2!%"

    4!D@2%+!,I4!B,I'I)@7,I'I)@8 :I4)!2!%"

    begin loop

    2!)04!D@2%+!5"

    I4!B :&4!D@2%+! (7/ E7"

  • 8/19/2019 014 Izuzeci

    21/38

    21

     AdaSo"tverski izuzeci AdaSo"tverski izuzeci

    begin

    =%!C0I4!B5:&=%!C0I4!B5E7"

    exception

    when ?*4#)%+I4)@!%%*% &;

    if 4!D@2%+! &7//then =%!C07/5:&=%!C07/5E7"

    else

    PU)01!%%*% --neF grade:15"

    PU)04!D@2%+!5"PU)01is out oG range15"

    4!D@I4!"

    end if "

    end "end loop "

  • 8/19/2019 014 Izuzeci

    22/38

    22

     AdaSo"tverski izuzeci AdaSo"tverski izuzeci

    exceptionwhen !4@*=@=I! &;

    PU) 01imits =reHuenc15"

    4!D@I4!"4!D@I4!"

    for I4!B in / ..J

    loop

    I'I)@7 :&7/ >I4!B"

    I'I)@8 :&I'I)@7 EJ"

    if I4!B &J

    then I'I)@8 :&7//"

    end if "

    PU)0I'I)@75"PU)0I'I)@85"

    PU)0=%!C0I4!B55"

    4!D@I4!"

    end loop "

    end 2%+!@I#)%IKU)I*4"

  • 8/19/2019 014 Izuzeci

    23/38

    23

     AdaPreno#enje izuzetaka AdaPreno#enje izuzetaka

    procedure !B?@!'* isprocedure +)I$I%+4L! is

    begin

    put01Izuzetak je aktiviran15"

    raise ?*4#)%+I4)@!%%*%"

    --U potprogramu ne postoji e6ception kod

    --Izuzetak se prenosi na pozivajuMI modul"

    end "

    procedure UP%+$L+4L! is

    begin

    put 01Pocetak potprograma za upravljanje izuzetkom15"

     +)I$I%+4L!"--Poziv potprograma za aktiviranje izuzetka"exception

    when ?*4#)%+I4)@!%%*% &;

    put01od za upravljanje izuzetkom15"

    end "

  • 8/19/2019 014 Izuzeci

    24/38

    24

     AdaPreno#enje izuzetaka AdaPreno#enje izuzetaka

    +egin putD

  • 8/19/2019 014 Izuzeci

    25/38

    2-

     $elphi%&ception hendling block  $elphi%&ception hendling block 

    "ipična struktura (loka za upra%ljanje izuzecima (ila (itry

    Nstatements ou Fant to protect O

    except

    Ne6ception-andling statements O

    finally

    N O

    end "

     %&cept   deo (loka za upra%ljanje izuzecima sastoji se od po jedne

    nared(e za s%aki tip izuzetka kojim se upra%lja. %e nared(e seiz%rša%aju kada se dogodi odre*eni izuzetak nared(a prih%ata

    izuzetak, a pišu se prema slede$oj sintaksi

    on tpe oG e6ception;do statement;"

  • 8/19/2019 014 Izuzeci

    26/38

    20

     $elphiPrimer  $elphiPrimer 

    function

    2et+verage0#um,4umber*GItems:Integer 5:

    Integer"begin

    try

    %esult :um div 4umber*GItems"

    except

    on !ivKAero do %esult :&/"

    end "

    end ;

  • 8/19/2019 014 Izuzeci

    27/38

    2

     $elphiSo"tverski izuzeci $elphiSo"tverski izuzeci

    U programu mo7emo de)inisati s%oj tip izuzetaka kao

    t8&e&6J&Cception Gclass&Cception

    %aka% izuzetak se eksplicitno mo7e akti%irati nared(om

    raise &6J&Cception

  • 8/19/2019 014 Izuzeci

    28/38

    28

     $elphiSo"tverski izuzeci $elphiSo"tverski izuzeci

    'primer('primer(type

    !PassFordInvalid &class0!6ception5"

    %ako de)inisani izuzetak se akti%ira sledeKom nared(om

    if PassFord ;?orrectPassFord then

    raise !PassFordInvalid.?reate0QIncorrect passFord

    enteredQ5"

  • 8/19/2019 014 Izuzeci

    29/38

    29

     $elphi)sloba $elphi)sloba* * anje resursaanje resursa

    'tr+"inall+('tr+"inall+('a (i se postiglo korektno oslo(a*anje memorije u slučaju poja%e

    nekog izuzetka u 'elphi5ju postoji mogu$nost da se kod za

    oslo(a*anje resursa zaštiti u ok%iru pose(nog (loka.

    "ipična struktura (loka za zaštitu resursa sastoji se od trJ 5delakoji o(uh%ata nared(e koje koriste resurs i )inallJ 5dela kojim se

    o(uh%ataju nared(e za oslo(adanje resursa

    Ldodelji%anje resursa K

    tr8

    Lnared(e koje koriste resurs K

    9ina##8

    Loslo(adanje resursa K

    end

  • 8/19/2019 014 Izuzeci

    30/38

    3:

     $elphi)sloba $elphi)sloba* * anje resursaanje resursa

    'tr+"inall+('tr+"inall+(/oenta u trJ5)inallJ (loku je u tome što se kodo(uh%a$en u )inallJ Bdelu u%ek iz%rša%a, kako u toku

    normalnog toka programa, tako i u slučaju poja%e

    izuzetka.ada se u toku iz%rša%anja nared(i u trJ 5delu ili unutar

     potprogra ma koji se pozi%aju iz o%og dela poja%i

    izuzetak,upra%ljanje tokom programa se automatski

     prenosi na kod u )inallJ delu.

    #ko se u toku iz%rša%anja trJ dela koda ne poja%i

    izuzetak, program se normalno za%rša%a kodom u )inallJ 

    delu.

  • 8/19/2019 014 Izuzeci

    31/38

    31

     $elphi,a $elphi,a #  # tita resursatita resursa

    'primer('primer(procedure )=orm7.Kutton7?lick0#ender :)component 5"

    var 

     +pointer :Pointer"

     +nInteger,+dividend :Integer"

    begin +ividend :&/"

    2et'em0+Pointer,7/8R 5"Ndodela memorije O

    try

     +nInteger :&7/ div +ividend" Nizuzetak -deljenje sa nulom O

    finally=ree'em0+Pointer,7/8R 5"Noslobadanje memorije O

    end "

    end "

  • 8/19/2019 014 Izuzeci

    32/38

    32

     -AA izuzeci -AA izuzeci

    :intaksa +#oka %a o+radu i%u%etaka;

    try N

    (>tr-blok >(

    Ocatch 0!6ception)pe e75N

    (>catc-blok za prvi tip izuzetaka >(

    O

    catch 0!6ception)pe e85N

    (>catc-blok za drugi tip izuzetaka >(O

    <

    finally {

    (> blok koji se izvrsava I kada jeste I kada nije bilo izuzetaka >(

    O

  • 8/19/2019 014 Izuzeci

    33/38

    33

     -AA primer  -AA primer 

    void Frite#tuGG 0#tring stuGG,#tring more#tuGG5N

      try N

      Frite)o=ile0stuGG5"

      Frite)o=ile0more#tuGG5"  O

      catch 0!6ception e5

      N

      e.print#tack)race05"  return "

      O

    O

  • 8/19/2019 014 Izuzeci

    34/38

    34

     -AA -AA aktiviranje izuzetkaaktiviranje izuzetka

    =a akti%iranje izuzetka u a%i se koristi thro7 

    nared(a čiji je argument o(jekat neke klase

    izuzetaka tj. o(jekat klase koja je direktno ili

    indirektno iz%edena iz klase &Cception.

    /rimerclass '!6ception extends !6ception

    N

      <

    O

    throw neF 'oj!6ception05"

  • 8/19/2019 014 Izuzeci

    35/38

    3-

     -AA -AA propagiranje izuzetka propagiranje izuzetka

    Ukoliko u )unkicji postoji nared(a koja prija%ljujeizuzetak, %an trJ5catch strukture koja taj tip izuzetkao(radjuje, ka7e se da )unkcija prija%ljuje izuzetak.

    Ukoliko )unkcija mo7e da prija%i izuzetak, nakon zagla%lja)unkcije piše se opis

    thro7s Lista$ozvoljenihTipova/zuzetaka 

  • 8/19/2019 014 Izuzeci

    36/38

    30

     -AA -AA propagiranje izuzetka propagiranje izuzetka

    'primer('primer(void Frite)o=ile0#tring podatak5troFs !6ception

    N

    if 0Gile@ne@postoji5N

      throw new =ile4ot=ound!6ception05"

    O

    elseN

    (>upisati podatak u datoteku >(

    O

  • 8/19/2019 014 Izuzeci

    37/38

    3

     -AA -AA propagiranje izuzetka propagiranje izuzetka

    'primer('primer(void Frite#tuGG0#tring stuGG, #tring more#tuGG5N

    try

    N  Frite)o=ile0 stuGG 5"

      Frite)o=ile0 more#tuGG 5"

    O

    catch( !6ception e 5N

    e.print#tack)race05"

    O

  • 8/19/2019 014 Izuzeci

    38/38

    38

     -AA primer  -AA primer  kori#0enjakori#0enja "inall+ "inall+ 

    blokabloka=ile Gile"try NGile &new =ile01atoteka15Gile.Frite01Goo15"

    Gile.Frite01bar15"Ocatch 0I*!6ception e5N

    (>jedan od >(

    return "((izvršava se Ginall blokOfinally N

    Gile.close05"O

    O