De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Slide 1Programmatuur voor real-time controleYolande Berbers RTPReal-Time Programmatuur hoofdstuk 6: uitzonderingen en de behandeling van uitzonderingen.

Verwante presentaties


Presentatie over: "Slide 1Programmatuur voor real-time controleYolande Berbers RTPReal-Time Programmatuur hoofdstuk 6: uitzonderingen en de behandeling van uitzonderingen."— Transcript van de presentatie:

1 slide 1Programmatuur voor real-time controleYolande Berbers RTPReal-Time Programmatuur hoofdstuk 6: uitzonderingen en de behandeling van uitzonderingen

2 RTP slide 2Programmatuur voor real-time controleYolande Berbers uitzonderingen n behandelen van uitzondering: u dynamische redundantie (= wordt uitgevoerd enkel als dwaling opgemerkt wordt) u vorm van voorwaarts herstel: men probeert vanuit de situatie met dwaling een goed functionerende toestand te bereiken u kan ook gebruikt (misbruikt) worden voor achterwaarts herstel n terminologie u uitzondering: het optreden van een dwaling (in het Engels: exception) u een uitzondering signaleren (of werpen): de oproeper van een operatie attent maken op de uitzondering (in het Engels: raising, signalling, throwing) u behandeling (of opvang) v. uitzondering: actie die oproeper neemt

3 RTP slide 3Programmatuur voor real-time controleYolande Berbers vereisten voor uitzonderingsmechanisme n V1. eenvoudig en gemakkelijk te gebruiken n V2. redundante code mag de normale code niet moeilijk te begrijpen maken u geen mengeling v. behandelen v. uitzonderingen met normale code n V3. enkel run-time overhead bij optreden van uitzondering u soms compromis tussen snel herstel en overhead bij normale gang n V4. uniforme behandeling van uitzonderingen gesignaleerd door omgeving en door toepassing zelf u vb overflow en waarde buiten beperking op zelfde manier behandelen n V5. moet mogelijk maken om herstelacties te programmeren

4 RTP slide 4Programmatuur voor real-time controleYolande Berbers n routine geeft ongewone waarde of fout-code terug u wordt veel gedaan in C (vaak test op -1) u voldoet aan V1 (eenvoud) en V5 (behandeling van uitzondering) u voldoet niet aan V2, V3 en V4: de code staat in de weg, er is telkens overhead, mechanisme laat niet toe fouten door omgeving op te vangen if (function_call (parameters) == AN_ERROR) { -- error handling code } else { -- normal code } behandeling van uitzonderingen in oudere programmeertalen

5 RTP slide 5Programmatuur voor real-time controleYolande Berbers n verplichte sprong u vooral gebruikt in assembler talen u voldoet niet aan V2, V3 en V4 n niet-lokale goto u goto wordt beschouwd als heel slechte programmeringstechniek u voldoet niet aan V1, V2 en V4 n gebruik van een variabele voor een foutbehandelings-routine u iets beter als niet-lokale goto u voldoet ook niet aan V1, V2 en V4 è voor rest van hoofdstuk: behandeling van uitzonderingen in moderne programmeertalen (met hiervoor taalconstructies) behandeling van uitzonderingen in oudere programmeertalen

6 RTP slide 6Programmatuur voor real-time controleYolande Berbers uitzonderingen en hun voorstelling n dwaling-detectie kan gebeuren u door omgeving u door toepassing n signaleren van uitzondering kan gebeuren u synchroon (direct bij mislukken operatie) u asynchroon (een tijdje later, eventueel door een ander proces) è 4 mogelijke klassen van uitzonderingen (zie volgende transparant)

7 RTP slide 7Programmatuur voor real-time controleYolande Berbers uitzonderingen en hun voorstelling n 1. detectie door omgeving en synchrone verwittiging u bv buiten het bereik van een rij gaan (detectie door run-time) u bv deling door 0 (detectie door besturingsysteem) n 2. detectie door toepassing en synchrone verwittiging u bv niet voldoen aan een assertie n 3. detectie door omgeving en asynchrone verwittiging u bv stroomonderbreking van een meettoestel n 4. detectie door toepassing en asynchrone verwittiging u bv proces A merkt dat proces B niet meer reageert 2 asynchrone uitzonderingen: ook signalen genoemd, zie Hdst 11 2 in Hdst 6 behandelen we verder enkel de synchrone verwittiging

8 RTP slide 8Programmatuur voor real-time controleYolande Berbers intermezzo: besturingssysteem en run time systeem n een programma draait bovenop een run-time systeem (soms afgekort als RTS) n het run-time systeem draait bovenop het besturingssysteem hardware besturingssysteem run-time systeem code gegenereerd door compiler programma

9 RTP slide 9Programmatuur voor real-time controleYolande Berbers uitzonderingen en hun voorstelling n 2 modellen voor declaratie van uitzonderingen u Ada: een naam die als constante gedeclareerd is u Java: object van bepaald type, al dan niet expliciet gedeclareerd l OO-kijk (alles is een object, ook een uitzondering) package Standard is -- module van runtime systeem (RTS) …. -- uitzonderingen door RTS gedetecteerd Constraint_Error: exception; Program_Error: exception; Storage_Error: exception; Tasking_Error: exception; …. end Standard;

10 RTP slide 10Programmatuur voor real-time controleYolande Berbers het domein van een exception handler n handler = stuk code die uitzondering opvangt n in een programma kunnen meerdere handlers voorzien worden voor eenzelfde uitzondering u bv deling door 0 kan op meerdere plaatsen opgevangen worden n met elke handler is een domein geassocieerd u = stuk programma waarvoor opvangcode verantwoordelijk is u als fout in domein optreedt wordt bijhorende handler geroepen n precisie van domein u bepaalt hoe goed een fout kan gelokaliseerd worden

11 RTP slide 11Programmatuur voor real-time controleYolande Berbers het domein van een exception handler n in blok-gestructureerd programmeertalen: domein is blok, procedure, functie u bv in Ada: u nadeel: granulariteit is soms te grof (zie voorbeeld 2 slides verder) declare subtype Temperature is Integer range 0.. 100; begin -- lees temperatuurmeter en bereken zijn waarde exception -- handler voor Constraint_Error end ;

