понедельник, 11 января 2016 г.

Глава 9. Процесс программирования с псевдокодом

В этой главе описывается процесс низкоуровневого проектирования классов и методов.
Создание класса состоит из трёх процессов: Создание общей структуры, конструирование процедур, оценка и тестирование.
Эти процессы происходят не последовательно, после завершения одного можно и нужно возвращаться назад, пересматривать общую структуру или код методов.
Этапы создания класса подробнее:

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

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

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


Проектирование метода: 

  • Проверка предварительных условий - убедиться, что функции метода чётко определены
  • Формулировка задачи решаемой методом - информация, скрываемая методом, входные/выходные данные, предусловия, постусловия
  • Именование метода
  • Создание плана по тестированию метода
  • Исследование функциональности стандартных библиотек, которая бы помогла в реализации метода
  • Обдумывание обработки ошибок
  • Обдумывание эффективности
  • Исследование алгоритмов и типов данных
  • Написание псевдокода - сначала пишем общий комментарий ко всему методу, затем добавляем высокоуровневый псевдокод
  • Обдумывание применения данных
  • Проверка псевдокода
  • Описание нескольких идей более подробной реализации псевдокодом и выбор одной наилучшей

Кодирование метода:

  • Написать объявление метода
  • Изменить псевдокод на высокоуровневые комментарии
  • Написать код под каждым комментарием
  • Проверить, нужна ли дальнейшая декомпозиция кода, если нужна, то выделить код в отдельный вспомогательный метод

Проверка кода:

  • Умозрительно проверить ошибки в метода - пройтись по всем веткам выполнения
  • Компиляция метода - с наивысшим уровнем предупреждений компилятора
  • Проход по всему коду отладчиком
  • Тестирование кода
  • Удаление найденных ошибок

Наведение глянца:

  • Проверить интерфейс метода, проверить, что все параметры используются
  • Проверить общее качество конструкции
  • Проверить переменные метода
  • Проверить логику метода
  • Проверить форматирование
  • Проверить документирование
  • Удалить лишние очевидные комментарии

Repeat n times...


Альтернативы проектированию через псевдокод:
  • Разработка через тестирование
  • Рефакторинг
  • Проектирование по контракту
  • Бессистемное программирование - тяп-ляп и в продакшен

Комментариев нет:

Отправить комментарий