9. Ausnahmen und Ausnahmebehandlung
 
zurück
9.1 Ausnahmen


Zwei der wesentlichen Fehlerarten, die bei der Programmierung auftreten, sind Übersetzungsfehler und Laufzeitfehler. Im Unterschied zu anderen Programmier-sprachen muß ein Laufzeitfehler in Ada nicht unbedingt zum Programmabbruch führen.

In Ada werden bei Laufzeitfehlern Ausnahmen (Exceptions) ausgelöst. Solche Ausnahmen können an bestimmten Stellen im Programm abgefangen werden.

Ein Programm liest beispielsweise ein Paar von Zahlen und dividiert diese. Falls der Divisor "0" ist, tritt ein Laufzeitfehler auf. Bei Ada wird die vordefinierte Ausnahme Constraint_Error ausgelöst und das Programm wird beendet.

Division durch 0 ohne Ausnahmebehandlung:

-- Dieses Programm muss mit der Übersetzeroption -gnato uebersetzt
-- werden !

with text_io;
procedure Div1 is
   Dividend, Divisor, Durchlaeufe : Integer ;
   package text_io_int is new Text_io.integer_io (integer);
begin
   text_io.put_line ("Bitte probieren Sie eine 0 als Divisor!");
   text_io.put_line ("Wieviel Durchlaeufe ?");
   text_io_int.get (Durchlaeufe);
   for i in 1..Durchlaeufe loop
      text_io.put("Geben Sie bitte den Dividend und den Divisor ein. ");
      text_io.new_line;
      text_io_int.get(Dividend);
      text_io_int.get(Divisor);
      text_io.put("Der Quotient ist ");
      text_io_int.put(Dividend / Divisor);
      text_io.put(" und der Rest ist");
      text_io_int.put( Dividend rem Divisor );
   end loop;
end Div1;

Um das Programm stabil gegen diese Art von Fehler zu machen, kann ein Programmierer den Laufzeitfehler selber behandeln. Wird durch "0" dividiert, so gibt die Applikation
auf dem Standardausgabegerät eine Fehlermeldung aus. Verantwortlich für die korrekte Fehlerbearbeitung ist die Ausnahmebehandlung.



-- Dieses Programm muss mit der Übersetzeroption -gnato uebersetzt werden !

with text_io;
procedure Div2 is
   Dividend, Divisor, Durchlaeufe : Integer ;
   package text_io_int is new Text_io.integer_io (integer);

begin
   text_io.put_line ("Bitte probieren Sie eine 0 als Divisor!");
   text_io.put_line ("Programm Division 2");
   text_io.put_line ("Wieviel Durchlaeufe ?");
   text_io_int.get (Durchlaeufe);
   for i in 1..Durchlaeufe loop
      text_io.put_line("Geben Sie bitte den Dividend und den Divisor ein.");
      text_io_int.get(Dividend);
      text_io_int.get(Divisor);
      text_io.put("Der Quotient ist ");
      begin
         text_io_int.put(Dividend / Divisor);
         text_io.put(" und der Rest ist");
         text_io_int.put( Dividend rem Divisor );
         text_io.put_line(".");
         -- Ausnahmebehandlung:
      exception
         when CONSTRAINT_ERROR =>
            text_io.new_line(2);
            text_io.put_line("Achtung, der Divisor ist Null.");
      end;
   end loop;
end Div2;



 
zurück
 Index   Ada Tour - Dokumentation  
© 2003 Förderverein Ada Deutschland e.V.