Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_na_ekzamen_po_OOP.doc
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
294 Кб
Скачать
☆

30. Классы исключений

В дельфи исключения – это объекты, содержащие информацию, идентифицирующую ошибку и место её возникновения. В рассмотренных примерах осуществляется перехват исключения EDivByZero, определенного в библиотеке RTL среды Дельфи. Существует целый ряд такого рода исключений, относящихся к проблемам, возникающим в процессе выполнения программы. Кроме деления на 0 - неверное динамическое приведение типов, проблемы ресурсов – нехватка памяти, ошибки компонентов, неправильное использование индекса.

Пример.

Будет иллюстрировано как мы должны ориентироваться в иерархиях системы или в своих иерархиях.

Операция деления может генерировать два типа исключения – поэтому добавим в блок exception еще один оператор.

Function TMyClass.Repercent(A,B:integer):real;

Begin

Try

Result:= A/B * 100;

Except

On EDivByZero do {знаменатель равен 0}

Result:=0;

On EInvalidOp do

Result:=0;

End;

End;

Исключения - это объекты, все их типы является потомками базового класса Exception. Существует такая иерархия

Exception

EMathErrorEDivByZero EInvalidOp

Таким образом, на основе правил совместимости типов в Object Pascal можно создать следующий обработчик:

Function TMyClass.Repercent(A,B:integer):real;

Begin

Try

Result:= A/B * 100;

Except

On EMathError do {все ошибки математич.вычислений}

Result:=0;

End;

End;

31. Исключения и отладка приложений

При запуске программы в среде Delphi, программа работает в отладочной среде, и при запуске программы, отладчик останавливает программу в случае возникновения исключительной ситуации. Во время отладки и тестирования это очень удобно. Можно временно отключить режим “Stop on Delphi Exception”: Tools  Debugger Options  Language Exceptions. В большинстве случаев неизвестно, какая операция может привести к возникновению исключения неизвестно, какая операция может привести к возникновению исключения. Так же невозможно заключить каждый кусок программы в блок try-except . Вместо этого можно использовать следующий подход. Обработка всех исключений возлагаются на Delphi, а затем исключения передаются программисту. В Делфи это можно реализовать при помощи обработчика событий. onExcepion глобального объекта Application. Все связанные с этим действия выполняются при помощи компонента Application Events. Добавим на главную форму приложения компонент ApplicationEvents, а так же обработчик событий onException. procedure TForm1.ApplicationEvents1Exception(Sender: TObject; E: Exception); var FileName: string; LogFile: TextFile; begin FileName:=ChangeFileExt(Application.ExeName, '.log'); AssignFile(LogFile,FileName); if FileExists(FileName) then Append(LogFile) else Rewrite(LogFile); Writeln(LogFile,DateTimeToStr(Now)+':'+E.Message); if not CheckBoxSilent.Checked then Application.ShowException(E); CloseFile(LogFile) end; Пример использует для вывода простейший текстовый файл или, если в чекбоксе стоит галочка, выодит на экран методом Application.ShowException.