Библиотечный модуль пользователя.
Приложения очень часто используют уже ранее созданные автономные программные блоки (процедуры и функции), созданные или самим программистом, или другими авторами. С целью упорядочиния их расположения при программировании используется модульный принцип построения программы, когда основная программа обращается к процедурам и функциям, которые могут находиться не только в самой основной программе (это не очень приветствуется), но и в автономных отдельно существующих макропрограммных единицах – модулях.
Каждый модуль представлен как минимум одним файлом, носящим имя модуля, – файлом *.pas, в котором хранится создаваемый программистом исходный код. Если модуль является еще и описателем какой-либо формы (модуль формы), то для него автоматически создается еще и файл *.dfm, в котором записаны значения параметров самой формы и компонентов на ней расположенных (кнопки, окна, списки и др.). После компилляции модуля образуется еще один файл - *.dcu, который содержит необходимый для выполнения программы код и именно такой файл требуется для подключения к основной программе, однако такой файл уже непригоден для чтения и редактирования программистом. Так основные стандартные модули со стандартными процедурами и функциями Delphi представлены именно в виде таких файлов. Например, описания компонентов кнопок хранятся в стандартном файле модуля buttons.dcu, который размещен в папке LIB.
Программист может использовать как уже существующие модули (с находящимися в них данными, процедурами и функциями), так и создавать свои собственные модули и помещать в них требуемые процедуры и функции.
Для создания нового модуля (без формы) следует выбрать опцию меню File\New и в открывшемся окне выбрать вариант Unit.
Для сохранения кода модуля в виде файла следует выбрать опцию меню File\Save и в открывшемся окне задать имя файла модуля, которое лучше сделать таким же, как и имя самого модуля.
Для подключения модуля к любой другой программной единице (в том числе и другому модулю) следует в разделе uses указать имя требуемого модуля.
Рассмотрим принцип построения модуля.
Заголовок модуля содержит ключевое слово Unit и имя модуля, совпадающее с именем файла модуля. Каждый модуль может состоять из трех секций: секции Интерфейса (Interface), секции Реализации (Implementation) и необязательной секции Инициализации.
Секция Интерфейса (Interface) предназначена для объявления глобальных данных (типов, констант, переменных), а также процедур и функций, которые будут доступны (видимы) для тех модулей, из которых происходит вызов нашего модуля. Процедуры и функции в этой секции только объявляются (со всеми своими параметрами), но не раскрывается их содержимое (это будет в следующей секции).
Секция Реализации (Implementation) позволяет подключить другие требующиеся для выполнения процедур и функций модули. В этой секции описываются данные (типы, константы и переменные), предназначенные для использования только в рамках данного модуля и недоступные (невидимые) для вызывающих модулей (локальные данные), а также приводится текст процедур и функций, объявленных в секции Интерфейса.
Секция Инициализациине имеет своего ключевого слова и начинается со слова Begin, а завершается словом End. Код, записанный между этими программными скобками, предназначен для исполнения при первом же вызове (из какого-либо модуля). Если необходимости в этом нет, то данная секция может отсутствовать.
Приведем пример структуры библиотечного модуля пользователя:
Unit <имя модуля>;
Interface {Секция Интерфейса}
Procedure Integral1(a,b : real; var c : real);
Procedure Summa(d,e : real; var f : real);
Function Integral2(ff,dd : real) : real;
Implementation {Секция Реализации}
Uses <имена подключаемых модулей>
Procedure Integral1(a,b : real; var c : real);
Begin
Текст процедуры
End;
Procedure Summa(d,e : real; var f : real);
Begin
Текст процедуры
End;
Function Integral2(ff,dd : real) : real;
Begin
Текст функции
End;
Begin {Секция Инициализации}
Текст секции Инициализации
End.
Процедуры и функции. Стандартные и пользовательские процедуры и функции.
Общие положения.
В практике программирования часто встречается ситуация, когда одну и ту же группу операторов, реализующих определенную цель, требуется повторить без изменении в нескольких других местах программы. Чтобы избавить программиста от столь нерационального занятия, была предложена концепция подпрограмм.
Подпрограммой называется именованная логически законченная группа операторов языка, которую можно вызвать для выполнения по имени любое количество раз из различных мест программы. В языке Delphi для организации подпрограмм используются процедуры и функции.
Процедура - это независимая поименованная часть программы, предназначенная для выполнения определенных действии. Она состоит из заголовка и тела. По структуре ее можно рассматривать как программу в миниатюре. После однократного описания процедуру можно вызвать по имени из последующих частей программы. Когда процедура выполнит свою задачу, программа продолжится с оператора, следующего непосредственно за оператором вызова процедуры. Использование имени процедуры в программе называется оператором процедуры или вызовом процедуры. Имя процедуры не может находиться в выражении в качестве операнда.
Функция аналогична процедуре, но имеются два отличия: функция передает в точку вызова скалярное значение (результат своей работы); имя функции может входить в выражение как операнд. Функция, если она встречается в выражении, называется указателем функции или обращением к функции. Все процедуры и функции языка Delphi подразделяются на две группы: встроенные и определенные пользователем.
Встроенные (стандартные) процедуры и функции являются частью языка и могут вызываться по имени без предварительного определения в разделе описаний блока.
Процедуры и функции пользователя организовываются самим программистом в соответствии с синтаксисом языка и представляют собой локальный блок. Предварительное (перед использованием) описание процедур и функций пользователя обязательно.