Está en la página 1de 63

dit

UPM

Excepciones
JuanAntoniodelaPuente DIT/UPM

Transparenciasbasadasenelcaptulo6dellibrodeA.BurnsyA.WellingsRealTimeSystemsandProgrammingLanguuages,3edicin(2001)

Objetivos
x

Veremosalgunosmodelosdetratamientodeexcepciones enlenguajesdeprogramacin Tambinveremoscmoutilizarlasexcepcionespara realizarsistemasquetoleranfallos

STRL

2001JuanAntoniodelaPuente

ndice
x

Tratamientodeexcepciones
mtodosprimitivos mtodosavanzados

x x x x

TratamientodeexcepcionesenAda TratamientodeexcepcionesenJava TratamientodeexcepcionesenC Excepcionesybloquesderecuperacin

STRL

2001JuanAntoniodelaPuente

Introduccin
Unmecanismodeexcepcionesdebecumplirunaseriede requisitos
serfcildeentenderydeusar separacindecdigonormalycdigodetratamientode excepciones eficiencia(slodebehabersobrecostecuandosetratala excepcin) tratamientouniformedeexcepcionesdetectadasporelentornode ejecucinyporelsoftwaredeaplicacin accionesderecuperacinprogramables(noslopredefinidas)

STRL

2001JuanAntoniodelaPuente

Excepcionesenlenguajesprimitivos(1)
x

Cdigodeerrorenelresultadodeunsubprograma
Ejemplo:C
if ( function_call (params) != 0){ -- tratamiento de errores } else { -- actividad normal };

Inconvenientes:
elcdigonoestseparadodelaactividadnormal haysobrecostecuandonohayerrores nosepuedentratarfcilmenteloserroresdelentorno

STRL

2001JuanAntoniodelaPuente

Excepcionesenlenguajesprimitivos(2)
x

Retornocondicional
Seusaenlenguajeensamblador
call ROUTINE jmp ERROR_1 jmp ERROR_2 ; tratamiento normal

Inconvenientes:
difcildeusaryentender pocaabstraccin difcildeintegrarconladeteccindeerroresporelentorno

STRL

2001JuanAntoniodelaPuente

Excepcionesenlenguajesprimitivos(3)
x

Saltoincondicionalglobal
Algunoslenguajespermitensaltaraotrapartedelprograma,fuera delmdulodondeserealizaelsalto Hayquecombinarloconunretornodesubprogramaanormal
difcildeusaryentender pocoabstracto

STRL

2001JuanAntoniodelaPuente

Ejemplo(RTL/2)
svc data rrerr label erl; %a label variable % enddata proc WhereErrorIsDetected(); ... goto erl; ... endproc; proc Caller(); ... WhereErrorIsDetected(); ... endproc; proc main(); ... restart: ... erl := restart; ... Caller(); ... end proc;

STRL

2001JuanAntoniodelaPuente

Excepcionesenlenguajesprimitivos(4)
x

Variabledeprocedimiento
Elmanejadorsepasacomounprocedimientovariable
muydifcildeusarydemantener enC++seusaunavariantedeestemtodoparaeltratamientode excepcionescuandonohaymanejador(funcionespordefecto)

STRL

2001JuanAntoniodelaPuente

Ejemplo(RTL/2)
svc data rrerr; label erl; proc(int) erp; % erp is a procedure variable % enddata; proc recover(int); ... endproc; proc WhereErrorIsDetected(); ... if recoverable then erp(n) else goto erl end; ... endproc; proc Caller(); ... WhereErrorIsDetected(); ... endproc; proc main(); ... erl := fail; erp := recover; ... Caller(); ... fail: ... end proc

STRL

2001JuanAntoniodelaPuente

10

Excepcionesenlenguajesdemodernos
x

Sonelementosdelenguajequepermitenintegrarlosdos tiposdedeteccindeerrores
deteccinporelentornodeejecucin deteccinporelsoftwaredeaplicacin

