Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
38
Добавлен:
23.03.2015
Размер:
792.06 Кб
Скачать

13.1. Обзор процесса проектирования

Назначение проектирования заключается в определении струк­туры программы, состоящей из набора модулей, которые могут быть реализованы независимо, а будучи объединенными, удов­летворяют требованиям спецификации. Эта структура должна обеспечивать необходимое поведение, ее реализация должна удов­летворять ряду требований, включая пространственную и вре­менную эффективность, доступность и надежность. Далее, струк­тура должна быть выбрана достаточно удачно: она должна быть относительно простой и не содержать дублей (например, не со­держать два модуля там, где достаточно одного). Наконец, струк­тура должна обеспечивать не только разработку исходной про­граммы, но и ее дальнейшую поддержку и модификацию. Легкость модификации зависит от характера вносимых изменений. Удачная декомпозиция позволит с одинаковой легкостью внести любые изменения. По этой причине лучше учесть все возможные моди­фикации на начальном этапе проектирования программы с тем, чтобы разрабатываемая декомпозиция максимально их облегчила.

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

1, Определение вспомогательных абстракций, полезных для реа­лизации целевой абстракции и облегчения декомпозиции задачи.

2.Определение поведения каждой вспомогательной абстракции.

3.Определение программы реализации целевой абстракции в терминах вспомогательных..

Первый шаг состоит в разработке ряда вспомогательных абстрак­ций, используемых для создания целевой абстракции. Совокуп­ность этих абстракций можно рассматривать как некоторую абстрактную машину, создающую объекты и операции для реали­зации целевой. Идея состоит в том, что при наличии такой машины реализация целевой абстракции не представляет особого труда. Во-вторых, мы должны точно определить вспомогательные абстрак­ции, создав спецификации для каждой из них. Второй шаг за­ключается в уточнении подробностей и последующем документи­ровании решений в спецификации, делая ее, насколько возможно, полной и недвусмысленной. После того как определено точное по­ведение каждой вспомогательной абстракции, мы можем исполь­зовать их для написания программ. В принципе целевая задача может быть реализована уже на этом шаге, однако на этапе проек­тирования мы этим не занимаемся. Вместо этого мы просматри­ваем решение, убеждая себя в том, что действительно возможно создание эффективной модульной реализации. Если бы абстракт­ная машина в действительности существовала, то мы могли на этом закончить. В действительности приходится анализировать дополнительные абстракции более подробно. На следующем шаге мы выбираем одну из вспомогательных абстракций и создаем ее реализацию.

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

Мы рассмотрели в целом проблемы, связанные с проектирова­нием, однако не коснулись ряда вопросов, в частности:

1.Каким образом осуществляется декомлозиция? То есть, каким образом определяются вспомогательные абстракции, ко­торые помогают решить проблему?

2.В каком направлении делается следующий шаг?

3.Каким образом удостовериться, что мы двигаемся в пра­вильном направлении? Например, откуда известно, что вспомо­гательные абстракции легче реализовать, чем создаваемую с их помощью целевую?

4.Каким образом на этапе проектирования учитываются тре­бования к исполнению и модификации задачи?5.До какой степени нужно выполнять декомпозицию? Эти и другие подобные вопросы будут рассмотрены при раз­боре примера. Сначала, однако, мы рассмотрим вопрос докумен­тирования проекта.

272 Глава 13

Проектированш

13.2. Рабочий журнал проектировщика

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

Соседние файлы в папке POSIBNIK