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

4.1.Нисходящая разработка

При нисходящей разработке проектирование прикладной программной системы и программирование ведутся сверху вниз. Программы легче проектировать и реализовать, если их разделять на модули. Тогда программа, решающая большую задачу, состоит из одного или нескольких модулей, связанныхсхемой иерархии (см. рис.10). Так как модули разрабатываются сверху вниз, то вместо программ нижнего уровня должны использоватьсязаглушки. Программная заглушка требуется только для того, чтобы позволять программе верхнего уровня быть выполненной и проверенной. Изготовление заглушки несложная работа. Заглушка может содержать только входной и выходной оператор и сообщение о своем выполнении. Полезно, но не обязательно, программировать в заглушке подготовку данных, нужных модулям верхнего уровня. При использовании метода нисходящей разработки детальное проектирование программы, проверку и документирование можно делать параллельно. Но, что же такое «модуль»?

Модуль это последовательность логически связанных фрагментов, оформленных как отдельная часть программы.Модуль – это элемент программы, выполняющий самостоятельную задачу. Модульное программирование появилось еще в начале 60-х годов. Оно характеризуется следующими преимуществами:

  • Большую программу могут писать одновременно несколько исполнителей – это позволяет быстрее выполнить проект.

  • Можно создавать библиотеки наиболее употребительных подпрограмм.

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

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

  • Облегчается более полное тестирование.

  • Проще проектирование и последующее тестирование программы.

Наряду с этими преимуществами имеется следующие недостатки модульного программирования:

  • Может увеличиться время выполнения программы.

  • Может возрасти требуемый размер оперативной памяти.

  • Может увеличиться время компиляции и загрузки.

  • Проблемы организации межмодульного взаимодействия могут оказаться довольно сложными.

Однако для современных компиляторов и операционных систем эти недостатки невелики и обычно окупаются сокращением стоимости разработки и сопровождения.

Чтобы лучше понять, что такое модуль, отметим некоторые его желательные свойства:

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

  • На внутренность модуля можно ссылаться с помощью имени, называемого именем модуля.

  • Модуль должен возвращать управление тому, кто его вызвал.

  • Модуль может обращаться к другим модулям.

  • Модуль должен иметь один вход и один выход. Единственность входа и выхода гарантирует замкнутость модуля и упрощает его сопровождение.

  • Модуль сравнительно невелик. Обычно в них менее 200 строк или даже менее одной или двух страниц текста на входном языке.

  • Модуль не должен сохранять историю своих вызовов для управления своим функционированием.

  • Модуль реализует единственную функцию (задачу системы). Эта функция – вполне определенное преобразование исходных данных в результат, осуществляемое в процессе исполнения модуля.Другими словами, модуль – это элемент программы, выполняющий самостоятельную задачу. Эта задача может быть выражена одной фразой: «обратить матрицу», «напечатать отчет», «загрузить файл» и т. п. Таким образом, при проектировании программы нужно сначала определить необходимый набор функций (задач программной системы), а затем приступить к разработке модулей программы.

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

  • Количество предложений в тексте,

  • Размер требуемой оперативной памяти,

  • Число ветвлений в программе,

  • Число возможных путей в программе,

Но, что же означает схема иерархии, показанная на рис.10? Эта схема не показывает потока данных, порядка их выполнения или моментов активизации каждого модуля. Расположение модулей на заданном уровне не определяет порядок их выполнения. Эта схема показывает подчиненность модулей. Каждый модуль активизируется вышестоящим модулем, связанным с ним линией. Закончив свою работу, модуль возвращает управление вызвавшему его модулю. Таким образом, вызываемый модуль подчинен вышестоящему модулю и подчиняет себе нижестоящие модули. Если провести аналогию этой схемы со схемой организации управления какой либо фирмой, то можно сказать, что модуль получает «приказы» от «хозяина» и возвращает ему результат своей работы. Принятие основных решений в схеме иерархии выносится на максимально высокий уровень. Обычно основные решения принимает головной модуль, находящийся на первом уровне. Этот головной модуль служит кратким «конспектом» всей программы.

Очевидно, что при построении схемы иерархии возможны различные варианты. А как построить наилучшую схему? Эта проблема решается пока на основании опыта и интуиции разработчика, однако можно дать некоторые рекомендации, реализация которых приближает схему к оптимальной:

  • Аргументы модулей (функций Си) должны передаваться по возможности явно, а не через общую память.

  • Чрезмерное количество передаваемых модулю аргументов (данных) может само по себе указывать на необходимость разделения функции. Если аргументов много, нужно разделить модуль так, чтобы функция каждой части упростилась.

  • Желательно, чтобы число общих данных у модулей было как можно меньше.

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

Соседние файлы в папке attachments_05-09-2012_18-55-54