Lasexcepcionespuedenser
sncronas
apareceninmediatamentecuandounprocesointentaejecutaruna operacinincorrecta

asncronas
aparecenalgntiempodespus,enelprocesoqueintentla operacinerrneaoenotrodistinto

STRL

2001JuanAntoniodelaPuente

11

Clasesdeexcepciones
x

Detectadasporelentorno,sncronas
ejemplos:errorenndicedearray,divisinporcero

Detectadasporlaaplicacin,sncronas
ejemplo:errorencomprobacindeasercin

Detectadasporelentorno,asncronas
ejemplo:averaendispositivoexterno

Detectadasporlaaplicacin,asncronas
ejemplo:deteccindelmitedetiempoenunaaccindeotro proceso

Lasexcepcionesasncronassesuelenllamarseales
Lasveremosmsadelante

STRL

2001JuanAntoniodelaPuente

12

Excepcionessncronas
x

Lasexcepcionessepuedendeclarardevariasformas
conunnombreespecfico,deformasimilaraunaconstante
enestecasohacefaltaunadeclaracinexplcitadetodaslas excepciones ejemplo:Ada

comoobjetosdeuntipooclase
nosiemprehacefaltadeclaracinexplcita ejemplo:Java

STRL

2001JuanAntoniodelaPuente

13

ExcepcionesenAda
x

EnAdasedeclaranconunnombre(nosonobjetos)
package Standard is ... Constraint_Error Program_Error Storage_Error Tasking_Error ... end Standard;

: : : :

exception; exception; exception; exception;

x x

Estasexcepcionesestnpredefinidas Lasindicaelncleodeejecucin

STRL

2001JuanAntoniodelaPuente

14

ExcepcionesenJava
x

Lasexcepcionessonobjetosdeunaclase(Throwable)
Nohacefaltadeclararlosobjetosexplcitamente Elcdigodeaplicacinoelentornodeejecucinpuedetirar (throw)unaexcepcin Elmanejadoratrapa(catch)laexcepcin Debehacerreferenciaalaclaseoaunasuperclase

STRL

2001JuanAntoniodelaPuente

15

mbitodeunmanejador
x

x x

Unamismaexcepcinpuedetenervariosmanejadoresen unprograma Cadamanejadortieneasociadounmbito Setratadeunaregindonde,siseproducelaexcepcin, seejecutaelmanejadorasociado Enloslenguajesestructuradosenbloques,elmbitode unmanejadorsueleserelbloquedondeestdeclarado Tambinpuedeserunsubprograma

STRL

2001JuanAntoniodelaPuente

16

mbitodelosmanejadoresenAda
x

Losmanejadoressedeclaranalfinaldeunbloque,que constituyeelmbitodelosmismos
declare subtype Temperature is Integer range 0 .. 100; begin -- leer sensor y calcular un valor de temperatura exception -- manejador de Constraint_Error end;

Losprocedimientos,funciones,yotrassecuenciasde instrucciones,puedentambindefinirmbitosde excepciones

STRL

2001JuanAntoniodelaPuente

17

mbitodelosmanejadoresenJava
x x

Notodoslosbloquespuedentenermanejadores Elmbitodeunmanejadorseindicaexplcitamente medianteunbloqueguardado(tryblock)


