Модули
Модули предназначены для поддержки принципов модульного программирования при разработке программ, основным из которых является принцип скрытия информации. Согласно этому, принципу взаимовлияние логически независимых фрагментов программы должно быть сведено к минимуму. Принцип скрытия информации, поддерживаемый модулями, позволяет создавать надежно работающие и легко модифицируемые программы. В языке Turbo Pascal модули используются преимущественно для создания библиотек процедур, функций и объектов, которые затем могут использоваться в программах, разрабатываемых пользователем.
Модуль (UNIT) в TURBO PASCAL - это особым образом оформленная библиотека подпрограмм. Модуль в отличие от программы не может быть запущен на выполнение самостоятельно, он может только участвовать в построении программ и других модулей.
Модули позволяют создавать личные библиотеки процедур и функций и строить программы практически любого размера.
Модуль в TURBO PASCAL представляет собой отдельно хранимую и независимо компилируемую программную единицу.
В общем случае модуль - это совокупность программных ресурсов, предназначенных для использования другими программами. Под программными ресурсами понимаются любые элементы языка TURBO PASCAL: константы, типы, переменные, подпрограммы. Модуль сам по себе не является выполняемой программой, его элементы используются другими программными единицами.
Все программные элементы модуля можно разбить на две части:
- программные элементы, предназначенные для использования другими программами или модулями, такие элементы называют видимыми вне модуля;
- программные элементы, необходимые только для работы самого модуля, их называют невидимыми или скрытыми.
В соответствии с этим модуль, кроме заголовка, содержит две основные части, называемые интерфейсом и реализацией.
При использовании модулей необходимо помнить следующие правила:
• не допускается одновременное использование модулей с одинаковыми именами;
• идентификатор модуля, указанный в заголовке (unit), должен; совпадать с именами файлов, содержащих исходный (.PAS) и объектный (.TPU, .ТРР, .TPW) код;
• если идентификатор модуля длиннее восьми символов, то он должен: совпадать с именами файлов по первым восьми символам.
Синтаксис модуля имеет следующий вид:
unit Идентификатор Модуля;
Интерфейсный раздел.
interface
В этом разделе описывается взаимодействие данного модуля с другими пользовательскими и стандартными модулями, а также с главной программой. Другими словами - взаимодействие модуля с "внешним миром".
{ Список импорта интерфейсного раздела. }
uses
{ В этом списке через запятые перечисляются идентификаторы модулей, информация интерфейсных частей которых должна быть доступна в данном модуле. Здесь целесообразно описывать идентификаторы только теле модулей, информация из которых используется в описаниях раздела interface данного модуля. }
const { Список экспорта состоит из подрав- }
type { делов описания констант, типов, }
var { переменных, заголоакоз процедур и }
procedure функций, которые определены ш дан- }
function { ном модуле, но исполььовать кото- }
{ рые разрешено во всех других моду- }
{ лях к программах, включакщих имя }
{ данного модуля з оаоай строже uses.}
{ Для процедур и Функций здесь опчл- }
{ сываются только эаголоаки, но с }
{ обязательным полным описанием фор- }
{ мальных параметров. }
{ Раздел реализации . }
inpilementation
{ В этом разделе указывается реализацион- }
Ч ная (личная) часть описаний данного моду- }
{ ля, которая недоступна для других модулей }
{ и программ. Другими словами — "внутренняя }
{ кухня" модуля. }
{ Список импорта раздела реализации. } uses
{ В этом списке через запятые перечисляются } { идентификаторы модулей, информация интер- } { фейсных частей которых должна быть дос- } { тупна в данном модуле. }
{ Здесь целесообразно описывать идентифика- } { торы всех необходимых модулей, информа-} { ция из которых не используется в описани- } { ях раздела interface данного модуля и об } { использовании которых не должен знать ни} { один другой модуль. }
{ Подразделы внутренних для модуля описаний.}
label { В этих подразделах описываются мет-}
const { ки, константы, типы, переменные, }
type { процедуры и функции,' которые описы-}
var { вают алгоритмические действия, вы- }
procedure! полняемые данным модулем, и которые}
function { являются "личной собственностью" }
{ исключительно только данного моду- }
( ля. Эти описания недоступны ни од- }
{ ному другому модулю. Заголовки }
{ процедур и функций в этом подраз- }
{ деле допускается указывать без }
{ списка формальных параметров. Если }
{ заголовки указаны все же с пара- }
{ метрами, то список формальных па- }
{ раметров должен быть идентичен та-}
{ кому же списку для соответствующей }
^ процедуры (функции) в разделе }
{ interface }
{ Раздел инициализации . }
begin
{ В этом разделе указываются операторы на- } { чальных установок, необходимых для запуска} { корректной работы модуля. }
{ Операторы разделов инициализации модулей, } { используемых в программе, выполняются при } { начальном запуске программы в том же по- } { рядке, в каком идентификаторы модулей } { описаны в предложениях uses. }
{ Если операторы инициализации не требуются, } { то ключевое слово begin может быть опущено}
end.
Использование в модулях процедур и функций имеет свои особенности. Заголовок подпрограммы содержит все сведения, необходимые для ее вызова: имя, перечень и тип параметров, тип результата для функций, эта информация должна быть доступна для других программ и модулей. С другой стороны, текст подпрограммы, реализующий ее алгоритм, другими программами и модулями не может быть использован. Поэтому заголовок процедур и функций помещают в интерфейсную часть модуля, а текст - в часть реализации. Интерфейсная часть модуля содержит только видимые (доступные для других программ и модулей) заголовки процедур и функций (без служебного слова forward). Полный текст процедуры или функции помещают в часть реализации, причем заголовок может не содержать список формальных параметров. Исходный текст модуля должен быть откомпилирован с помощью директивы Make подменю Compile и записан на диск. Результатом компиляции модуля является файл с расширением *.TPU (Turbo Pascal Unit). Основное имя модуля берется из заголовка модуля.
Для подключения модуля к программе необходимо указать его имя в разделе описания модулей, например: uses CRT, Graph;
Если в модуле имеется раздел инициализации, то операторы из этого раздела будут выполнены перед началом выполнения программы, в которой используется этот модуль.