Programación en Ada/Unidades predefinidas/Ada.Exceptions
De Wikilibros, la colección de libros de texto de contenido libre.
[editar] Información sobre la excepción
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, "Uno"); -- ... Raise_Exception (Fallo_Válvula'Identity, "Dos"); -- ...exceptionwhenEvento: Fallo_Válvula => Put(Exceptions_Message(Evento));end;
[editar] Especificación de Ada.Exceptions
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;