Модули


Модули предназначены для поддержки принципов модульного программирования при разработке программ, основным из которых является принцип скрытия информации. Согласно этому, принципу взаимовлияние логически независимых фрагментов программы должно быть сведено к минимуму. Принцип скрытия информации, поддерживаемый модулями, позволяет создавать надежно работающие и легко модифицируемые программы. В языке 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;

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

Последнее изменение: Среда 2 Декабрь 2009, 23:31