Фрагмент для ознакомления
2
Использование программного обеспечения давно стало обыденностью. Персональные компьютеры и смартфоны содержат десятки и сотни программ, и каждый из нас пользуется ими ежедневно. Популярные программы могут иметь миллионы пользователей и не все они готовы разбираться в сложные механизмы использования программ. Как следствие программа должна быть не только простой в использовании, но и выдерживать любую вводимую информацию, не прекращая при этом работу.
Некорректное использование программы может привести к появлению недопустимых ситуаций. Для того чтобы разработчик мог предусмотреть данную опасность существует механизм обработки исключений. Существует множество причин, которые могут повлечь за собой возникновение исключения, вот некоторые из них:
• пользователь ввел недопустимые данные;
• файл, который необходимо открыть, не найден;
• соединение с сетью потеряно в процессе передачи данных;
• исчерпан имеющийся объем памяти;
Некоторые из данных исключений вызваны пользовательской ошибкой, другие — программной ошибкой, в некоторых случаях, причиной тому может послужить сбой в материальных ресурсах.
В данной научной работе будет рассмотрена тема исключений, способы их обработки. Актуальность данной темы обусловлена потребностью разработчиков справляться с ошибками, возникающими в ходе выполнения программы.
Цель курсовой работы заключается в углубленном изучении инструментов и особенностей обработки исключений в данном языке программирования.
Для осуществления обозначенной цели поставим следующие задачи:
1. Изучить специальную литературу по рассматриваемой проблеме;
2. Дать определение понятию «исключение», рассмотреть виды исключений, а также способы их обработки;
3. Изучить процесс обработки исключений на примере конкретного языка программирования (PL/1);
Объект исследования - методы обработки исключений.
Предмет исследования - языковые средства, предназначенные для обработки исключительных ситуаций.
1 Методы обработки исключений
1.1 Общие сведения
Во время выполнения программы могут возникать ситуации, когда состояние внешних данных, устройств ввода-вывода или компьютерной системы в целом делает дальнейшие вычисления в соответствии с базовым алгоритмом невозможными или бессмысленными. Чтобы такие ситуации не приводили к фатальным последствиям используется механизм обработки исключений .
Исключение — это событие при выполнении программы, которое приводит к её ненормальному или неправильному поведению.
Существует два вида исключений:
1. Аппаратные (структурные, SE-Structured Exception), которые генерируются процессором. К ним относятся, например,
• деление на 0;
• выход за границы массива;
• обращение к невыделенной памяти;
• переполнение разрядной сетки.
2. Программные, генерируемые операционной системой и прикладными программами – возникают тогда, когда программа их явно инициирует. Когда встречается аномальная ситуация, та часть программы, которая ее обнаружила, может сгенерировать, или возбудить, исключение.
Фундаментальная идея обработки исключительных ситуаций состоит в том, что функция, обнаружившая проблему, но не знающая как её решить, генерирует исключение в надежде, что вызвавшая её (непосредственно или косвенно) функция сможет решить возникшую проблему. Функция, которая может решать проблемы данного типа, указывает, что она перехватывает такие исключения.
Механизм исключений существует не во всех языках. Он был введен в язык программирования Lisp в 1972 году, то есть примерно через 30 лет после того, как был изобретен первый язык программирования. Первоначально были только непроверяемые исключения, но в 1995 году язык программирования Java ввел понятие “проверяемые исключения”, которое заставляет вас обрабатывать исключение, прежде чем вам разрешат запустить программу .
Исключительные ситуации, возникающие при работе программы, можно разделить на два основных типа: синхронные и асинхронные, принципы реакции на которые существенно различаются.
• Синхронные исключения могут возникнуть только в определённых, заранее известных точках программы. Так, ошибка чтения файла или коммуникационного канала, нехватка памяти — типичные синхронные исключения, так как возникают они только в операции чтения или в операции выделения памяти соответственно.
• Асинхронные исключения могут возникать в любой момент времени и не зависят от того, какую конкретно инструкцию программы выполняет система. Типичные примеры таких исключений: аварийный отказ питания или поступление новых данных.
Некоторые типы исключений могут быть отнесены как к синхронным, так и к асинхронным. Например, инструкция деления на ноль формально должна приводить к синхронному исключению, так как логически оно возникает именно при выполнении данной команды, но на некоторых платформах за счёт глубокой конвейеризации исключение может фактически оказаться асинхронным.
Для лучшего понимания механизма обработки исключения необходимо подробнее рассмотреть процесс изменения программного стека во время выполнения программы. Стек представляет собой область оперативной памяти компьютера, которая используется для размещения информации, связанной с вызовом функций, а также для хранения автоматических локальных переменных. Перед вызовом функции в стек заносится адрес возврата, кадр состояния (фрейм), содержащий значения регистров и позволяющий перед возвратом восстановить состояние вычислительного процесса и, при необходимости, значения параметров.
После входа в программную секцию функции, со стека снимаются значения параметров и помещаются автоматические локальные переменные. Перед возвратом из функции со стека снимаются локальные переменные, кадр состояния и адрес возврата, затем в стек заносится возвращаемое функцией значение. По кадру состояния восстанавливаются регистры, после чего управление передается по адресу возврата. Таким образом, в процессе выполнения программы стек увеличивается и уменьшается.
Раскручиванием программного стека называется процесс удаления из него значений, в результате которого уничтожаются стековые фреймы вызванных функций. Увеличение программного стека происходит в направлении уменьшения адресов выделенной физической памяти компьютера. Код программы, напротив, размещается в младших адресах. Далее следует область данных, где размещаются внешние и статические переменные и константы, а затем динамически распределяемая память («куча»). При использовании больших локальных массивов данных или при значительной глубине рекурсии возможно переполнение стека, т.е. разрастание его до других разделов памяти.
Имеется несколько механизмов раскручивания программного стека:
• естественное раскручивание в процессе выполнения программы;
• раскручивание, связанное с обработкой исключительных ситуаций;
• раскручивание путем применения функции longjmp();
• и, наконец, путем прямой модификации регистра указателя стека CPU
Фрагмент для ознакомления
3
1. Орлов, С. А. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-его поколения. - Спб.: Питер, 2013. - 688 с.
2. Компиляторы: принципы, технологии и инструментарий. /А. Ахо, М. Лам, Р. Сети, Д. Ульман. -- 2-е изд., -- М.: Издательский дом «Вильямс», 2008. - 1184 с.
3. Обработка исключений [Электронный ресурс] : Материал из Википедии — свободной энциклопедии : Версия 82034035, сохранённая в 05:48 UTC 22 ноября 2016 / Авторы Википедии // Википедия, свободная энциклопедия. — Электрон. дан. — Сан-Франциско: Фонд Викимедиа, 2016. — Режим доступа: https://ru.wikipedia.org/?oldid=82034035
4. Официальный сайт Java, Что такое технология Java и зачем она мне нужна? – URL: http://www.java.com/ru/download/faq/whatis_java.xml [Электронный ресурс], режим доступа – свободный
5. От фортрана — к PL/1. Основы языка PL/1. Безбородов Ю. М.— М.: Наука. Главная редакция физико-математической литературы, 1984.-208 с.
6. Основы программирования на языке Python: учебное пособие / С. К. Буйначев, Н. Ю. Боклаг. – Екатеринбург: Изд-во Урал. ун-та, 2014. – 91, c.
7. Грис Д. Конструирование компиляторов для цифровых вычислительных машин: Пер. с англ. – М.: Мир, 1975. – 544с.
8. Дворянкин А.И. Основы трансляции: Учебное пособие. – Волгоград: ВолгГТУ, 1999. – 80с.
9. Жаков В.И., Коровинский В.В., Фильчаков В.В. Синтаксический анализ и генерация кода. – СПб.: ГААП, 1993. – 26с.
10. Ишакова Е.Н. Теория формальных языков, грамматик и автоматов: Методические указания к лабораторному практикуму. – Оренбург: ГОУ ВПО ОГУ, 2004. – 54с.
11. Компаниец Р.И., Маньков Е.В., Филатов Н.Е. Системное программирование. Основы построения трансляторов. – СПб.: Корона принт, 2000. – 256с.
12. Льюис Ф., Розенкранц Д., Стирнз Р. Теоретические основы проектирования компиляторов. - М.: Мир, 1979. - 654с.
13. Пантелеева И.А. Методы трансляции: Конспект лекций. – Новосибирск: Изд-во НГТУ, 1998. – Ч.2. – 51с.