Процедурные типы данных. Программные модули.pptx
- Количество слайдов: 11
Процедурные типы данных. Программные модули
Процедурные типы данных Наряду с уже известными типами данных в языке Delphi введен так называемый процедурный тип, с помощью которого обычные процедуры и функции можно интерпретировать как некоторую разновидность переменных. Основное назначение процедурных типов - дать программисту гибкие средства передачи функций и процедур в качестве фактических параметров обращения к другим процедурам и функциям. Определение процедурного типа состоит из зарезервированного слова procedure или function, за которым следует полное описание параметров (т. е. для объявления процедурного типа используется заголовок процедуры (функции), в котором опускается ее имя). Для функции дополнительно указывается тип результата. type TProc = procedure (X, Y: Integer); TFunc = function (X, Y: Integer): Boolean; Как видно из приведенных примеров, существует два процедурных типа: тип-процедура и тип-функция.
Определив процедурный тип, можно непосредственно перейти к так называемым процедурным переменным. Они объявляются точно так же, как и обычные переменные. var P: TProc; F: TFunc; При вызове переменным процедурных типов присваивают в качестве значений имена соответствующих подпрограмм. После такого присваивания имя переменной становится синонимом имени подпрограммы. При работе с процедурной она не дублирует код подпрограммы, а содержит лишь ее адрес. Если обратиться к такой переменной как к подпрограмме, произойдет выполнение подпрограммы, адрес которой записан в переменной. Передаваемые подпрограммы не могут быть локальными, т. е. процедурами или функциями, объявленными внутри другой подпрограммы.
Пример //описание функции function Pw (X, Y: Double): Double; begin Result : = Exp(Y * Ln(X)); end; //описание процедурного типа type TFunc = function (X, Y: Double): Double; // использование процедурного типа Procedure Tform 1. button 1 click(Sendertobject); var F: TFunc; X: real; begin X: = floatostr(Edit 1. text); F : = Pw; // В переменную F заносится адрес функции Power Edit 2. text: =f(x, 4); // Вызов Power посредством F
Программные модули Кроме программ, структуру которых мы только что рассмотрели, средства языка позволяют создавать модули. В отличие от программы, модуль не может быть автономно запущен на выполнение и содержит элементы, например, переменные и подпрограммы, которые допускается использовать в программе или в других модулях. Для того чтобы можно было использовать средства модуля, его необходимо подключить, указав имя этого модуля в разделе uses. Компилятор распознает модуль по его заголовку и создает в результате своей работы не исполняемый файл (ехе), как это было для приложения, а файл модуля с расширением dcu. Разработав некоторую функцию, программист может использовать ее в другой программе, поместив текст этой функции в раздел implementation. Однако этот способ неудобен, т. к. приходится набирать текст функции заново или копировать его из текста другой программы. Delphi позволяет программисту поместить свои функции и процедуры в отдельный модуль, а затем использовать процедуры и функции модуля в своих программах, указав имя модуля в списке модулей, необходимых программе (инструкция uses).
Структура модулей Модуль имеет следующую структуру: Unit <имя>; interface <интерфейсная часть> implementation <исполняемая часть> initialization <нициирующая часть> finalization <завершающая часть> end. Здесь unit - зарезервированное слово (единица); начинает заголовок модуля; <имя> - имя модуля (правильный идентификатор); interface - зарезервированное слово (интерфейс); начинает интерфейсную часть модуля; implementation зарезервированное слово (выполнение); начинает исполняемую часть; initialization -зарезервированное слово (инициация); начинает инициирующую часть модуля; finalization - зарезервированное слово (завершение); начинает завершающую часть модуля; end - зарезервированное слово - признак конца модуля. Таким образом, модуль состоит из заголовка и четырех составных частей, любая из которых может быть пустой.
Заголовок модуля и связь модулей друг с другом Заголовок модуля состоит из зарезервированного слова unit и следующего за ним имени модуля. Для правильной работы среды Object Pascal и возможности подключения средств, облегчающих разработку крупных программ, это имя должно совпадать с именем дискового файла, в который помещается исходный текст модуля. Если, например, имеем заголовок Unit Global; то исходный текст соответствующего модуля должен размещаться в дисковом файле global. pas. Имя модуля служит для его связи с другими модулями и основной программой. Эта связь устанавливается специальным предложением Uses <сп. модулей> Здесь uses - зарезервированное слово (использует); <сп. модулей> -список модулей, с которыми устанавливается связь; элементами списка являются имена модулей, отделяемые друг от друга запятыми, например: Uses Windows, Sys. Utils, My. Unit; Если объявление uses используется, оно должно открывать раздел описаний основной программы. Модули могут использовать другие модули. Предложение uses в модулях может следовать либо сразу за зарезервированным СЛОВОМ interface, либо Сразу за словом implementation, либо, и там (т. е. в модуле допускаются два предложения uses).
Интерфейсная часть открывается зарезервированным словом interface. В этой части содержатся объявления всех глобальных объектов модуля (типов, констант, переменных и подпрограмм), которые должны стать доступными основной программе и/или другим модулям. При объявлении глобальных подпрограмм в интерфейсной части указывается только их Исполняемая часть начинается зарезервированным словом implementation и содержит описания подпрограмм, объявленных в интерфейсной части. В ней могут объявляться локальные для модуля объекты - вспомогательные типы, константы, переменные и подпрограммы, а также метки, если они используются в инициирующей части.
Инициирующая и завершающая части чаще всего отсутствуют вместе с начинающим их словами initialization и finalization. В инициирующей части размещаются операторы, которые исполняются до передачи управления основной программе и обычно используются для подготовки ее работы. Например, в них могут инициироваться переменные, открываться нужные файлы и т. д. В завершающей части указываются операторы, выполняющиеся после завершения работы основной программы (в них освобождаются выделенные программе ресурсы, закрываются файлы и т. д. ).
Создание модуля Чтобы приступить к созданию модуля, нужно из меню File выбрать команду New | Unit. В результате открывается окно редактора кода, в котором находится сформированный шаблон модуля. Его текст приведен ниже Сохраняется модуль обычным образом, т. е. выбором из меню File команды Save, Вместе с тем, для модулей повторно используемых процедур и функций лучше создать отдельную папку, нажав ее, например, Units.
Использование модуля Для того чтобы в программе могли применяться функции и процедуры модуля, программист должен добавить этот модуль к проекту и указать имя модуля в списке используемых модулей (обычно имя модуля программиста помещают в конец сформированного Delphi списка используемых модулей). После добавления имени модуля в список модулей, используемых приложением, сам модуль нужно добавить в проект. Для этого из меню Project надо выбрать команду Add to Project и в открывшемся диалоговом окне — имя файла модуля. В результате добавления модуля к проекту в окне редактора появится вкладка с текстом добавленного к проекту модуля. После добавления модуля к проекту и включения его имени в список используемых модулей (инструкция uses) можно выполнить компиляцию программы.