- •1. Новые концепции ооп в языке Oblect Pascal
- •2. Объектно-ориентированный подход в программировании
- •Основные понятия
- •3. Понятие класса и объекта
- •4. Поля, методы и свойства объекта
- •5. Ключевое слово Self, примеры использования
- •6. Перегруженные методы
- •7. Создание и удаление объектов
- •9. Инкапсуляция и модули
- •10. Директивы видимости
- •8. Инкапсуляция
- •11. Инкапсуляция при помощи свойств
- •12. Свойства-массивы
- •13. Индексированные свойства
- •14. Свойства и иерархия классов
- •15. Конструкторы, перегрузка конструкторов, 16. Деструкторы
- •17. Ссылочная модель объектов Delphi
- •18. Наследование
- •19. Совместимость типов
- •20. Полиморфизм и позднее связывание
- •21. Виртуальные, динамические методы
- •22. Абстрактные методы
- •23. Бе6зопасное преобразование типов
- •24. Ссылки на класс
- •25. Создание компонентов при помощи ссылок на класс
- •26. Интерфейсы
- •27. Технические приемы, связанные с использованием интерфейсов (делегирование, использование директивы implements)
- •28. Исключительные ситуации
- •29. Порядок выполнения программы и блок finally
- •30. Классы исключений
- •31. Исключения и отладка приложений
- •32. Класс tObject, использование методов класса Tobject
- •33. Понятие события
- •34. Обработчики событий. Делегирование в Delphi
- •35. События стандартных визуальных компонент и их использование
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.
