Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Обработка исключительных ситуаций

Основные принципы объектно-ориентированного программирования | Объединение свойств (составляющих состояния и поведения) объекта в абстракцию и ограничение доступа к их реализации называется ИНКАПСУЛЯЦИЕЙ. | Состав класса, его размер должен определяться не архитектурными соображениями, а той абстракцией данных, которую должен реализовать класс. |


Читайте также:
  1. Анализ конкретных ситуаций
  2. Аналитическая обработка данных
  3. Аналитическая обработка данных
  4. Аналитическая обработка данных
  5. Аналитическая обработка данных
  6. Аналитическая основа государственного регулирования кризисных ситуаций на предприятиях
  7. Виды государственного регулирования кризисных ситуаций

При выполнении любой сложной программы возможно возникновение ситуаций, нарушающих нормальный процесс ее выполнения (например, отсутствует файл данных, делитель выражения равен нулю и т. п.). Такие ситуации принято называть исключительными.

Правильно написанная программа должна в подобных случаях предусматривать выполнение корректирующих действий, например, выдачу соответствующей информации пользователю, предложение ему вариантов выхода из аварийной ситуации.

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

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

· генерация исключения — получение информации о возникновении ошибки;

· перехват исключения — обработка этой информации.

При перехвате исключений используется стек вызовов, в котором в момент передачи управления очередному методу фиксируется адрес возврата. Например, если метод A вызывает метод B, а тот в свою очередь вызывает метод C, то в стеке последовательно записываются: адрес возврата в A и адрес возврата в B.

 

 

Ошибка, обнаруженная в C, может быть обработана в самом методе C, а может быть передана для обработки в B или в A, или даже в методы, вызвавшие A. Для этого в одном из них необходимо предусмотреть обработчик исключения, соответствующий обнаруженной ошибке. Его поиск осуществляется следующим образом.

Вначале проверяется, не описан ли требуемый обработчик в C. Если он отсутствует, то по стеку вызовов определяется метод B, и проверяется наличие обработчика в нем. Не обнаружив обработчика в B, система по стеку определит метод A, и продолжит поиск в нем. Обратный просмотр стека будет продолжаться до тех пор, пока не обнаружится обработчик требуемого типа или не выяснится, что такой обработчик в программе не определен. В последнем случае программа завершается аварийно.

Механизм обработки исключений предполагает использование двух конструкций. Обрабатывающая конструкция try … catch обеспечивает выполнения описанного выше алгоритма. Операторы обработки исключения catch выполняются только если при выполнении фрагмента программы в блоке try генерируется исключение указанного типа.

Финализирующая конструкция try … finally используется, если необходимо обеспечить правильное освобождение ресурсов программы (освобождения памяти, закрытия файлов и т. д.). Завершающий блок операторов finally выполняется в любом случае: как при обнаружении исключения, так и при его отсутствии (даже если в блоке try присутствует оператор return).

Возможны три результата обработки исключения:

· обработчик исключения требуемого типа не обнаружен — выполняется аварийное завершение программы;

· обработчик исключения обнаружен — исключение обрабатывается, и выполнение программы продолжается;

· обнаружен фрагмент, включающий завершающую конструкцию — выполняются операторы завершающей обработки, и программа продолжается с операторов, следующих за блоком завершения.

Механизм обработки исключения языка C# позволяет перехватывать и обрабатывать исключения только класса Exception и производных от него классов. Основные виды исключений достаточно подробно представлены в справочной системе.NET Framework.

 

Пример 14. Обработка исключений, генерируемых системой.

 

class Program

{

static void Main(string[] args)

{

int numerator, denominator, result;

try

{

string tmp = Console.ReadLine();

numerator = Convert.ToInt32(tmp);

tmp = Console.ReadLine();

denominator = Convert.ToInt32(tmp);

result = numerator / denominator;

tmp = Convert.ToString(numerator / denominator);

Console.WriteLine(result);

}

catch (FormatException)

{

Console.WriteLine("Invalid number format!");

}

catch (DivideByZeroException)

{

Console.WriteLine("Attemted to divide by zero!");

}

finally

{

Console.WriteLine("Divide example.");

}

Console.ReadKey();

}

}

 

Обычно исключения генерируются системой. Программист может самостоятельно организовать генерацию необходимого (возможно нестандартного) исключения с помощью оператора throw.

 

Пример 14. Обработка исключений, генерируемых программой.

 

class Program

{

static void Main(string[] args)

{

try

{

string tmp = Console.ReadLine();

numerator = Convert.ToInt32(tmp);

tmp = Console.ReadLine();

denominator = Convert.ToInt32(tmp);

if (denominator == 0)

//

// Генерация исключения

throw new Exception("Attemted to divide by zero!");

result = numerator / denominator;

tmp = Convert.ToString(numerator / denominator);

Console.WriteLine(result);

}

catch (FormatException)

{

Console.WriteLine("Invalid number format!");

}

catch (Exception error)

{

Console.WriteLine("Message: " + error.Message);

}

finally

{

Console.WriteLine("Divide example.");

}

Console.ReadKey();

}

}


Дата добавления: 2015-07-25; просмотров: 65 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Разработка программ с использованием ООП| НАИВЫСШИЕ РЕЙТИНГИ РОССИЙСКИХ ШАШИСТОВ на 1 января 2012 г.

mybiblioteka.su - 2015-2024 год. (0.011 сек.)