Программирование >>  Программирование на языке c++ 

1 2 [ 3 ] 4 5 6 ... 159


всех действий, которые она должна выполнять. Такое содержательное описание называется спецификацией. При разработке спецификации необходимо дать ответы на следующие вопросы [3, с. 5]: > какими должны быть входные данные;

> какие данные являются корректными и какие ошибочными;

> кто будет использовать разработанное программное обеспечение и каким должен быть интерфейс (средство общения с пользователем);

> какие ошибки необходимо выявлять и какие сообщения желательно выдавать пользователю при наличии ошибок;

> какие упрощения, предположения и допущения можно сделать по отношению к программам;

> перечислить все особые ситуации, которые требуют дополнительного учета и специального рассмотрения;

какими должны быть выходные данные;

какая документация по программам должна быть подготовлена;

> как развивать и улучшать программы в будущем. На этапе проектирования необходимо построить структуру программы, выбрать или разработать все алгоритмы, которые она будет реализовывать, решить все вопросы по организации данных. Здесь эффективным подходом является разделение сложной исходной задачи на некоторые подзадачи. Каждая отдельная подзадача должна быть относительно независимой и представлять собой некоторый законченный модуль программы. Таким образом, модульность (способность разделения) программы является ее важным свойством. В процессе проектирования очень важно детально описать не только цель каждого модуля, но и потоки данных между модулями. Каждый модуль характеризуется двумя очень важными свойствами:

> он имеет интерфейс или средства взаимодействия с внешней средой;

он является самостоятельной программной единицей, выполняющей определенные функции. При этом мы ro-



ворим О внутренней реализации, т. е. о совокупности алгоритмов и данных, описанных на языке программирования и позволяющих модулю выполнить возложенные на него задачи. Интерфейс (interface) и внутренняя реализация (implementation) являются определяющими свойствами объектов окружающего нас мира. Интерфейс - это средство общения или взаимодействия с объектом. Он интересен нам тогда, когда мы используем объект. Реализация - это внутреннее свойство объекта. Обычно нас не интересуют детали реализации, но интересует ее эффективность (об этом будет говориться в следующем параграфе).

Потоки данных и являются частью интерфейса. При описании их для каждого модуля необходимо дать ответы на следующие вопросы: > какие данные можно передать в модуль до начала его выполнения;

какие упрощения, предположения и допущения сделаны по отношению к модулю;

> что будет с данными после того, как модуль завершит свое выполнение. В целом внешняя спецификация модуля выражается: описанием того, что он делает с некоторыми допущениями (assumptions); того, что ему можно подать на вход (precondition), и того, что можно получить на его выходах (postcondition). Обратим внимание на то, что здесь не надо описывать реализацию тех или иных функций внутри модуля и тем более конструировать код (совокупность инструкций) программы. На рис. 1.1 приведен пример спецификации модуля, используемого для сортировки целых чисел. Эту же спецификацию можно выразить и в другом виде:

Массив, содержащий

Модуль для сортировки целых чисел

Отсортированный массив

п целых чисел

Предположения: О <= п <= 1000 Рис. 1.1. Пример спецификации модуля



sort(array,number of elements)

sort - модуль для сортировки целых чисел

preconditions-array -- это входной массив, содержащий

number of elements целых чисел

postconditions - отсортированный массив array,

содержащий number of elements целых чисел

assumptions - О <= number of elements <= 1000

В программе не следует опускать подобные описания, важность которых возрастает с увеличением сложности программ.

После разработки общей структуры программы необходимо выполнить следующие этапы:

1) установить, какие библиотечные (ранее разработанные) средства можно использовать и какие новые процедуры необходимо разработать;

2) разработать новые структуры данных и алгоритмы выполнения новых процедур;

3) обосновать (доказать) правильность проекта. Для этих целей существуют некоторые формальные методы, хотя исследования в этой области еще полностью не завершены. Некоторые соображения по использованию интуитивных правил приведены в работе [3, с. 8-10]. При доказательстве правильности проекта в первую очередь необходимо проверить критические части алгоритмов, какими являются циклы и условные переходы. Выявление ошибок на этом этапе позволяет существенно упростить последующие этапы кодирования и отладки программ;

4) произвести кодирование, т. е. описание алгоритмов и данных с помощью инструкций выбранного языка программирования. Многие рассматривают этот этап как главный в программировании, хотя в действительности он является относительно второстепенным;

5) произвести отладку и проверку (тестирование) программы, цель которых - устранение логических ошибок. Основным инструментом здесь являются отладчики, которые позволяют проверить программу в некоторых специальных режимах ее выполнения (пошаговый режим.



1 2 [ 3 ] 4 5 6 ... 159

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика