Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Совершенный код. Мастер-класс - Макконнелл С.

Макконнелл С. Совершенный код. Мастер-класс — М.: Русская редакция, 2005. — 896 c.
ISBN: 5-469-00822-3
Скачать (прямая ссылка): soversheniykodmasterklass2005.djvu
Предыдущая << 1 .. 102 103 104 105 106 107 < 108 > 109 110 111 112 113 114 .. 426 >> Следующая

сохраняется абстракция интерфейса.
Вносите в описание исключения всю информацию о его причинах
Каждое исключение возникает при определенных обстоятельствах,
обнаруженных кодом в момент генерации этого исключения. Эти
сведения недоступны тому, кто читает сообщение об исключении.
Убедитесь, что это сообщение содержит достаточно информации
для понимания причины генерации исключения. Например, если
причиной был неправильный индекс элемента массива, включите в
описание верхнюю и нижнюю границы массива и некорректное
значение индекса.
196
ЧАСТЬ II Высококачественный код
Избегайте пустых блоков catch Иногда возникает искушение
оставить без внимания исключение, которое вы не знаете, как
обработать. Например:
Плохой пример игнорирования исключения (Java)
try {
// много кода } catch ( AnException exception ) {
}
Такой подход говорит о том, что либо код внутри блока try
генерирует исключение без причины, либо код в блоке catch не
обрабатывает возможную исключительную ситуацию. Выясните, в
чем суть проблемы, и исправьте блоки try или catch.
Изредка можно столкнуться с ситуацией, когда исключение более
низкого уровня не соответствует уровню абстракции вызывающего
метода. В этом случае хотя бы задокументируйте, почему блок
catch должен быть пустым. Это можно сделать в комментариях или
записав сообщение в файл журнала, например:
Хороший пример игнорирования исключения на Java
try {
// много кода
} catch ( AnException exception ) {
LogError( ''Unexpected exception" );
}
Выясните, какие исключения генерирует используемая библиотека
Если вы работаете с языком, не требующим, чтобы метод или
класс объявляли возможные исключения, убедитесь, что вам
известно, какие исключения могут возникнуть в коде
используемых библиотек. Неперехваченное исключение из биб-
лиотеки приведет к аварийному завершению программы так же
легко, как и исключение, сгенерированное в вашем коде. Если
библиотечные исключения не документированы, создайте код-
прототип и протестируйте библиотеки, чтобы их выявить.
Рассмотрите вопрос о централизованном выводе информации об
исключениях Поддержание целостности в обработке исключений
обеспечивает централизованный генератор сообщений об
исключениях. Он содержит базу знаний о том, какие это
исключения, как каждое из них должно быть обработано, каков
формат их сообщений и т. п.
Вот пример упрощенного обработчика исключений. Он просто
печатает диагностическое сообщение:
ГЛАВА 8 Защитное программирование 197
Пример централизованного генератора сообщений об исключениях,
часть 1 (Visual Basic)
Sub ReportException(
n W1 n I, " Двя&лнитеяыш* сведения
Об
У className' - згой технологии ш.
"Practical
ByVal thisException As Exception _ Stan(Jards
)of M)?roso{t Visual
> Basic .ЫЕТ" (Foxati, 2003).
Dim message As String
Dim caption As String
message = ''Exception: " & thisException. Message & "." &
ControlChars.CrLf & ''Class: " & className &
ControlChars.CrLf &
''Routine: " & thisException. TargetSite. Name &
ControlChars. CrLf caption = ''Exception"
MessageBox.Show( message, caption, MessageBoxButtons.OK,
MessageBoxIcon.Exclamation )
End Sub
Этот обработчик можно использовать следующим образом:
Пример централизованного генератора сообщений об исключениях,
часть 2 (Visual Basic)
Try
Catch exceptionObject As Exception
ReportException( CLASS_NAME, exceptionObject )
End Try
Код этой версии ReportExceptionQ несложен. В реальных
приложениях вы можете сделать отчет настолько кратким или
подробным, насколько это необходимо в вашем обработчике
исключений.
Если вы решили создать централизованный генератор сообщений,
примите во внимание основные проблемы с централизованной
обработкой ошибок, обсуждаемые в подразделе "Вызвать процедуру
или объект - обработчик ошибок" раздела 8.3.
Стандартизуйте использование исключений в вашем проекте Чтобы
сохранить процедуру обработки исключений максимально
интеллектуально управляемой, вы можете стандартизовать
использование исключений несколькими способами.
¦ Если вы работаете с языком, таким как C++, который позволяет
генерировать исключения разных типов, стандартизуйте, что
конкретно будет создаваться. В целях совместимости с другими
языками подумайте об использовании только объектов,
порожденных от базового класса Exception.
Ш Подумайте о создании собственного класса исключений, который
может служить базовым классом для всех исключений,
возникающих в вашем проекте. Это поможет централизовать и
стандартизовать регистрацию, обработку и другие действия с
ошибками.
198
ЧАСТЬ II Высококачественный код
¦ Определите конкретные случаи, в которых код может
использовать синтаксис throw-catch для локальной обработки
ошибок.
¦ Определите конкретные случаи, в которых код может
сгенерировать исключение, не перехватываемое локально.
¦ Решите, будет ли использоваться централизованный генератор
сообщений об исключениях.
¦ Определите, допускаются ли исключения в конструкторах и
Предыдущая << 1 .. 102 103 104 105 106 107 < 108 > 109 110 111 112 113 114 .. 426 >> Следующая