Модули. Модульное программирование
Что такое модуль.
Модуль (блок, UNIT) -
самостоятельная программная единица, ресурсы которой могут быть использованы
другими программами.
Очень краткая
историческая справка.
Структурное
программирование не предполагает наличия модулей. Впервые понятие модуль
(UNIT-концепция) было введено Н. Виртом для языка более высокого уровня
Модула-2. Позднее этот термин и способ построения программ были реализованы
и в других языках. В Turbo Pascal модульное программирование используется с
4-й версии.
Использование модулей
считается прогрессивным подходом в программировании.
Структура модуля
Вы уже неоднократно
сталкивались с понятием модуль (или библиотека, что одно и тоже), когда
использовали в своих программах модули GRAPH.TPU и CRT.TPU. Это стандартные
модули, внутренняя организация которых нам недоступна, но доступны для
использования процедуры, функции и другие элементы программирования входящие
в данные библиотеки. Недоступность внутренней организации модуля является
одной из отличительных особеностей модулей.
Модуль состоит из следующих частей:
1. Заголовок модуля.
2. Интерфейсная часть. {описания видимых объектов}
3. Реализационная часть. {описания скрытых объектов}
4. Инициализационная часть.
Заголовок модуля
Заголовок модуля состоит из
зарезервированного слова UNIT после которого записывается имя модуля. Имя
модуля, это обычный идентификатор, к которому добавляется ещё одно
требование: совпадение имени модуля с именем файла в котором он хранится.
Поэтому имя модуля не может состоять более чем из восьми символов
(ограничение MS-DOS).
Так как модуль представляет
собой самостоятельную программную единицу, то и компилируется он тоже
самостоятельно (отдельно). Правда в результате компиляции мы получаем файл с
расширением не EXE, как обычно, а TPU. Например BAZA.TPU. Как вы уже знаете,
подключение модуля к программе, осуществляется строкой USES BAZA (или CRT,
например) после заголовка программы. То есть идентификация модуля в
программе осуществляется по его имени. Поэтому заголовок модуля обязателен.
Интерфейсная часть
В интерфейсной части
описываются (декларируются) все константы, типы данных и переменных,
процедуры и функции, доступные в этом модуле для использования внешними
программами.
Интерфейсная часть
начинается зарезервированным словом INTERFACE.
Модуль, как и любая
самостоятельная программа, может использовать ресурсы других модулей. Они
подключаются как всегда с помощью слова uses сразу после служебного слова
INTERFACE. Если другие модули не используются, то эта строка отсутствует.
После этого, как и в любой самостоятельной программе, могут быть:
- раздел объявления констант;
- раздел объявления типов;
- раздел объявления переменных;
- раздел объявления процедур и функций.
В разделе объявления
процедур и функций указываются лишь заголовки подпрограмм. Сами подпрограммы
приводятся в реализационной части.
Реализационная часть
Реализационная
(исполнительная) часть включает все подпрограммы модуля. Она может также
содержать локальные метки, константы, типы и переменные.
Реализационная часть
начинается служебным словом IMPLEMENTATION. Затем после слова uses могут
быть указаны имена модулей, которые используются подпрограммами
реализационной части. Если необходимый модуль подключён в интерфейсной
части, то здесь его подключать не нужно. Далее могут быть:
- раздел объявления меток;
- раздел объявления локальных констант;
- раздел объявления локальных типов;
- раздел объявления локальных переменных;
- раздел объявления процедур и функций.
При описании подпрограмм
допустимо использовать сокращённые заголовки (без указания параметров
подпрограммы).
Определённые в
реализационной части типы данных и структуры данных недоступны извне.
Инициализационная часть
В некоторых случаях перед
обращением к модулю следует провести так называемую инициализацию модуля.
Это могут быть различные действия, такие как: установить связь с файлом;
очистить экран и т.д. Подобные действия выполняются в инициализационной
части, которая представляет собой составной оператор, содержащий вызовы
необходимых процедур. Например
begin
Assign(f,'data.dat');
end.
Инициализационная часть
выполняется один раз, во время старта программы. Если инициализация модуля
не нужна, то в разделе инициализации помещается лишь end.
Пример
program ex_35_1;
uses Crt, Arf;
var a,b: real;
ch: char;
begin
Info;
Vvod(a,b);
repeat
ch := readkey;
if ch=#0 then begin
ch:=readkey;
gotoxy(1,10);
case ch of
#59: writeln('Сумма
',sum(a,b));
#60: writeln('Разность ',raz(a,b));
#61: writeln('Частное ',chs(a,b));
#62: writeln('Произведение ',pro(a,b));
#63: vvod(a,b);
end;
end;
until ch=#68;
end.
Unit Arf;
Interface
Procedure Info;
Procedure Vvod(var x,y: real);
Function Sum(x,y: real): real;
Function Raz(x,y: real): real;
Function Pro(x,y: real): real;
Function Chs(x,y: real): real;
Implementation
uses Crt;
Procedure Info;
Begin
Writeln('F1 - сумма');
Writeln('F2 - разность');
Writeln('F3 - частное');
Writeln('F4 - произведение');
Writeln('F5 - ввод новых чисел');
Writeln('F10 Выход');
End;
Procedure Vvod;
Begin
GotoXY(1,8);
Write('Введите первое число '); Readln(x);
Write('Введите второе число '); Readln(y);
End;
Function Sum;
begin Sum:=x+y; end;
Function Raz;
begin Raz:=x-y; end;
Function Chs;
begin Chs:=x/y; end;
Function Pro;
begin Pro:=x*y; end;
Begin
ClrScr;
End.
Контрольные вопросы.
- Что такое модуль?
- Назовите основные составные части модулей.
- Опишите заголовок модуля.
- Как оформляется интерфейсная часть.
- Как оформляется реализационная часть.
- Как оформляется инициализационная часть.
Задания для
самостоятельного выполнения.
- Нарисовать на экране шаблон первых трёх цифр
вашего индекса, так как они выглядят на конверте. Рисование каждой цифры
оформить в виде отдельной процедуры.
- Даны действительные a, b, c. Получить
max(a+c,a+b) + min(a+b,b+c)
Получить -----------------------------
1 + max(a+bc,4.15)
- Даны действительные числа s,t.
Получить g(1.2,-s) + g(t,s) - g(2s-1,st)
a^2 + b^2
где g(a,b) = ----------------------
a^2 + 3ab + 3b^2 + 4
- Даны действительные s,t.
Получить f(t,-2s,1.7) + f(2.2,t,s-t),
2a - b - sin(c)
где f(a,b,c) = ---------------
5 + |c|
- Дан линейный массив из 10 целых чисел.
Пересортировать массив по закону: первый меняется с последним, второй с
предпоследним и т.д.
- Дан линейный массив из 25 целых чисел.
Определить сумму положительных и сумму отрицательных элементов данного
массива.
- Составить программу изображения на экране
правильного заполненного многоугольника. Цвет, стиль заполнения и
количество углов многоугольника вводится с клавиатуры.
- Составить программу, которая выводит следующее
сообщение о своих возможностях
{ F1 - вычисление длины окружности;
F2 - вычисление площади круга;
F3 - вычисление объёма шара;
F4 - ввод нового радиуса
F5 - выход }
НАЗАД
ДАЛЕЕ
|