Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lec04-АТП2011-12.doc
Скачиваний:
0
Добавлен:
11.07.2019
Размер:
72.7 Кб
Скачать
  1. Лекция №4

    Тема:

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

    ПЛАН

    4 Лекция №4

    4.1 Основные понятия

    4.2 Структура модуля

    4.3 Компиляция модулей и модульных программ

    4.4 Стандартные модули

    Время:

    2 ч.

    Литература:

    1. Основные понятия

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

Достоинства модульного программирования:

  1. модули могут создаваться отлаживаться и компилироваться независимо друг от друга;

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

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

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

Принципы модульного программирования:

  1. Функциональная декомпозиция – разбиение большой задачи на ряд более мелких самостоятельных подзадач (эти задачи затем реализуются в виде модулей).

  2. Независимость – взаимное влияние полученных подзадач должно быть минимальным; ни один модуль не должен зависеть от глобальных переменных.

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

  • назначение модуля;

  • сведения о разработчике (для защиты авторских прав);

  • особенности функционирования;

  • краткое описание применения его процедур и функций.

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

USES список модулей;

Пример

USES CRT, GRAPH, STRINGS;

означает подключение модулей CRT, GRAPH и STRINGS.

    1. Структура модуля

Модуль имеет следующую структуру:

Unit имя

заголовок модуля

INTERFACE

интерфейсный раздел

IMPLEMENTATION

раздел реализации

Begin…END.

раздел инициализации

Примечание – Любой из разделов модуля может быть пустым.

Заголовок модуля состоит из слова Unit и имени модуля. Имя модуля должно обязательно совпадать с именем файла, в котором находится его исходный текст.

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

Структура интерфейсного раздела имеет вид:

Uses список модулей

указание используемых модулей

Const

описание констант

Type

описание типов

Var

описание переменных

Procedure…

Function…

описание заголовков процедур и функций

Примечание – Если в интерфейсном разделе используется объявление Uses, то оно должно следовать непосредственно за словом INTERFACE.

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

Структура раздела реализации имеет вид:

Uses список модулей

указание используемых модулей

Label

описание меток

Const

описание локальных констант

Type

описание локальных типов

Var

описание локальных переменных

Procedure…

Function…

описание процедур и функций (как глобальных, так и локальных)

Примечания

1 Если в разделе реализации используется объявление Uses, то оно должно следовать непосредственно за словом IMPLEMENTATION.

2 Все локальные компоненты (типы, константы, переменные, процедуры, функции), будут доступны только в пределах раздела реализации.

Раздел инициализации содержит операторы, образующие некоторый фрагмент программы, заключенный в операторные скобки BEGIN…END. Эти операторы выполняются до передачи управления основной программе и обычно используются для подготовительных действий (открытие нужных файлов, присваивание начальных значений переменным). Раздел инициализации может отсутствовать, в этом случае его заменяют словом END с точкой. Для оверлейных модулей отсутствие раздела инициализации является обязательным.

Пример – Модуль, содержащий функцию вычисления десятичного логарифма:

Unit Logarifm;

INTERFACE

Function Lg(x:Real):Real;

IMPLEMENTATION

Const

Ln10=2.30259; {Натуральный логарифм 10}

Function Lg(x:Real):Real;

Begin

Lg:=Ln(x)/Ln10;

End;

END.

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

Program TestLogarifm;

Uses Logarifm; {Подключение модуля Logarifm}

Var Z:Real;

BEGIN

Z:=12+Lg(456); {Вычисление выражения с функцией Lg}

WriteLn('Z=',Z:8:4); {Вывод результата}

ReadLn; {Останов}

END.

Если имя какого-либо идентификатора (константы, переменной, подпрограммы), описанного в основной программе совпадает с именем идентификатора, описанного в интерфейсной части модуля, то для доступа к идентификатору, описанному в модуле используется полное обращение вида: имя модуля.идентификатор. Например, вызов System.Copy означает вызов процедуры Copy из модуля System.

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

  1. Нельзя одновременно использовать несколько модулей с одинаковыми именами;

  2. Модуль может только компилироваться, запустить его нельзя. При попытке выполнить команду меню RunRun появится сообщение Cannot run a unit (нельзя запустить модуль). Для проверки работоспособности процедур и функций модуля нужно создать программу, использующую эти процедуры и функции.

  3. Если при компиляции модуль не обнаружен в текущем каталоге, то компилятор выполняет поиск заданного модуля в каталогах, заданных параметром OptionsDirectories…Unit directories.

  4. Пусть имеется программа, в которой используется модуль EFFECTS.PAS. При трассировке этой программы с заходом в процедуры и функции (клавиша  F7  или команда меню RunTrace into), откроется новое окно, куда загрузится исходный текст модуля EFFECTS.PAS и будет выполнен в пошаговом режиме его раздел инициализации (если он есть). После завершения раздела инициализации произойдет переключение на окно с исходным текстом программы. Затем при обращении к процедурам и функциям модуля EFFECTS.PAS будет происходить переключение на окно с текстом модуля, и выполняться пошаговое выполнение вызванной процедуры или функции. После завершения их выполнения снова произойдет переключение на окно с исходным текстом программы. Если исходный текст модуля EFFECTS.PAS отсутствует (есть только файл EFFECTS.TPU), то такой режим трассировки будет невозможен.

  5. Если используется трассировка без захода в процедуры и функции (клавиша  F8  или команда меню RunStep over), то окно с исходным текстом модуля открываться не будет.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]