Programación en Ada/Unidades predefinidas/Ada.Exceptions
Información sobre la excepción
[editar]Ada proporciona información sobre una determinada excepción en un objeto del tipo Exception_Ocurrence, definido dentro del paquete predefinido Ada.Exceptions junto con otras funciones que toman como parámetro una ocurrencia de excepción.
- Exception_Name: devuelve el nombre del tipo de la excepción en notación de puntos completa en letra mayúscula, por ejemplo "PILA.ERROR".
- Exception_Message: devuelve un mensaje de una línea con la causa y la ubicación de la excepción. No contiene el nombre de la excepción.
- Exception_Information: devuelve una cadena que incluye el nombre de la excepción, la causa y la ubicación y debería proporcionar detalles de la traza de la excepción.
Para comunicar dicha ocurrencia, se emplea la siguiente notación, por ejemplo:
withAda.Exceptions;useAda.Exceptions; -- ...exceptionwhenEvento: PresiónElevada | TemperaturaElevada => Put ("Excepción: "); Put (Exception_Name(Evento)); New_Line;whenEvento:others=> Put ("Excepción no prevista: "); Put (Exception_Name(Evento)); New_Line; Put (Exception_Message(Evento));end;
En ocasiones puede resultar útil almacenar una ocurrencia. Por ejemplo, sería útil crear un registro de las excepciones producidas en la ejecución de un programa almacenándolas en una lista o vector de ocurrencias. Nótese que el tipo Exception_Occurrence es limitado, de modo que no puede ser asignado para ser guardado. Por esta razón Ada.Exceptions proporciona el procedimiento y la función Save_Ocurrence.
El tipo Exception_Id puede entenderse como un tipo enumeración. Toda
excepción declarada mediante la palabra reservada exception puede ser
considerada como uno de los literales del tipo Exception_Id y, por lo
tanto, tiene asociado una identificación, que es el literal
correspondiente. Nótese que se refiere ahora a excepciones y a ocurrencias de las mismas. Los literales aludidos serían referencias a
Constraint_Error, TemperaturaElevada, etc.; en general, las excepciones predefinidas
y las declaradas. Cada una de ellas es en rigor uno de los valores que puede
tomar el tipo Exception_Id. El atributo Identity proporciona la
identificación de una excepción. Por ejemplo:
declareFallo_Válvula:exception; Id: Ada.Exceptions.Exception_Id;begin-- ... Id := Fallo_Válvula'Identity; -- ...end;
El programador puede establecer su propio mensaje para una ocurrencia
concreta elevándola mediante Raise_Exception en lugar de hacerlo con
raise seguido del nombre de la excepción. Por ejemplo:
declareFallo_Válvula :exception;begin-- ... Raise_Exception (Fallo_Válvula'Identity, "Error de apertura"); -- ... Raise_Exception (Fallo_Válvula'Identity, "Error de cierre"); -- ...exceptionwhenEvento: Fallo_Válvula => Put(Exception_Message(Evento));end;
Esta llamada es equivalente en Ada 2005 a la siguiente sentencia:
raiseFallo_Válvulawith"Error de apertura";
Especificación de Ada.Exceptions
[editar]Según el manual de referencia de Ada el paquete Ada.Exceptions debe tener esta especificación:
packageAda.ExceptionsistypeException_Idisprivate; Null_Id :constantException_Id;functionException_Name(Id : Exception_Id)returnString;typeException_Occurrenceislimitedprivate;typeException_Occurrence_AccessisaccessallException_Occurrence; Null_Occurrence :constantException_Occurrence;procedureRaise_Exception(E :inException_Id; Message :inString := "");functionException_Message(X : Exception_Occurrence)returnString;procedureReraise_Occurrence(X :inException_Occurrence);functionException_Identity(X : Exception_Occurrence)returnException_Id;functionException_Name(X : Exception_Occurrence)returnString;-- Same as Exception_Name(Exception_Identity(X)).functionException_Information(X : Exception_Occurrence)returnString;procedureSave_Occurrence(Target :outException_Occurrence; Source :inException_Occurrence);functionSave_Occurrence(Source : Exception_Occurrence)returnException_Occurrence_Access;private...-- not specified by the languageendAda.Exceptions;