И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина





НазваниеИ. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина
страница28/32
Дата публикации01.09.2013
Размер1.4 Mb.
ТипЛекция
100-bal.ru > Информатика > Лекция
1   ...   24   25   26   27   28   29   30   31   32

2. Традиционные способы обработки ошибок


Приведем несколько традиционных способов обработки ошибок на примере проверки успешности динамического выделения памяти:
// 1-й способ: проверка условия и завершение работы программы

int* pData = new int[10000];

if ( pData == NULL )

{

cout << "Не хватило памяти!\n";

exit(1);

}
// 2-й способ: проверка условия и выход из функции с возвратом

// некоторого оговоренного кода ошибки

int* pData = new int[10000];

if ( pData == NULL )

return -10;
// 3-й способ: никакой проверки в надежде на то, что все будет хорошо

int* pData = new int[10000];
// 4-й способ: проверка условия и вызов функции обработки ошибки

int* pData = new int[10000];

if ( pData == NULL )

NoMemoryError();
// 5-й способ: проверка условия с помощью библиотечного макроса assert(),

// который в случае ложности условия выводит данную строку исходного

// текста в поток вывода и завершает работу программы

int* pData = new int[10000];

assert( pData != NULL );
1-й способ "Завершить программу" слишком прямолинеен и опасен, например, тем, что при аварийном выходе могут пропасть важные несохраненные данные. 5-й способ является разновидностью аварийного завершения, которое оформлено более коротким образом. Для многих ошибок требуется обеспечивать более разумную обработку.

2-й способ "Возвратить значение-код ошибки" не всегда возможно применить, так как в чистом виде не существует приемлемого значения для "ошибки". Например, у некоторой целочисленной функции int func() может оказаться так, что любое значение int является корректным возвращаемым значением и ни одно число нельзя будет считать кодом ошибки. Если даже такой подход возможен, это зачастую неудобно, так как при каждом вызове нужно проверять возвращаемое значение. Это может значительно удлинить программу. Поэтому такой подход редко используется для систематического обнаружения всех ошибок.

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

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

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

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

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

Средства обработки исключений могут быть рассмотрены как динамический (run-time) аналог проверки типов и обработки неоднозначностей во время компиляции. Поэтому важность процесса написания программы возрастет, а заставить программу работать труднее, чем на Си. Тем не менее, генерируемый код с большой вероятностью будет функционировать как предполагалось и приемлемо работать как составная часть большой программы. Кроме того, программа будет более понятна для других программистов и легче поддаваться обработке. Просто обработка ситуаций является средством для поддержки "хорошего стиля" (подобно тому, как "хороший стиль" поддерживается другими средствами Си++), которое может быть использовано лишь неформально и неполно в языках, подобных Си.

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

1   ...   24   25   26   27   28   29   30   31   32

Похожие:

И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconИ. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной...
...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconИ. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной...
...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconПротокол №5 От 12 января 2012 г Заседания кафедры электроники и вычислительной...
Зав кафедрой Хакимова Г. Г. сообщила, что кафедра проводит 2-й Чемпионат по цифровой схемотехнике
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconМетодические рекомендации по подготовке, оформлению, предзащите и...
В. А. Усков, заместитель декана естественно-географического факультета по развитию, доцент кафедры физической географии и методики...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconПроблемы коммуникации
М. Е. Евсевьева (зав кафедрой, доцент А. А. Ветошкин); С. А. Борисова, директор Института международных отношений Ульяновского государственного...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconПрограмма по формированию навыков безопасного поведения на дорогах...
Елена Святославовна Симакова, кандидат педагогических наук, доцент кафедры гуманитарных и естественнонаучных дисциплин Рязанского...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconПрограмма курса по выбору «Орнитология» предназначена для студентов...
Автор программы: к б н., доцент, зав кафедрой биологии и химии Марина Николаевна Харламова
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconРоссийской Федерации Федеральное государственное образовательное...
Петренко И. М., зав кафедрой экономической теории, д-р экон наук профессор Дулин М. П., зав кафедрой педагогики и психологии, д-р...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconРахманкулова Людмила Кузьминична, кандидат филологических наук, доцент...
Автор программы: С. А. Виноградова, кандидат филологических наук, доцент, зав кафедрой английского языка и английской филологии
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconПрограмма по формированию навыков безопасного поведения на дорогах...
...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconЛингвистические проблемы
Московского государственного педагогического института иностранных языков им. М. Тореза (зав кафедрой доцент Ю. А. Денисенко); д-р...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconМгпу учебно-методический комплекс дисциплины
А. В. Прялухина, кандидат психологических наук, доцент, зав кафедрой психологии Российского государственного социального университета...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconРабочая программа по дисциплине «теория экономического анализа»
Рецензент: к с н., доцент, зав кафедрой «Экономики и управления на предприятии и маркетинга» Пятигорского государственного гуманитарно-технологического...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconРабочая программа по дисциплине «международный менеджмент»
Рецензент: к с н., доцент, зав кафедрой «Экономики и управления на предприятии и маркетинга» Пятигорского государственного гуманитарно-технологического...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconМетодические рекомендации по написанию курсовых работ дисциплине
Рецензент: к с н., доцент, зав кафедрой «Экономики и управления на предприятии и маркетинга» Пятигорского государственного гуманитарно-технологического...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconУчебное пособие Краснодар 2008
В. А. Оробец); кафедра паразитологии и ветсанэкспертизы Донского государственного аграрного университета (зав кафедрой, проф., к...


Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск