
Министерство образования и науки РФ
Томский Государственный университет систем управления и радиоэлектроники (ТУСУР)
Кафедра комплексной информационной безопасности электронно-вычислительных систем (КИБЭВС)
ОТЧЕТ
по лабораторной работе №4
Тема: “Генерирование и обработка исключительных ситуаций.”
Выполнил студент гр. 521
Бондаренко Д. О.
______________ 29.10.12
Принял: Романов А. С.
______________ 29.10.12
Томск 2012
-
Цель работы
Цель работы: изучение различных видов исключительных ситуаций и методов их обработки.
-
Задание
-
Изучить теоретический материал и представленный исходный код.
-
Разработать программу, генерирующую исключительную ситуацию, и обрабатывающую вызванное исключение.
-
Доработать пример кода, реализующего схему Б. Мейера так, чтобы угроза исключения зависела от значения генерируемого случайного числа, а обработчик исключения мог изменять границы интервала, повышая вероятность успеха.
-
Написать отчет и защитить у преподавателя.
-
Теоретический материал
Исключительные ситуации - это ситуации, возникающие во время выполнения программы, не позволяющие корректно выполнять вычисляемые действия.
-
Ошибка ограничений — выход за пределы диапазона.
-
Ошибка памяти — недостаточность памяти.
-
Программная ошибка — нарушение правил языка.
-
Ошибка задачи — ошибки, возникающие при взаимодействии задач.
Семантика обработки исключений:
-
Если исключительная ситуация не обработана внутри процедуры, попытка ее выполнения оставляется, и исключительная ситуация снова возбуждается в точке вызова.
-
Если исключительная ситуация возбуждается во время выполнения обработчика, а обработчик вставляется, то исключение снова возбуждается в точке вызова.
-
Возможен выбор: возбудить то же самое исключение или другое в точке вызова.
Базовая технология обработки исключений в С++ заключается в использовании триады try…throw...catch. Нормальная ситуация обрабатывается кодом, следующим за ключевым словом try, а код, располагающийся за ключевым словом catch, выполняется только в исключительных случаях. Выбрасывание осуществляется с помощью оператора throw. При выбросе исключения выполнение блока try останавливается и начинается выполнение блока catch (обработчика исключения).
Более сложной и часто используемой является схема обработки исключительных ситуаций Бертана Мейера. В её основе лежит подход к проектированию программной системы на принципах Проектирования по Контракту. Модули программной системы, вызывающие друг друга, заключают между собой контракты. Вызывающий модуль обязан обеспечить истинность предусловия, необходимого для корректной работы вызванного модуля. Вызванный модуль обязан гарантировать истинность постусловия по завершении своей работы. Если в вызванном модуле возникает исключительная ситуация, то это означает, что он не может выполнить свою часть контракта. Обработчик исключительной ситуации, в свою очередь, имеет две возможности: 1. Retry — попытаться внести коррективы и вернуть управление охраняемому модулю, который может предпринять очередную попытку выполнить свой контракт. В случае успеха и если работа модуля соответствует его постусловию, то исключительная ситуация рассматривается как временная успешно преодоленная проблема. 2. Если ситуация возникает вновь и вновь, тогда обработчик события применяет вторую стратегию Rescue, выбрасывая исключение и передавая управление вызывающему модулю, который и Должен теперь попытаться исправить ситуацию. Обработчик исключения должен позаботиться о восстановлении состояния, предшествующего вызову модуля, который привел к исключительной ситуации, и это гарантирует нахождение всей системы в корректном состоянии.
-
Ход выполнения работы
public class lab4 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
int a = 0;
int c = 10 / a;
System.out.println(c);
}
catch (ArithmeticException e) {
System.out.println("Деление на ноль");
}
finally {
System.out.println("OK");
}
}
}
public class my {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
boolean q;
int a=0;
do{
try {
q = false;
int x = (int) (Math.random() *300);
System.out.println(x);
if(x>a){ throw new ArithmeticException ();}
System.out.println("OK");
}
catch(ArithmeticException e) {
System.out.println("Ошибка выполнения. Попытка исправить ситуацию.");
a = a+50;
q=true;
}
}
while(q);
}
}
-
Вывод
В ходе выполнения лабораторной работы я изучила различные виды исключительных ситуаций и методы их обработки.