Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TEOPuR_u_TEXHOJIOruu_nPOrAMMuPOBAHuR / Методические_указания_к_курсовому_проектированию.doc
Скачиваний:
128
Добавлен:
30.03.2015
Размер:
669.7 Кб
Скачать

6.3. Модульное программирование

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

Насколько возможно, все модули:

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

  2. должны иметь небольшие размеры (не более 100 операторов языка программирования высокого уровня);

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

  4. должны иметь четко выраженное функциональное назначение.

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

6.4. Драйвера и заглушки

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

Для решения указанной проблемы предложен метод «драйверов» и «заглушек». Суть его состоит в следующем.

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

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

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

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

  1. Разработка алгоритмов решения задачи

7.1. Описание алгоритмов

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

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

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

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

Примечание. Каждый алгоритм должен быть представлен:

  • таблицей и (или) списком используемых в нем глобальных переменных;

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

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

Рис. 10. Алгоритм программного продукта

Описание каждого алгоритма должно включать:

  • функциональное назначение алгоритма;

  • входные и выходные данные (результаты выполнения);

  • список формальных параметров и их назначение;

  • пример вызова модуля или подпрограммы;

  • используемые технические средства;

  • ссылку на таблицу переменных алгоритма;

  • ссылку на рисунок со схемой алгоритма;

  • описание процесса обработки данных в соответствии со схемой;

  • если имеется приложение с полным текстом программы, то ссылку на соответствующую страницу приложения.

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

Тексты описания алгоритмов должны быть структурными, предложения короткими. Описание алгоритма должно отражать суть процесса обработки.

Рис. 11. Диаграмма классов

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

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