try { // instrucciones normales } catch (excepcion_type E) { // manejador de excepcin }

STRL

2001JuanAntoniodelaPuente

18

Resolucindeldominio
declare subtype Temperature is Integer range 0 .. 100; subtype Pressure is Integer range 0 .. 50; subtype Flow is Integer range 0 .. 200; begin Read_Temperature_Sensor; Read_Pressure_Sensor; Read_Flow_Sensor; Adjust_Values; exception -- manejador de Constraint_Error end;

Elmanejadornopuedesaberdndeseelevlaexcepcin

STRL

2001JuanAntoniodelaPuente

19

Bloquesanidados
declare ... begin begin Read_Temperature_Sensor; exception -- manejador de Constraint_Error end; begin Read_Pressure_Sensor; exception -- manejador de Constraint_Error end; begin Read_Flow_Sensor; exception -- manejador de Constraint_Error end; Adjust_values; exception -- manejador de Constraint_Error end;

Eslargoypesado
2001JuanAntoniodelaPuente 20

STRL

Manejadoresasociadosainstrucciones
declare -- Ojo! No es Ada ... begin Read_Temperature_Sensor; exception -- manejador de Constraint_Error Read_Pressure_Sensor; exception -- manejador de Constraint_Error Read_Flow_Sensor; exception -- manejador de Constraint_Error end; Adjust_values exception -- manejador de Constraint_Error end;

Mscompacto,perocdigonormalymanejadores mezclados Ejemplo:CHILL

STRL

2001JuanAntoniodelaPuente

21

Excepcionesconparmetros
x

Siseasociaunparmetroalaexcepcinqueindiqueel puntodondesehaelevado,elmanejadorpuedeusaresta informacin


Ada:procedimientospredefinidosquepermitenasociarun mensajeaunaexcepcin Java:sepuedeincluirlainformacinenladefinicindelaclasede excepciones

STRL

2001JuanAntoniodelaPuente

22

Propagacindeexcepciones
x

Cuandonohaymanejadorenunbloquesepueden hacervariascosas:
considerarlounerrordeprogramacin
muyrestrictivo problemasconprocedimientos

propagarlaexcepcinalpuntodeinvocacin
sebuscaunmanejadorenelcontextodelpuntodondese activelbloqueenquesehaproducidolaexcepcin Unaexcepcinsepuedepropagarfueradesumbitode visibilidad solucin:manejadorespordefectoparaexcepciones desconocidas sienunprocesooenelprogramaprincipalquedasinmanejar unaexcepcin,aborta
STRL 2001JuanAntoniodelaPuente 23

Reanudacinyterminacin
x

Cuandoelmanejadorterminasepuedenhacerdoscosas:
reanudarlaejecucindelbloque terminarlaejecucindelbloqueydevolverelcontrolalpuntode invocacin

Tambinhaymodeloshbridos

STRL

2001JuanAntoniodelaPuente

24

Modelodereanudacin

4 R 5

12 13 11 6

raiser

Hr 7 8 10

STRL

2001JuanAntoniodelaPuente

25

Crticadelmodelodereanudacin
x

Ventajas
Cuandolaexcepcinseactivaasncronamente,esposiblereparar eldaoyseguir

Inconvenientes
Esdifcilrepararloserroresdetectadosporelentornodeejecucin
Ejemplo:desbordamientoaritmtico x puedehaberregistrosconresultadosparciales x elmanejadorpuedealterarlosregistros

Esdifcilderealizar
sepuedeejecutardenuevoelbloquedesdeelprincipio

STRL

2001JuanAntoniodelaPuente

26

Modelodeterminacin

4 R 5

17

raiser 6

Hr 7

STRL

2001JuanAntoniodelaPuente

27

Excepcionesysistemasoperativos
x

Elsistemaoperativosueledetectarsncronamentealgunoserrores(por ejemplo,violacindememoria) Enlossistemasoperativosconvencionalesseabortaelprocesoen ejecucin POSIXpermitequelaaplicacinmanejelasexcepciones(mediante seales) Cuandoelmanejadortermina,sereanudaelproceso (modelodereanudacin) Siellenguajesoportaelmodelodeterminacin(comoAda), elncleodeejecucin(RTS)seencargadegestionarlo

STRL

2001JuanAntoniodelaPuente

28

ndice
x x

Introduccin Tratamientodeexcepciones
mtodosprimitivos mtodosavanzados

x x x x

TratamientodeexcepcionesenAda TratamientodeexcepcionesenC++ TratamientodeexcepcionesenC Excepcionesybloquesderecuperacin

STRL

2001JuanAntoniodelaPuente

29

ExcepcionesenAda
x

Lasexcepcionessedeclaranexplcitamente
Stuck_Valve : exception;

Caractersticas
mbito:secuenciaconmanejador(bloqueocuerpo) propagacinsinohaymanejador modelodeterminacin parmetroseidentificadorasociados,medianteelpaquete Ada.Exceptions

STRL

2001JuanAntoniodelaPuente

30

Ada.Exceptions
package Ada.Exceptions is type Exception_Id is private; Null_Id : constant Exception_Id; function Exception_Name (X : Exception_Id) return String; type Exception_Occurrence is limited private; Null_Occurrence : constant Exception_Occurrence; procedure Raise_Exception (E : in Exception_Id; Message : in String := ""); function Exception_Message (X : Exception_Occurrence) return String; procedure Reraise_Occurrence (X : Exception_Occurrence); function Exception_Identity (X : Exception_Occurrence) return Exception_Id; function Exception_Name (X : Exception_Occurrence) return String; function Exception_Information (X : Exception_Occurrence)return String; ... private ... end Ada.Exceptions;
2001JuanAntoniodelaPuente

STRL

31

Ejemplo

package Valve is ... Stuck_Valve : exception; end Valve; with Ada.Exceptions; use Ada.Exceptions; with Valve; use Valve; package Valve_Exceptions is Stuck_Valve_Id : Exception_Id := Stuck_ValveIdentity; -- Exception_Name(Stuck_Valve_Id) = "Valve_Exceptions.Stuck_Valve" end Valve_Exceptions;

STRL

2001JuanAntoniodelaPuente

32

Excepcionespredefinidas
x

Constraint_Error :seelevacuando
seintentaasignarunvalorfueradelintervalodeclarado elndicedeunarrayestfueradelintervalo seintentaaccederaunobjetoatravsdeunpunteronulo seproduceunerrornumrico

Storage_Error :seelevacuando
seintentaasignarmemoriadinmicaynohaysuficiente

x x

Program_Error Tasking_Error lasveremosmsadelante Todasestasexcepcionesseelevanautomticamenteporelncleode ejecucin

STRL

2001JuanAntoniodelaPuente

33

Elevacinexplcitadeunaexcepcin
x

Sepuedehacerconunainstruccin:
if Device_Error then raise IO_Error; end if;

TambinconunprocedimientodeAda.Exceptions (perohacefaltaunidentificador)
Ada.Exceptions.Raise_Exception (IO_ErrorIdentity, "Error in device);

Cadavezqueseelevaunaexcepcinseproduceuna ocurrenciadelamisma Elmanejadorpuedeaccederaunvalordetipo Ada.Exceptions.Exception_Occurrence


2001JuanAntoniodelaPuente

STRL

34

Manejadoresdeexcepciones
x x

Unmanejadoresunasecuenciadeinstrucciones Seponenalfinaldelbloqueocuerpo Ejemplo:

declare Sensor_High, Sensor_Low, Sensor_Dead: exception; ... begin -- instrucciones donde se pueden elevar excepciones exception when Sensor_High | Sensor_Low => -- secuencia de instrucciones when E : Sensor_Dead => -- producir un sonido de alarma -- E denota la ocurrencia de la excepcin end;

STRL

2001JuanAntoniodelaPuente

35

Manejadorpordefecto
x

Sepuedeusarothers alfinaldelalistademanejadores para denotarcualquierexcepcinsinnombrarlaexpresamente Ejemplo:

declare Sensor_High, Sensor_Low, Sensor_Dead: exception; use Ada.Text_IO; begin -- instrucciones donde se pueden elevar excepciones exception when Sensor_High | Sensor_Low => -- secuencia de instrucciones when E : others => Put_Line (Exception_Name (E)); -- producir un sonido de alarma end;

STRL

2001JuanAntoniodelaPuente

36

Propagacin
x

x x

Sinohaymanejadorenelbloqueocuerpodondeseelevauna excepcin,seterminasteysepropagaalnivelsuperior (bloqueexterioropuntodeinvocacin) Tambinsepropaganlasexcepcioneselevadasenlosmanejadores Lasexcepcionesdelasecuenciainicialdeunpaquetesepropagana latareadeentorno,quelasinvocaantesdellamaralprograma principal Siunaexcepcinsepropagafueradesumbitodevisibilidad,se puedemanejarconunmanejadorpordefecto Siquedaalgunaexcepcinsinmanejarenlatareadeentorno,el programaaborta

STRL

2001JuanAntoniodelaPuente

37

Ejemplo(1)
package Temperature_Control is subtype Temperature is Integer range 0 .. 100; Sensor_Dead, Controller_Dead : exception; procedure Set (Reference : Temperature); function Current_Value return Temperature; end Temperature_Control; package body Temperature_Control is procedure Set (Reference : Temperature)is begin -- poner referencia en controlador if No_Response then raise Controller_Dead; end if; end Set;

STRL

2001JuanAntoniodelaPuente

38

Ejemplo(2)
function Current_Value return Temperature is begin -- leer sensor if No_Response then raise Sensor_Dead; end if; -- calcular Value return Value; exception when Constraint_Error => -- valor errneo, corregir end Current_value; begin -- package body Temperature_Control Set (Initial_Value); exception when Controller_Dead => -- alarma end Temperature_Control;

STRL

2001JuanAntoniodelaPuente

39

ProblemasdelasexcepcionesenAda
x

Paquetes
Lasexcepcionessedeclaranenlaespecificacinyseusanenelcuerpo Noestclaroquexcepcionespuedeelevarcadasubprograma

Parmetrosdelasexcepciones
Slosepuedenpasartirasdecaracteres

mbitoypropagacin
Lasexcepcionessepuedenpropagararegionesdondenosonvisibles

STRL

2001JuanAntoniodelaPuente

40

ndice
x x

Introduccin Tratamientodeexcepciones
mtodosprimitivos mtodosavanzados

x x x x

TratamientodeexcepcionesenAda TratamientodeexcepcionesenC++ TratamientodeexcepcionesenC Excepcionesybloquesderecuperacin

STRL

2001JuanAntoniodelaPuente

41

ExcepcionesenC++
x x

Lasexcepcionessonobjetosarbitrarios Nohacefaltadeclararlasexplcitamente Caractersticas


mbito:bloqueexplcito propagacinsinohaymanejador modelodeterminacin nohayexcepcionespredefinidas

STRL

2001JuanAntoniodelaPuente

42

Ejemplo(1)
x

Primerosedeclaraunaclasedeexcepciones
class integer_constraint_error { public: int lower_limit; int upper_limit; int value; integer_constraint_error (int L,int U, int V){ /* constructor */ lower_limit = L; upper_limit = U; value = V; } };

integer_constraint_erroresunaclasedeexcepcionescon parmetros(lower_limit,upper_limit,value)
2001JuanAntoniodelaPuente 43

STRL

Ejemplo(2)
x

Clasetemperatura
class temperature { int T; public: temperature(int initial=50) throw(integer_constraint_error); /* constructor */ int operator=(int) throw (integer_constraint_error); };

Elconstructoryeloperador=puedenelevar(tirar)unobjetodetipo integer_constraint_error paraindicarunaexcepcin

STRL

2001JuanAntoniodelaPuente

44

Ejemplo(3)
x

Clasecontrolador
class temperature_controller { temperature T; public: class actuator_dead{}; void set (temperature) throw(actuator_dead, integer_constraint_error); temperature current_value(); temperature_controller (temperature); /* constructor */ };

actuator_deadesunaexcepcinsinparmetros

STRL

2001JuanAntoniodelaPuente

45

Listadeexcepciones
x

Cadafuncinsepuededeclarar
conunalistadeclasesdeexcepcionesquepuedetirar conunalistavaca(lafuncinnotiraningunaexcepcin) sinlistadeexcepciones(puedetirarcualquierexcepcin)

Silafuncinintentatirarunaexcepcinquenoestpermitida,
sellamaaunafuncinunexpected (pordefectollamaaterminate,queabortaelprograma) sepuedenredefinirambasfunciones

typedef void (*PFV)(); PFV set_unexpected (PFV new_handler); PFV set_terminate (PFV new_handler);

STRL

2001JuanAntoniodelaPuente

46

Ejemplo(4)
x

Lasexcepcionessetiranconthrow

class temperature { int T; public: temperature(int initial=50)throw(integer_constraint_error){ check (initial); }; int operator=(int i) throw (integer_constraint_error){ check(i); return T; }; private: void check (int value){ if (value > 100 || value < 0){ throw integer_constraint_error (0, 100, value); } else{ T=value; } }; };

STRL

2001JuanAntoniodelaPuente

47

Ejemplo(5)
x x

Lasexcepcionessemanejanconunbloquetrycatch Losmanejadoresempiezanconcatch

try { temperature_controller TC (20); /* instrucciones */ } catch (integer_constraint_error){ cout << "error in constrained integer type\n"; } catch (temperature_controller::actuator_dead) { cout << "temperature actuator not responding\n"; } catch (...) { /* manejador por defecto */ cout << "unknown error - propagate"; throw; /* volver a tirar la misma excepcin */ }

STRL

2001JuanAntoniodelaPuente

48

Manejadores
x

UnmanejadordetipoT,constT,T&constT& atrapaunobjetodetipoEsi TyEsonelmismotipo TesuntipopunteroyEesotrotipopunteroquesepuedeconvertir aTenelpuntodondesetiraelobjeto TesuntipopunteroyelobjetoesdeltipoalqueapuntaT TesunaclasebasedeEenelpuntodondesetiraelobjeto Estaltimareglapermitedefinirjerarquasdeexcepciones

STRL

2001JuanAntoniodelaPuente

49

Ejemplo(6)
class exception { virtual void message () {cout << "exception thrown\n";} }; class integer_constraint_error : public exception {

int lower_limit; int upper_limit; int value; public: integer_constraint_error (int L,int U, int V){ lower_limit = L; upper_limit = U; value = V; }; virtual void message () { cout << "constraint error\n";
};

}; class actuator_dead : public exception {...};

STRL

2001JuanAntoniodelaPuente

50

Ejemplo(7)
Estemanejadoratrapalasexcepcionesdetipoexception, integer_constraint_erroryactuator_dead

try { /* instrucciones */ } catch (exception E) { /* manejador para el tipo excepcin y todos sus derivados */ E::message(); /* escribe el mensaje segn el tipo de E */ }

STRL

2001JuanAntoniodelaPuente

51

ndice
x x

Introduccin Tratamientodeexcepciones
mtodosprimitivos mtodosavanzados

x x x x

TratamientodeexcepcionesenAda TratamientodeexcepcionesenC++ TratamientodeexcepcionesenC Excepcionesybloquesderecuperacin

STRL

2001JuanAntoniodelaPuente

52

ExcepcionesenC
x x x

EnCnohayningnmecanismodeexcepciones Sepuedeconstruiralgoparecido(perolimitado) Paraimplementarelmodelodeterminacinhayque guardaryrestaurarelestadodeentradaaldominiode unaexcepcin


sepuedehacerconsetjmpylongjmp(POSIX)

STRL

2001JuanAntoniodelaPuente

53

Esquema
typedef char *exception; exception error="error"; /* comienzo del mbito de la excepcin */ if (current_exception = (exception)setjmp(save_area) == 0) { /* instrucciones donde se pueden producir excepciones */ if (error_detected) { longjmp(save_area, (int)error); }; } else { if (current_exception == error) { /* manejador de error */ } else { /* propagar la excepcin */ } } /* final del mbito de la excepcin */
STRL 2001JuanAntoniodelaPuente 54

Macros
#define NEW_EXCEPTION (name) ... /* declaracin de excepcin */ #define BEGIN ... /* comienzo de mbito */ #define EXCEPTION ... /* comienzo de lista de manejadores */ #define END ... /* fin de mbito */ #define RAISE (name) ... /* elevar excepcin */ #define WHEN (name) ... /* manejador */ #define OTHERS ... /* manejador por defecto */

STRL

2001JuanAntoniodelaPuente

55

Ejemplo

NEW_EXCEPTION (sensor_high); NEW_EXCEPTION (sensor_low); NEW_EXCEPTION (sensor_dead); ... BEGIN ... RAISE (sensor_high); ... EXCEPTION WHEN (sensor_high) /* manejador */ ... END;

STRL

2001JuanAntoniodelaPuente

56

ndice
x x

Introduccin Tratamientodeexcepciones
mtodosprimitivos mtodosavanzados

x x x x

TratamientodeexcepcionesenAda TratamientodeexcepcionesenC++ TratamientodeexcepcionesenC Excepcionesybloquesderecuperacin

STRL

2001JuanAntoniodelaPuente

57

Excepcionesybloquesderecuperacin
Partimosdelesquema
ensure <condicin de aceptacin> by <mdulo primario> else by <mdulo alternativo> else by <mdulo alternativo> ... else by <mdulo alternativo> else error;

ladeteccindeerroressehaceenlapruebadeaceptacin necesitamosguardaryrecuperarelestadoenelpuntoderecuperacin

STRL

2001JuanAntoniodelaPuente

58

Recuperacindelestado
Suponemosunpaquetedebiblioteca
package Recovery_Cache is procedure Save; procedure Restore; end Recovery_Cache;

Hacefaltasoportedelncleodeejecucin Puedenosermuyeficiente
nosetienenencuentalascaractersticasdelaaplicacin

STRL

2001JuanAntoniodelaPuente

59

Esquema(1)
procedure Recovery_Block is Primary_Failure, Secondary_Failure, Tertiary_Failure : exception; Recovery_Block_Failure : exception; type Module is (Primary, Secondary, Tertiary); function Acceptance_Test return Boolean is begin -- condicin de aceptacin end Acceptance_Test;

STRL

2001JuanAntoniodelaPuente

60

Esquema(2)
procedure Primary is begin -- cdigo del mdulo primario if not Acceptance_Test then raise Primary_Failure; end if; exception when Primary_Failure => -- recuperacin directa del sistema controlado raise; when others => -- recuperacin directa del sistema controlado raise Primary_Failure; end Primary; ...

STRL

2001JuanAntoniodelaPuente

61

Esquema(3)
begin -- Recovery_Block Recovery_Cache.Save; for Try in Module loop begin case Try is when Primary => Primary; exit; when Secondary => Secondary; exit; when Tertiary => Tertiary; end case; exception when Primary_Failure => Recovery_Cache.Restore; when Secondary_Failure => Recovery_Cache.Restore; when Tertiary_Failure => Recovery_Cache.Restore; raise Recovery_Block_Failure; when others => Recovery_Cache.Restore; raise Recovery_Block_Failure; end; end loop; end Recovery_Block
STRL 2001JuanAntoniodelaPuente 62

Resumen
x x

Lasexcepcionessonunmecanismoderecuperacindirectadefallos Perosepuedenusar(conayudadelentornodeejecucin)para realizarbloquesderecuperacin Losaspectosimportantesson:


representacinexplcitaenellenguaje mbitodelosmanejadores propagacindeexcepciones terminacinoreanudacin parmetrosasociados

Ada,C++yotroslenguajessoportanexcepcionesdeformamuy completa Otroslenguajes(comoC)nolohacen

STRL

2001JuanAntoniodelaPuente

63

También podría gustarte