Студопедия

Главная страница Случайная страница

Разделы сайта

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






О механизме исключений






Глава 16. Исключения

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

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

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

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

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

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

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

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

Особых ситуаций, если они потенциально возможны, избежать нельзя. Но программист может предусмотреть в программе операторы для распознавания особой ситуации и для реакции на неё.

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

Исключения позволяют отделить распознавание особой ситуации от реакции на неё. В механизме исключений есть два этапагенерация исключения и обработка исключения. Генерация исключения выполняется в том месте, где возникла и обнаружена особая ситуация, а обработка – там, где это удобно в конкретном случае.

Если бы современные программы создавались по-старинке, без использования стандартных или специализированных библиотек (подпрограмм, процедур, функций, классов), то без механизма исключений можно было бы обойтись. Более того, прародитель Си-образных языков – язык Си обходится без исключений. Но не будем упрекать в этом его авторов. При создании языка Си не был ещё внедрён в программирование объектно-ориентированный подход.

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

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

Таким образом, распознавание особой ситуации в библиотечном методе должно быть " оторвано" от действий по устранению причин её появления. Эту возможность обеспечивают исключения.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.