Многомодульное программирование - это разбиение общей задачи на небольшие части, каждая из которых может быть решена единым блоком и сосредоточена (в общем случае) в одном файле, называемом модулем. В настоящее время из всех принципов разбиения программы на модули, основным является принцип сокрытия информации. На его основе разрабатывается и распространяются библиотеки программного обеспечения, защищенные авторским правом.
Как и программа, файл текста модуля имеет расширение ".pas". Расширение модуля после компиляции - ".tpu". Все модули, подключаемые к программе, в процессе ее компоновки объединяются друг с другом и с программой в один исполняемый файл с расширением ".exe".
В каждом модуле для внешнего общения имеются процедуры и функции, переменные, константы и типы, к которым можно обращаться как из основной программы, так и из других модулей. При этом не обязательно знать содержимое каждой из процедур, то-есть каким образом она производит некоторые действия. Достаточно знать только входные и выходные параметры и сущность этих действий. Дополнительно, в каждом модуле имеется своя, локальная сфера действий, внутренние процедуры и функции, переменные, константы и типы, которые вне этого модуля невидимы.
Каждый модуль состоит из 3 частей - интерфейсной секции, а также секций реализации и инициализации, которые могут быть пустыми или отсутствовать.
Если модуль содержит в интерфейсной части только переменные, типы и константы, и не содержит процедур и функций, то секция реализации может быть пуста.
Если модуль не требует никаких инициирующих действий, то секция инициализации может отсутствовать.В интерфейсной секции модуля находятся: подключение требуемых модулей (то есть тех, на содержимое которых имеются ссылки в данной секции), разделы объявления переменных, типов, констант, а также заголовков процедур и функций, доступных для других модулей и главной программы. Так как метки могут использоваться только внутри того блока, в котором они определены, то их объявление в интерфейсной секции лишено смысла и запрещено синтаксисом ТП.
Объявление заголовков процедур и функций в интерфейсной секции эквивалентно forward и far объявлениям.
Например:
UNIT MyUnit; {заголовок модуля}
interface {начало интерфейсной секции}
uses Graph; {подключение модуля Graph }
Const DefaultColor=White;{определение константы, значение которой является, в свою очередь, константой из модуля Graph}
Type Point3D=record x,y,z:real end; {определение типа}
var Point1,Point2: Point3D;{объявление переменных}
VarR:Real;
procedure Proc1(x,y:byte);{объявление заголовков процедур и функций}
function Func:boolean;
implementation {завершение интерфейсной секции, начало секции реализации}