12 RTP slide 12Programmatuur voor real-time controleYolande Berbers het domein van een exception handler n in sommige andere talen: domein expliciet gespecifieerd u men noemt het stuk code ‘bewaakt’ (guarded) u bv in Java u nadeel: past minder samen met natuurlijke structuur van code try { // stuk programma dat een uitzondering zou kunnen veroorzaken } catch ( ExceptionType e) { // code voor het opvangen van de uitzondering }

13 RTP slide 13Programmatuur voor real-time controleYolande Berbers het domein van een exception handler n voorbeeld van probleem door te weinig precisie u handler weet niet welke instructie een beperkingsfout veroorzaakt heeft declare subtype Temperature is Integer range 0.. 100; subtype Pressure is Integer range 0.. 50; subtype Flow is Integer range 0.. 200; begin -- lees temperatuurmeter en bereken zijn waarde -- lees drukmeter en bereken zijn waarde -- lees doorvoermeter en bereken zijn waarde -- pas temperatuur, druk en doorvoer aan volgens specificaties exception -- handler voor Constraint_Error end ;

14 RTP slide 14Programmatuur voor real-time controleYolande Berbers het domein van een exception handler n zeer lange en weinig elegante oplossing n in Java: exception is een object dat informatie kan bevatten, zodat handler meer kan weten over fout declare subtype Temperature is Integer range 0.. 100; subtype Pressure is Integer range 0.. 50; begin -- lees temperatuurmeter en bereken zijn waarde exception -- handler voor Constraint_Error end ; begin -- lees drukmeter en bereken zijn waarde exception -- handler voor Constraint_Error end ; -- pas temperatuur en druk aan volgens specificaties exception -- handler voor Constraint_Error end ;

15 RTP slide 15Programmatuur voor real-time controleYolande Berbers propagatie van fouten n wat als er geen handler voorzien is voor een fout u 2 mogelijke aanpakken l compiler signaleert dit s compiler moet testen of alle blokken alle fouten opvangen s alle fouten overal opvangen zou heel veel code vragen s ook weet een procedure vaak niet hoe een fout moet behandeld worden: oproeper van de procedure weet dat l fout propageren naar oproepende blokken s 2 modellen –resumption model –termination model s speciale problemen bij meerdere processen: H 10

16 RTP slide 16Programmatuur voor real-time controleYolande Berbers propagatie van fouten n resumption model: u stuk programma waar fout optrad wordt hervat (op plaats waar fout optrad) na opvang van de fout u ‘oproeper’ kan verder uitvoeren alsof niets gebeurde n termination model u stuk programma waar fout optrad wordt niet hervat u controle gaat naar oproepend of omsluitend blok n hybrid model u handler beslist voor stoppen of hervatten v code waarin fout optrad n volgende slides: tekening bij resumption en termination model

17 RTP slide 17Programmatuur voor real-time controleYolande Berbers propagatie van fouten: resumption Q PRQ HrHq 3 uitzondering r treedt op in R maar wordt niet opgevangen in R: propagatie naar oproeper waar wel een handler voorzien is 4 tijdens het behandelen van uitzondering r treedt uitzondering q op die niet lokaal opgevangen wordt: propagatie naar Q 5 vanuit Hq gaat het verder in Hr 1 P roept Q op 2 Q roept R op 6 vanuit Hr gaat het verder in R

18 RTP slide 18Programmatuur voor real-time controleYolande Berbers propagatie van fouten: resumption n mogelijke vergelijking: impliciet opgeroepen procedure n probleem met resumption model u vaak moeilijk om het probleem helemaal op te lossen zodat je ongestoord kunt verder gaan met de volgende instructie u implementatie is moeilijk n mogelijk alternatief u heruitvoeren van hele blok waar handler mee geassocieerd is

19 RTP slide 19Programmatuur voor real-time controleYolande Berbers propagatie van fouten: termination n model u stuk programma waar fout optrad wordt niet hervat u controle gaat naar oproepend of omsluitend blok u manier waarop (conditie) controle terugkeert: l normaal (de uitzondering is volledig opgelost) l uitzondering (de uitzondering wordt doorgegeven) n voorbeelden u voorbeeld met blok: volgende transparant u voorbeeld met procedures: twee transparanten verder

20 RTP slide 20Programmatuur voor real-time controleYolande Berbers propagatie van fouten: termination declare subtype Temperature is Integer range 0.. 100; begin …. begin -- lees temperatuurmeter en bereken zijn waarde exception -- handler H1 voor Constraint_Error end ; -- code uitgevoerd bij normaal uittreden blok of na -- behandeling van uitzondering in handler H1 exception -- handler voor andere soorten uitzonderingen end ;

21 RTP slide 21Programmatuur voor real-time controleYolande Berbers propagatie van fouten: termination P Q Hq 2 P roept Q op 4 uitzondering q treedt op 1 3 7 5 6

22 RTP slide 22Programmatuur voor real-time controleYolande Berbers propagatie van fouten: termination P R Q Hr 2 P roept Q op 4 Q roept R op 1 3 9 5 6 7 8 uitzondering r treedt op

23 RTP slide 23Programmatuur voor real-time controleYolande Berbers uitzonderingen en besturingssysteem n meeste programma’s worden uitgevoerd boven een besturingssysteem u deze systemen ontdekken sommige synchrone fouten l bv illegale instructie l deling door 0 l foutief adres (memory violation) u mogelijke behandeling l stoppen van proces (meest voorkomend) l verwittigen van proces (bv via signals in POSIX) s proces kan handler voorzien s volgt het resumption model s als dit voorkomt binnen een taal met termination model: run-time systeem moet dit vertalen naar termination model

24 RTP slide 24Programmatuur voor real-time controleYolande Berbers gebruik van uitzonderingen in Ada n Ada model u expliciete declaratie van uitzonderingen u termination model u propagatie van onbehandelde uitzonderingen u beperkte vorm van parameters (dit bekijken wij niet in detail) n declaratie van een uitzondering u naam_uitzondering: exception; u of via package Ada.Exceptions (dit bekijken wij niet in detail) u zoals variabelen hebben ook uitzonderingen hun zichtbaarheid (scope) u enkele standaard uitzonderingen zijn door de taal gedefinieerd en hebben zichtbaarheid over het hele programma l bv Constraint_Error, Storage_error

25 RTP slide 25Programmatuur voor real-time controleYolande Berbers gebruik van uitzonderingen in Ada n signaleren van een uitzondering u een toepassing kan ook expliciet een uitzondering signaleren u raise instructie u een else-gedeelte is niet nodig want de controle komt niet terug begin …. -- instructies die iets lezen van een randapparaat if IO_Device_In_Error then raise IO_Error; end if ; …. end ;

26 RTP slide 26Programmatuur voor real-time controleYolande Berbers gebruik van uitzonderingen in Ada n behandeling van uitzonderingen u elk blok (en dus ook elke routine) kan optioneel een aantal exception handlers bevatten u ze worden aan het einde van het blok geschreven u ze gebruiken sleutelwoord when om uitzondering aan te duiden u ze kunnen de uitzondering toekennen aan een variabele zodat hierop later kan getest worden u voorbeeld op volgende transparant

27 RTP slide 27Programmatuur voor real-time controleYolande Berbers gebruik van uitzonderingen in Ada declare sensor_High, Sensor_Low, Sensor_Dead : exception; -- andere declaraties begin -- instructies die boven-gedeclareerde uitzonderingen -- kunnen veroorzaken exception when E: Sensor_High | Sensor_Low => -- neem een herstellende actie -- E bevat eigenlijke uitzondering (Sensor_High of Sensor_Low) -- waarop getest kan worden when Sensor_Dead => -- luid een alarm end;

28 RTP slide 28Programmatuur voor real-time controleYolande Berbers gebruik van uitzonderingen in Ada n when others : om niet alle namen te moeten opnoemen n wordt vaak gebruikt als laatste deel van exception-blok declare sensor_High, Sensor_Low, Sensor_Dead : exception; begin -- instructies die gedeclareerde uitzonderingen kunnen veroorzaken exception when Sensor_High | Sensor_Low => -- neem een herstellende actie when E: others => Put (Exception_Name(E)); Put_Line (“werd veroorzaakt”) -- luid een alarm end;

29 RTP slide 29Programmatuur voor real-time controleYolande Berbers gebruik van uitzonderingen in Ada n uitzondering die veroorzaakt wordt in een handler u kan niet behandeld worden in dat blok van handlers u wordt automatisch direct naar oproepend blok gepropageerd

30 RTP slide 30Programmatuur voor real-time controleYolande Berbers gebruik van uitzonderingen in Ada: propagatie n geen handler voorzien in een blok: uitzondering wordt ‘naar boven’ gepropageerd n bij packages: handler in initialisatie-blok behandelen niet de uitzonderingen van de verschillende routines n voorbeeld van package package Temperature_Control is subtype Temperature is Integer range 0.. 100: Sensor_Dead, Actuator_Dead : exception ; procedure Set_Temperature (New_Temp : in Temperature); function Read_Temperature return Temperature; end Temperature_Control;

31 package body Temperature_Control is procedure Set_Temperature (New_Temp : in Temperature) is begin -- zet de nieuwe temperatuur if No_Response then raise Acturator_Dead; end if; end Set_Temperature; function Read_Temperature return Temperature is begin -- lees de sensor if No_Response then raise Sensor_Dead; end if; -- bereken de temperatuur return Reading; exception when Constraint_Error => -- neem een herstellende actie end Set_Temperature; begin -- initalialiseer de package Set_Temperature(Initial_Reading); exception when Actuator_Dead => -- neem een herstellende actie end Temperature_Control;

32 RTP slide 32Programmatuur voor real-time controleYolande Berbers gebruik van uitzonderingen in Ada: laatste wensen n afhandeling van een fout: u soms lokale oplossing tov blok waar fout gebeurde u maar ook oplossing die afhankelijk is van oproeper van het blok l fout doorgeven naar boven: met de instructie raise n 2 voorbeelden u toekennen van hulpmiddelen l indien fout optreedt wil men hulpmiddelen weer vrijgeven l en de fout doorgeven aan oproeper u iets veranderen aan positie flappen van vleugels van vliegtuig l indien fout: tenminste de vleugels weer symmetrisch zetten l en de fout doorgeven aan oproeper

33 RTP slide 33Programmatuur voor real-time controleYolande Berbers gebruik van uitzonderingen in Ada: laatste wensen subtype Devices is Integer range 0.. Max; procedure Allocate (Number : in Devices) is begin -- toewijzen (alloceren) van de hulpmiddelen één voor één exception when others => -- dealloceer de reeds toegewezen hulpmiddelen raise -- signaleer de opgetreden uitzondering aan oproeper end Allocate;

34 RTP slide 34Programmatuur voor real-time controleYolande Berbers gebruik van uitzonderingen in Ada: laatste wensen procedure Wing_Settings (-- relevante parameters) is begin -- wijzig de toestand van de flappen -- een uitzondering kan in deze code optreden exception when others => -- zorg ervoor dat de flappen weer symmetrisch staan raise -- signaleer de opgetreden uitzondering aan oproeper end Wing_Settings ;

35 RTP slide 35Programmatuur voor real-time controleYolande Berbers gebruik van uitzonderingen in Ada n uitzondering die veroorzaakt wordt tijdens declaratie u wordt gepropageerd naar oproepend blok u niet altijd zo gemakkelijk: speciale gevallen worden hier niet besproken n testen op uitzondering kost tijd u elke test door het run-time systeem vertraagt het programma l bv Constraint_Error: bij elke index in een array wordt getest op het bereik van die index u men kan dit onderdrukken in bepaalde delen van programma l verantwoordelijkheid van programmeur !

36 RTP slide 36Programmatuur voor real-time controleYolande Berbers gebruik van uitzonderingen in Ada n problemen met behandelen van uitzonderingen in Ada u uitzonderingen en packages l uitzonderingen worden gedeclareerd in de specificatie l niet duidelijk welke routine welke uitzondering kan veroorzaken l gebruiker van package moet bij gebruik van een routine s ofwel iets voorzien voor alle uitzonderingen (eventueel met when others) s ofwel in de body gaan zien wie wat signaleert u parameters kunnen niet doorgegeven worden bij het signaleren l handler weet eigenlijk niet veel, kan niet precies handelen u wanneer uitzonderingen naar boven gepropageerd worden kan de naam uit zichtbaarheid geraken l kan dan enkel via when others opgevangen worden

37 RTP slide 37Programmatuur voor real-time controleYolande Berbers gebruik van uitzonderingen in Java n Java model u expliciete declaratie van uitzonderingen u termination model u propagatie van onbehandelde uitzonderingen u uitzonderingen geïntegreerd in OO model n declaratie van een uitzondering u uitzonderingen: sub-klassen van java.lang.Throwable u ook in taal gedefinieerde klassen l Error: hiervan zijn afgeleid klassen voor interne fouten en uitputting van middelen (valt meestal niet veel aan te doen) l RunTimeException: bv IndexOutOfBoundException

38 RTP slide 38Programmatuur voor real-time controleYolande Berbers gebruik van uitzonderingen in Java public class IntegerConstraintError extends Exception { private int lowerRange, upperRange, value; public IntegerConstraintError (int L, int U, int V) { super(); // call constructor on parent class lowerRange = L; upperRange = U; value = V; } public String getMessage() { return (“Integer constraint error: Lower range “ + java.lang.Integer.toString(lowerRange) + “ Upper range” + java.lang.Integer.toString(upperRange) + “ found” + java.lang.Integer.toString(value)); }

39 RTP slide 39Programmatuur voor real-time controleYolande Berbers gebruik van uitzonderingen in Java public class Temperature { private int T; void check (int value) throws IntegerConstraintError { if (value > 100 || value < 0) { throw new IntegerConstraintError (0, 100, value); } } public Temperature (int initial) throws IntegerConstraintError // constructor { check(initial); T = initial; } public void setValue (int V) throws IntegerConstraintError { check(V); T = V; } public int readValue () { return T; } } n verschil Ada: elke operatie zegt welke uitzondering kan optreden

40 RTP slide 40Programmatuur voor real-time controleYolande Berbers gebruik van uitzonderingen in Java Temperature T1; … try { T1 = new Temperature(20); … T1.setvalue(80); … } catch (IntegerConstraintError error) { // exception caught, print error message on standard output System.out.println(error.getMessage()); } n handler met parameter v. type T zal een object v. type E opvangen indien u T en E van hetzelfde type zijn u T een superklasse van E is

41 RTP slide 41Programmatuur voor real-time controleYolande Berbers gebruik van uitzonderingen in Java n iets analoogs als when others in Ada Temperature T1; … try { … } catch (Exception E) { // any exception caught, print error message on standard output System.out.println(E.getMessage()); }

42 RTP slide 42Programmatuur voor real-time controleYolande Berbers uitzonderingen en C n C biedt geen uitzonderingsmechanisme n kan enigszins nagebootst worden  met de POSIX routines setjmp en longjmp setjmp bewaart de programmastatus, geeft 0 terug longjmp herstelt de prgrammastatus  programma voert verder uit vanaf punt waar setjmp opgeroepen werd  nu geeft setjmp par. van longjmp als waarde terug u is ingewikkeld, zeer moeilijk zo maar te gebruiken (gevaar dat er meer fouten komen dan dat er fouten opgevangen worden !!) u kan gebruikt worden in macro’s die moeilijkheden beetje verbergen l is niet deel v. taal => geen ondersteuning voor goed gebruik !!


Download ppt "Slide 1Programmatuur voor real-time controleYolande Berbers RTPReal-Time Programmatuur hoofdstuk 6: uitzonderingen en de behandeling van uitzonderingen."

Verwante presentaties


Ads door Google