jueves, diciembre 11, 2008

Para terminar con el Ariane

Anteayer vimos una pequeña introducción sobre el caso Ariane-5.

Ayer hice un resumen del resumen del informe sobre lo ocurrido.

Hoy espero aclarar las dudas que pueda haber sobre el tema de las excepciones.

En Visual Basic.NET tenemos unas cuantas funciones de conversión:



En el siguiente código visual basic se hace una conversión como la que pudo ocurrir en el momento previo de la explosión del cohete.

Tenemos una variable entera llamada i.
Y una variable doble llamada z.

Dim i As Integer
Dim z As Double
z = 4.354354387594386E+25
i = CInt(z)

En Visual Basic, igual que en Ada (lenguaje utilizado en el Ariane-5) la variable z contiene un valor demasiado grande para que pueda convertirse al tipo entero. Lógicamente esto provocará un error.

Igual que en el caso del cohete Ariane, hemos introducido captura de excepciones, lo que ocurre es que no se capturan todas.

Try

Dim i As Integer
Dim z As Double
Dim streamEscritura As New System.IO.StreamWriter("c:\temp\dato.txt")

z = 4.354354387594386E+25
i = CInt(z)

streamEscritura.WriteLine(CStr(i))
streamEscritura.Close()

Catch ioe As System.IO.IOException
MsgBox("c:\temp no existe")

Catch se As System.Security.SecurityException
MsgBox("Acceso denegado.")

End Try

El programita después de la conversión imposible va a intentar escribir el resultado en un fichero de texto. Hemos capturado la excepción de "Error de Entrada/Salida" y la de "Seguridad". Veamos lo que ocurre:



Se ha producido un error "Overflow Exception" y la ejecución del programa se ha interrumpido. Esto es lo que ocurrió en el cohete.

La solución es evidente. Hay que capturar TODAS LAS EXCEPCIONES para que nunca se interrumpa de esa forma la captura de datos de los sensores. Si un valor es demasiado grande no debería ocurrir nada, se desecha el valor y el sensor ya nos enviará un nuevo dato.

En Visual Basic esto se hace con una captura de excepción genérica:

Catch ex As System.Exception
End Try



Bueno, la lección es la siguiente: Hay que pensar que siempre puede haber excepciones no previstas. Pensar la mejor forma de salir del error e implementarla en el lugar adecuado.

También es importante recordar que las conversiones de tipos suelen ser especialmente problemáticas.

Saludos.

No hay comentarios: