Принципы объектно-ориентированного программирования

         

Обзор обработки исключений



Обзор обработки исключений

Исключения — это условия, при которых нормальный ход программы, т. е. последовательность вызовов методов в стеке вызовов, невозможен или нежелателен. Надо понимать разницу между исключением и ожидаемым событием (скажем, обнаружение конца файла). Если у вас есть метод, последовательно считывающий файл, вы понимаете, что в какой-то момент будет достигнут его конец. Такое событие по природе своей вряд ли является исключительным и, конечно, не должно прерывать выполнение программы. Если же вы пытаетесь прочитать файл, а ОС уведомляет вас о дисковой ошибке, это, разумеется, исключительная ситуация, и именно такая, что повлияет на нормальный ход работы вашего метода при его попытке продолжить считывание файла.

Большинство исключений связано и с другой проблемой — контекстом. Рассмотрим пример. Допустим, вы пишете код с сильными связями — код, в котором один метод отвечает за одно свое действие. Он может выглядеть примерно так:

public void Foo() <



File file = OpenFileCString fileName);

while (Ifile.IsEOFO)

<

String record = file.ReadRecordO;

>

CloseFileO; >

public void OpenFileCString fileName) {

// Пытаемся заблокировать и открыть файл.

}

Если возникнет сбой в методе OpenFile, этот метод не сможет обработать ошибку. Дело в том, что он отвечает только за открытие файлов. Он не может определить, с чем связана проблема при открытии файла: с катастрофической ошибкой или просто недоразумением. Следовательно, OpenFile не может обработать ошибку, поскольку он, что называется, не находится в верном контексте.

Собственно поэтому и существуют обработчики исключений: один метод обнаруживает наличие исключительной ситуации, но оказывается не в том контексте, чтобы реагировать на ошибку. Он сигнализирует исполняющей среде, что возникла ошибка. Исполняющая среда последовательно проходит по стеку вызовов, пока не находит метод, способный правильно работать с ошибкой. Понятно, что это приобретает особую остроту, когда метод, находящийся на пятом уровне вложенности, сталкивается с ошибкой, а обработать ее корректно может только метод первого уровня. Давайте рассмотрим синтаксис, применяемый при обработке исключений.

 

Содержание раздела