Главная/Раздел  5

 

 

Главная

 

 Раздел 1

 

Раздел 2

 

Раздел 3

 

Раздел 4

 

Раздел 5

 

 

 

 

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

Что такое модуль.

Модуль (блок, 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.

Контрольные вопросы.

  1. Что такое модуль?
  2. Назовите основные составные части модулей.
  3. Опишите заголовок модуля.
  4. Как оформляется интерфейсная часть.
  5. Как оформляется реализационная часть.
  6. Как оформляется инициализационная часть.

Задания для самостоятельного выполнения.

  1. Нарисовать на экране шаблон первых трёх цифр вашего индекса, так как они выглядят на конверте. Рисование каждой цифры оформить в виде отдельной процедуры.
  2. Даны действительные a, b, c. Получить
                         max(a+c,a+b) + min(a+b,b+c)
         Получить   -----------------------------
                             1 + max(a+bc,4.15)
  3. Даны действительные числа 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
  4. Даны действительные s,t.
         Получить f(t,-2s,1.7) + f(2.2,t,s-t),
                               2a - b - sin(c)
         где   f(a,b,c) = ---------------
                                    5 + |c|
  5. Дан линейный массив из 10 целых чисел. Пересортировать массив по закону: первый меняется с последним, второй с предпоследним и т.д.
  6. Дан линейный массив из 25 целых чисел. Определить сумму положительных и сумму отрицательных элементов данного массива.
  7. Составить программу изображения на экране правильного заполненного многоугольника. Цвет, стиль заполнения и количество углов многоугольника вводится с клавиатуры.
  8. Составить программу, которая выводит следующее сообщение о своих возможностях
       { F1 - вычисление длины окружности;
         F2 - вычисление площади круга;
         F3 - вычисление объёма шара;
         F4 - ввод нового радиуса
         F5 - выход } 

НАЗАД                    ДАЛЕЕ

 

 

 

 

 

 

 

 

 

 :::

 

 :::

 

 

 

 

 

 

 

Сайт создан в системе uCoz