Модуль (UNIT) в TURBO PASCAL - это особым образом оформленная библиотека подпрограмм.  Модуль в отличие от программы не может быть запущен на выполнение самостоятельно,  он может  только  участвовать  в построении программ и других модулей.

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

   Модуль в TURBO PASCAL представляет собой отдельно хранимую и независимо компилируемую программную единицу.

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

   Все программные элементы модуля можно разбить на две части:

   - программные элементы,  предназначенные для использования другими программами или модулями,  такие элементы называют видимыми вне модуля;

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

   В соответствии с этим модуль, кроме заголовка, содержит две основные части, называемые интерфейсом и реализацией.

   В общем случае модуль имеет следующую структуру:

 

   unit <имя модуля>;         {заголовок модуля}

 

    interface

     { описание видимых программных элементов модуля }

 

     { описание скрытых программных элементов модуля }

 

    begin

     { операторы инициализации элементов модуля }

    end. 

   В частном случае модуль может не содержать части реализации и части инициализации, тогда структура модуля будет такой:

 

   unit <имя модуля>;         {заголовок модуля}

 

    interface

     { описание видимых программных элементов модуля }

 

    implementation

 

    end.

 

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

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

   Исходный текст модуля должен быть откомпилирован с помощью  директивы Make  подменю Compile и записан на диск.  Результатом компиляции модуля является файл с расширением .TPU (Turbo Pascal Unit). Основное имя модуля берется из заголовка модуля.

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

           uses  CRT, Graph;

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

   Например, пусть имеется модуль, в котором описана переменная К:

   unit M;

    interface

     var K: Integer;

    implementation

   .................

    end.

   Пусть программа, использующая этот модуль, также содержит переменную К: 

   Program P;

    uses M;

    var K: Char;

    begin

   .............

    end. 

   Для того, чтобы в программе P иметь доступ к переменной K из модуля M, необходимо задать составное имя M.K.

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

   Рекурсивное использование модулей запрещено.

   Если в модуле имеется раздел инициализации,  то операторы из этого раздела будут выполнены перед началом выполнения программы, в которой используется этот модуль.