Общая структура модуля
В языке Turbo Pascal модуль (unit) по определению считается отдельной программой. Если подпрограмма является структурным элементом Pascal-программы и не может существовать вне ее, то модуль представляет собой отдельно хранимую и независимо компилируемую единицу. С учетом этого факта можно дополнить рассмотрение общей структуры Pascal-программы следующей синтаксической диаграммой для случая языка Turbo Pascal:
Программа на языке Turbo Pascal
В самом общем виде модуль представляет собой совокупность (коллекцию) программных ресурсов, предназначенных для использования другими модулями и программами. Под ресурсами в данном случае понимаются любые программные объекты языка Turbo Pascal - константы, типы, переменные, подпрограммы. Важно понимать, что модуль сам по себе не является выполняемой программой - его объекты ИСПОЛЬЗУЮТСЯ другими программными единицами.
Все программные ресурсы модуля можно разбить на две части: объекты, прямо предназначенные для использования другими программами или модулями, и объекты рабочего характера. В соответствии с этим модуль, кроме заголовка, имеет две основные части, называемые интерфейсом и реализацией.В интерфейсной части модуля сосредоточены описания объектов, доступных из других программ.
Заголовок модуля составляется из служебного слова unit. Заголовок завершается символом ';' (точка с запятой). Интерфейсная часть начинается со служебного слова interface. Часть реализации начинается служебным словом implementation. Завершает модуль, как и программу, служебное слово end и символ точка.
Раздел инициализации следует после раздела реализации, начинается со служебного слова begin.
Таким образом, общая структура модуля может быть представлена следующей схемой:
Необходимо особо отметить следующие важные моменты, связанные с использованием модулей:
1. Может случиться так, что идентификаторы интерфейсной части используемого модуля частично пересекаются с идентификаторами использующей программы. В этом случае действует следующее правило видимости имен: интерфейсные идентификаторы модуля, указанного первым в uses-списке, образуют самый внешний блок программы; интерфейсные идентификаторы второго модуля образуют блок, вложенный в первый блок, и т.д.
Однако, существует возможность доступа к интерфейсу используемого модуля несмотря на наличие в программе одноименных идентификаторов.