- •Технология программирования (pascal)
- •IV. Парадигмы программирования
- •4. Подпрограммы
- •4.7. Переменные, обрабатываемые при вызове подпрограмм:
- •Прямая рекурсия на примере вычисления факториала
- •4. Этапы выполнения рекурсивной функции вычисления факториала.
- •5. Основные понятия парадигмы модульного программирования
- •5.1. Понятие модуля.
- •5.2. Некоторые стандартные библиотеки.
- •6. Структура модуля
- •6.1. Заголовок модуля.
- •6.2. Интерфейсная часть.
- •6.3. Часть реализации.
- •6.4. Часть инициализации.
- •6.5. Пример реализации модуля.
- •1. Постановка задачи.
- •2. Математическая модель задачи.
5. Основные понятия парадигмы модульного программирования
При проектировании программ больших размеров, особенно, если в разработке программы участвуют несколько программистов, однозначно применяется технология модульного программирования, которая предполагает выделение групп подпрограмм в отдельные библиотеки – модули, компилируемые отдельно от основной программы. Модули также представляют инструмент для создания библиотек прикладных программ.
5.1. Понятие модуля.
Модуль – это автономно компилируемая программная единица, включающая в себя раздел объявлений программных ресурсов, предназначенных для использования другими модулями и программами (типов, констант, переменных, подпрограмм – процедур и функций), раздел описаний объявленных подпрограмм и локальных объектов модуля и инициализирующую часть, операторы которой исполняются перед началом работы программы, использующей этот модуль, для осуществления необходимой инициализации.
Модули, в отличие от программ, не могут быть запущены на выполнение самостоятельно; позволяют создавать личные библиотеки подпрограмм и программы большого размера.
Все программные элементы модуля можно разбить на две части:
-
программные элементы, называемые видимыми вне модуля и предназначенные для использования другими программами или модулями;
-
программные элементы, называемые невидимыми, или скрытыми и необходимые только для работы самого модуля.
В соответствии с этим, модуль, кроме заголовка, содержит две основные части, называемые интерфейсом и реализацией, и необязательную часть, называемую инициализацией, которая составляет тело модуля.
Для использования библиотеки (модуля) после заголовка программы и глобальных директив компилятора задается специальное предложение
Uses <список_имен_модулей>;
Исходный текст модуля располагается в файле с расширением .pas. Транслируется модуль отдельно от программы и помещается после трансляции в файл с расширением .tpu, а затем на этапе компоновки (сборки) модуль подключается к оттранслированной программе.
5.2. Некоторые стандартные библиотеки.
Кроме собственных библиотек пользователя существуют стандартные библиотеки языка PASCAL такие, как
- System (ввиду исключительной важности подключается автоматически к любой программе) содержит основные подпрограммы;
- Dos обеспечивает интерфейс с программами операционной системы;
- Crt содержит средства управления монитором в текстовом режиме;
- Graph содержит средства управления монитором в графическом режиме;
- Printer обеспечивает связь с печатающим устройством;
- Overlay содержит средства для создания и управления перекрывающимися (оверлейными) программами.
6. Структура модуля
6.1. Заголовок модуля.
Заголовок модуля состоит из зарезервированного слова Unit и следующего за ним имени модуля:
Unit <имя_модуля>;
Имя модуля должно совпадать с именем файла, в котором хранится текст модуля:
<имя_модуля>.pas
Как уже было сказано, оттранслированный модуль хранится в файле
<имя_модуля>.tpu
6.2. Интерфейсная часть.
В интерфейсной части, начинающейся с зарезервированного слова Interface, содержатся объявления всех глобальных объектов модуля (типов, констант, переменных и подпрограмм), доступных программам и модулям, к которым подключена данная библиотека.
Interface
<объявления>
За словом Interface может следовать предложение Uses. Что касается подпрограмм, в интерфейсную часть модуля помещают только их заголовки. Например,
Unit Modul;
Interface
uses crt;
const n=100;
type
Vector=array[1..n] of char;
procedure input(R:integer; Name:char; var s:Vector);
procedure output(R:integer; Name:char; h:Vector); …