Software Design Поведение при сбоях Бреслав А. А. Контракт  Метод  Предусловие – обязанности среды  Постусловие – обязанности метода  Класс  Инвариант – неявное дополнение к предусловию и постусловию.

Download Report

Transcript Software Design Поведение при сбоях Бреслав А. А. Контракт  Метод  Предусловие – обязанности среды  Постусловие – обязанности метода  Класс  Инвариант – неявное дополнение к предусловию и постусловию.

Бреслав А. А.

Software Design

Поведение при сбоях

Контракт

 Метод  Предусловие – обязанности среды  Постусловие – обязанности метода  Класс  Инвариант – неявное дополнение к предусловию и постусловию каждого метода Паттерны проектирования. Введение Бреслав А. А.

Когда контракт нарушается

  Нарушено постусловие  Метод не выполнил контракт  Ошибка в коде метода Нарушено предусловие  Окружение метода не выполнило контракт  Возможно, ошибка в коде окружения  Возможно, поступили некорректные данные    Пользователь Ненадежные каналы передачи … Бреслав А. А.

Паттерны проектирования. Введение

Вечные вопросы

  Нарушено постусловие   Кто виноват?

Программист

Что делать?

Исправлять код метода

(или ДНК…  ) Нарушено предусловие   Кто виноват?

Неизвестно

Что делать?

Бросить исключение

Паттерны проектирования. Введение Бреслав А. А.

Когда использовать исключения

  Когда обнаружено нарушение контракта метода  В этом случае происходит программный сбой: метод не может нормально работать Когда обнаружен сбой во внешней среде  Иногда это делается помимо программиста (IOException) Паттерны проектирования. Введение Бреслав А. А.

Золотое правило

  НЕ НУЖНО ИСПОЛЬЗОВАТЬ ОБРАБОТКУ ИСКЛЮЧЕНИЙ, КОГДА НЕТ СБОЯ  для изощренных переходов (вместо goto)  для обмена данными между различными частями приложения  для избавления от проблем с нулевыми ссылками Паттерны проектирования. Введение Бреслав А. А.

Исключения в Java

   Runtime  Нарушение контракта, которое клиент мог предсказать (NPE, Division by zero, NumberFormatException, ClassCastException)  вот зачем нужно, чтобы внешние клиенты могли вычислить значение предусловия Checked  Нарушение контракта внешней средой, которого клиент предсказать не мог или это было слишком сложно (IOException) Error  Исключения уровня виртуальной машины  Никогда не нужно бросать или ловить Error Паттерны проектирования. Введение Бреслав А. А.

Исключения – часть сигнатуры

  Должно быть известно, какие исключения может бросить метод, и когда  если предусловие выписано явно, эта информация сопровождает предусловие Стоит указывать в предложении throws не только Checked, но и Runtime исключения Паттерны проектирования. Введение Бреслав А. А.

Обработка исключений

  Полнота  Блок обработки сам не бросает никаких исключений Своевременность  Блок обработки захватывает только код, связанный с исключением  Исключение обрабатывается на своем уровне абстракции Паттерны проектирования. Введение Бреслав А. А.

Уровни абстракции при обработке исключений

     

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

истекло

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

Паттерны проектирования. Введение Бреслав А. А.

Заворачивание исключений

  Изменение уровня абстракции  Поймать низкоуровневое исключение  Завернуть его в высокоуровневое  Бросить высокоуровневое Приведение к наследуемой сигнатуре  Библиотека регламентирует сигнатуру  Checked исключения приходится заворачивать Паттерны проектирования. Введение Бреслав А. А.

Избавление от checked исключений

 Завернуть checked исключение в runtime исключение  Опасно: нарушается семантика  Бывает необходимо  Это сигнал к тому, что что-то делается не там, где надо Паттерны проектирования. Введение Бреслав А. А.

Классы исключений

  Информативность  как минимум, отражение уровня абстракции  достаточная информация для обнаружения причин сбоя  для этого часто создаются собственные классы checked исключений Создавать свои классы runtime исключений нужно редко Паттерны проектирования. Введение Бреслав А. А.

Стандартные классы исключений

 IllegalArgumentException  IllegalStateException  IndexOutOfBoundsException   UnsupportedOperationException Не стоит использовать  NullPointerException  ClassCastException Паттерны проектирования. Введение Бреслав А. А.

Быстродействие

 Бросание исключения занимает время  заполняется stack trace  вычисляется точка, куда передается управление  Обработка исключения дает дополнительную нагрузку на код, внутри блока try Паттерны проектирования. Введение Бреслав А. А.

Взаимодействие с пользователем

     Закрыться молча Сообщить об ошибке и закрыться Сообщить об ошибке и отменить текущую операцию Запросить корректировку данных Скорректировать данные самостоятельно Паттерны проектирования. Введение Бреслав А. А.

Принцип наименьшего удивления

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

Сбор информации о сбоях

 Информацию о сбоях лучше всего накапливать и анализировать, чтобы выявить ошибки, приводящие к сбоям или улучшить usability  log файлы  автоматизированные отчеты об ошибках Паттерны проектирования. Введение Бреслав А. А.

  

Источники

Джошуа Блох, Java™. Эффективное программирование / Пер. с англ. – М.: Лори, 2002 Мейер Б., Объектно-ориентированное конструирование программных систем / Пер. с англ. – М. : Издательско-торговый дом «Русская редакция», 2005 – 1232 стр. : ил. Джоэл Спольски, Джоэл о программировании… – СПб: Символ-Плюс, 2006 – 352 с., ил.

Паттерны проектирования. Введение Бреслав А. А.

Задание

 Создать класс для стека чисел, хранимого в файле  Описать контракт каждого метода  Обратить внимание на типы исключений Бреслав А. А.

Паттерны проектирования. Введение

Вопросы

Бреслав А. А.

Паттерны проектирования. Введение