В этой главе описывается процесс низкоуровневого проектирования классов и методов.
Создание класса состоит из трёх процессов: Создание общей структуры, конструирование процедур, оценка и тестирование.
Эти процессы происходят не последовательно, после завершения одного можно и нужно возвращаться назад, пересматривать общую структуру или код методов.
Этапы создания класса подробнее:
Товарищ Макконнелл очень любить проектирование методов с помощью псевдокода.
При таком подходе сначала пишется подробный план работы метода на языке близком к естественному, а затем он последовательно реализуется на языке программирования. При написании псевдокода нужно соблюдать следующие правила:
Создание класса состоит из трёх процессов: Создание общей структуры, конструирование процедур, оценка и тестирование.
Эти процессы происходят не последовательно, после завершения одного можно и нужно возвращаться назад, пересматривать общую структуру или код методов.
Этапы создания класса подробнее:
- Создание общей структуры класса - определить функции класса, его секреты, точный уровень его абстракции, определить основные открытые методы и нетривиальные структуры данных, используемые им.
- Конструирование всех методов класса - конструирование каждого отдельного метода класса, обычно при этом возникает потребность в использовании дополнительных, непредусмотренных ранее методов.
- Оценка и тестирование всего класса - после того, как весь класс написан, нужно проверить его совокупную работоспособность и выявить те проблемы, которые были не видны на уровне отдельных методов.
- Проектирование
- Проверка структуры
- Кодирование
- Пересмотр и тестирование кода
Товарищ Макконнелл очень любить проектирование методов с помощью псевдокода.
При таком подходе сначала пишется подробный план работы метода на языке близком к естественному, а затем он последовательно реализуется на языке программирования. При написании псевдокода нужно соблюдать следующие правила:
- Применять формулировки, в точности описывающие отдельные действия.
- Избегать синтаксических элементов языков программирования.
- Писать псевдокод на уровне намерений, а не реализации этих намерений.
- Писать на достаточно низком уровне, так чтобы код из псевдокода генерировался практически автоматически.
Проектирование метода:
- Проверка предварительных условий - убедиться, что функции метода чётко определены
- Формулировка задачи решаемой методом - информация, скрываемая методом, входные/выходные данные, предусловия, постусловия
- Именование метода
- Создание плана по тестированию метода
- Исследование функциональности стандартных библиотек, которая бы помогла в реализации метода
- Обдумывание обработки ошибок
- Обдумывание эффективности
- Исследование алгоритмов и типов данных
- Написание псевдокода - сначала пишем общий комментарий ко всему методу, затем добавляем высокоуровневый псевдокод
- Обдумывание применения данных
- Проверка псевдокода
- Описание нескольких идей более подробной реализации псевдокодом и выбор одной наилучшей
Кодирование метода:
- Написать объявление метода
- Изменить псевдокод на высокоуровневые комментарии
- Написать код под каждым комментарием
- Проверить, нужна ли дальнейшая декомпозиция кода, если нужна, то выделить код в отдельный вспомогательный метод
Проверка кода:
- Умозрительно проверить ошибки в метода - пройтись по всем веткам выполнения
- Компиляция метода - с наивысшим уровнем предупреждений компилятора
- Проход по всему коду отладчиком
- Тестирование кода
- Удаление найденных ошибок
Наведение глянца:
- Проверить интерфейс метода, проверить, что все параметры используются
- Проверить общее качество конструкции
- Проверить переменные метода
- Проверить логику метода
- Проверить форматирование
- Проверить документирование
- Удалить лишние очевидные комментарии
Repeat n times...
Альтернативы проектированию через псевдокод:
- Разработка через тестирование
- Рефакторинг
- Проектирование по контракту
- Бессистемное программирование - тяп-ляп и в продакшен
Комментариев нет:
Отправить комментарий