Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по технологии программирования / Качество программного продукта.doc
Скачиваний:
84
Добавлен:
02.05.2014
Размер:
68.1 Кб
Скачать

Модульный стиль программирования

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

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

Однако на практике при реализации больших проектов процедуры и функции оказываются недостаточно удобным средством по следующим причинам:

• большой объем текста программы затрудняет ее понимание;

• всякий раз после изменения программы ее необходимо перекомпилировать, затрачивая определенное время;

• программа задачи и все, описанные в ней процедуры и функции, хоть и занимают отдельные сегменты данных в памяти не более 64 Кбайт, но этого объема иногда бывает недостаточно.

Поэтому структурные элементы подзадач, полученные в процессе декомпозиции исходной задачи, часто реализуются в виде программных модулей, расширяющих понятие подпрограмм. Программа исходной задачи теперь будет состоять из главного модуля и дополнительных модулей (или просто модулей). Главный модуль - это основная программа, использующая модули. Модуль - это совокупность операторов, описывающих независимые функции обработки программы исходной задачи. Модуль разрабатывается и может быть скомпилирован отдельно от главного модуля. Сам модуль может иметь средства связи с другими модулями, а при выполнении главного модуля компилятором для каждого модуля выделяется в памяти отдельный сегмент данных.

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

Модули в зависимости от способа подключения к главному модулю делятся на исходные и загрузочные. Загрузочные модули в свою очередь подразделяются на модули, полученные после этапа трансляции и компиляции исходного текста программы. Откомпилированные модули делятся на статические, которым выделяется в памяти сегмент данных, и динамические, которым память выделяется динамически лишь на этапе выполнения программы. Динамические модули еще называют динамически связывающими библиотеками (DLL - Dynamic Link Library).

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

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

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

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

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