- •Глава II
- •12. Предварительные замечания о процессе разработки программ
- •12.1. Жизненный цикл математического обеспечения
- •12. Предварительные замечания о процессе разработки программ
- •12.1. Жизненный цикл математического обеспечения
- •12.2. Анализ требований
- •12.3. Пример задачи
- •13.1. Обзор процесса проектирования
- •13.2.1. Вводный раздел
- •13.2.2. Разделы абстракций
- •13.8. Абстракция строки
- •13.9. Обзор и обсуждение
- •14. Этап перехода от проектирования к реализации
- •14.1. Оценка проекта
- •14.1.1. Корректность и эффективность
- •14.1.2. Структура
- •15.2. Выбор подхода
13.1. Обзор процесса проектирования
Назначение проектирования заключается в определении структуры программы, состоящей из набора модулей, которые могут быть реализованы независимо, а будучи объединенными, удовлетворяют требованиям спецификации. Эта структура должна обеспечивать необходимое поведение, ее реализация должна удовлетворять ряду требований, включая пространственную и временную эффективность, доступность и надежность. Далее, структура должна быть выбрана достаточно удачно: она должна быть относительно простой и не содержать дублей (например, не содержать два модуля там, где достаточно одного). Наконец, структура должна обеспечивать не только разработку исходной программы, но и ее дальнейшую поддержку и модификацию. Легкость модификации зависит от характера вносимых изменений. Удачная декомпозиция позволит с одинаковой легкостью внести любые изменения. По этой причине лучше учесть все возможные модификации на начальном этапе проектирования программы с тем, чтобы разрабатываемая декомпозиция максимально их облегчила.
Начнем со спецификации требований. Иногда она описывает единственную абстракцию, иногда несколько, собираемых затем вместе в одну программу. Выберем для начала одну из этих абстракций. Назовем эту абстракцию целевой.При разработке программы для каждой целевой абстракции выполняются три следующих шага.
1, Определение вспомогательных абстракций, полезных для реализации целевой абстракции и облегчения декомпозиции задачи.
2.Определение поведения каждой вспомогательной абстракции.
3.Определение программы реализации целевой абстракции в терминах вспомогательных..
Первый шаг состоит в разработке ряда вспомогательных абстракций, используемых для создания целевой абстракции. Совокупность этих абстракций можно рассматривать как некоторую абстрактную машину, создающую объекты и операции для реализации целевой. Идея состоит в том, что при наличии такой машины реализация целевой абстракции не представляет особого труда. Во-вторых, мы должны точно определить вспомогательные абстракции, создав спецификации для каждой из них. Второй шаг заключается в уточнении подробностей и последующем документировании решений в спецификации, делая ее, насколько возможно, полной и недвусмысленной. После того как определено точное поведение каждой вспомогательной абстракции, мы можем использовать их для написания программ. В принципе целевая задача может быть реализована уже на этом шаге, однако на этапе проектирования мы этим не занимаемся. Вместо этого мы просматриваем решение, убеждая себя в том, что действительно возможно создание эффективной модульной реализации. Если бы абстрактная машина в действительности существовала, то мы могли на этом закончить. В действительности приходится анализировать дополнительные абстракции более подробно. На следующем шаге мы выбираем одну из вспомогательных абстракций и создаем ее реализацию.
Для больших программ обычно заранее неизвестно, какова должна быть структура программы. В этом случае главной задачей проектирования является как раз нахождение этой структуры. Иногда в процессе работы необходимо сделать выбор одной из нескольких структур, ни одна из которых не является четко определенной. Разумеется, как бы мы ни были аккуратны в процессе реализации, возникновение проблем неизбежно. В таких случаях нужно пересмотреть соответствующие части проекта.
Мы рассмотрели в целом проблемы, связанные с проектированием, однако не коснулись ряда вопросов, в частности:
1.Каким образом осуществляется декомлозиция? То есть, каким образом определяются вспомогательные абстракции, которые помогают решить проблему?
2.В каком направлении делается следующий шаг?
3.Каким образом удостовериться, что мы двигаемся в правильном направлении? Например, откуда известно, что вспомогательные абстракции легче реализовать, чем создаваемую с их помощью целевую?
4.Каким образом на этапе проектирования учитываются требования к исполнению и модификации задачи?5.До какой степени нужно выполнять декомпозицию? Эти и другие подобные вопросы будут рассмотрены при разборе примера. Сначала, однако, мы рассмотрим вопрос документирования проекта.
272 Глава 13
Проектированш
13.2. Рабочий журнал проектировщика
Принимаемые в процессе проектирования решения обязательно должны регистрироваться. Эта документация должна вестись систематично в специальномрабочем журнале.В этом журнале должен быть вводный раздел, обеспечивающий общий процесс проектирования программы и разделы для каждой из абстракций.