Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VB_6.doc
Скачиваний:
97
Добавлен:
01.12.2018
Размер:
3.77 Mб
Скачать

Глава 5. Процедуры и функции полоьзователя.

Важнейший принцип, применяемый при разработке сложных проектов – принцип модульности. Сущность его в том, чтобы составит проект из отдельных логически законченных и независимых блоков - модулей.

Как упоминалось ранее, в VB существуют 3 типа модулей: модуль формы, стандартный модуль (его еще называют главным модулем) и модуль класса. С первым из них Вы уже хорошо знакомы. Рассмотрим подробнее второй тип модулей.

Любой проект это действия пользователя с интерфейсом и реакция на эти действия, запрограммированная в процедурах обработки событий. Процедуры обработки событий автоматически вызываются при наступлении соответствующего события. Они как бы постоянно находятся в состоянии ожидания готовые включиться в работу, как только произойдёт их событие.

В VB существуют другие процедуры – процедуры пользователя.

Они не связаны ни с какими событиями, содержат типовые алгоритмы обработки данных, многократно используемые с различными данными, и вызываются из программы пользователя специальными операторами. Такие процедуры часто объединяют в блоки, называемые стандартными модулями.

Стандартные модули могут содержать объявления глобальных переменных, констант, типов и процедур, доступных для других модулей данного приложения. Они хранятся в файлах с расширением bas. Стандартный модуль не может содержать никаких элементов управления, и вообще ничего кроме кодов процедур и функций и объявлений переменных, констант и типов.

5.1. Создание стандартного модуля в приложении.

Если в окне проекта уже есть файл стандартного модуля, его и выбираем для записи в него требующихся процедур. Двойной щелчок на имени модуля в окне проекта открывает окно редактирования кода этого модуля. Если в окне проекта нет файла модуля, то в меню “Проект” нужно выбрать опцию “Добавить модуль”. Появится окно, в котором” нужно выбрать значок с надписью “Module” и нажать кнопку “Открыть”. В проекте будет создан файл нового стандартного модуля. Двойной щелчок на его имени в окне проекта открывает окно редактирования кода модуля. Записываем в нем объявления глобальных переменных (Public), т. е. переменных с областью видимости, равной всему проекту, объявления переменных с областью видимости, ограниченной данным модулем (с ключевым словом Private), а также коды процедур, общих для всего проекта (с ключевым словом Public) и коды процедур, общих для данного модуля (с ключевым словом Private).

Модуль любого вида как бы является контейнером для Ваших процедур и функций так же, как, например элемент Frame является контейнером для других элементов управления. Отличие разных типов модулей друг от друго заключается в следующем:

Модуль формы содержит процедуры и функции, используемые для выполнения конкретного текущего приложения.

В стандартный модуль записываются процедуры и функции, которые Вы можете использовать в других приложениях, подключая к ним данный стандартный модуль. Другими словами, стандартный модуль может являться Вашей личной библиотекой программ. Подключить к проекту стандартный модуль из другого проекта можно так: копируем в папку данного проекта требующийся модуль из другого проекта, выполняем “Проект / добавить модуль” и в открывшемся окне выбираем вкладку “Существующий”. В результате в этом окне появится пиктограмма добавляемого модуля. Остается выделить ее мышкой и нажать в окне кнопку “Открыть”. Модуль будет добавлен к проекту и его файл появится в окне проводника проекта.

В модуль класса записываются коды процедур и функций, которые

используются в объектно-ориентированном программировании (ООП). Этот тип модулей в данном курсе не рассматривается.

5.2. Процедуры пользователя.

Существуют задачи, которые требуется решать при самых разных исходных данных: числовых, строковых, массивах разной размерности. Примером может служить задача упорядочивания данных. Если эту операцию оформить в виде отдельной процедуры, то её можно будет многократно вызывать в разных местах программы, передавая ей всякий раз соответствующую информацию. Если требуется, чтобы эта процедура была доступна в любой другой процедуре данной формы, её нужно объявить как Public Sub и разместить в разделе General данной формы. Если же проект содержит несколько форм и требуется, чтобы процедура была доступна в любой процедуре любой из форм проекта, то обеспечить это можно, только объявив её как Public Sub и разместив в стандартном модуле. Для создания собственной процедуры нужно в окне кода набрать:

Sub имя процедуры

В ответ система сформирует заготовку процедуры:

Sub < имя процедуры>( )

End Sub

Синтаксис объявления процедур:

[Public][Private][Static] Sub <имя процедуры> (<список

формальных параметров>)

[Объявления локальных переменных]

Операторы тела процедуры

End Sub

Синтаксис объявления локальных переменных:

[Dim] [Static] <имя переменной> As <имя типа>

Переменные, объявленные внутри процедуры, определены и доступны только в ней. Если переменная объявлена оператором Dim, то после завершения процедуры отведённая под эту переменную память освобождается, и значение переменной не сохраняется. Если требуется, чтобы при очередном выполнении процедуры некоторая переменная имела значение, которая она получила при предыдущем вызове процедуры, её нужно объявлять оператором Static:

Private Sub P ( )

Static k%

. . . . . .

k = k+1 - счётчик количества

обращений к процедуре Р

End Sub

В общем случае объявление переменной в разделе General модуля имеет синтаксис:

[Public] [Private] [Static] < имя переменной > As <имя типа>

Все рассмотренные ранее в разделе “Область видимости переменных” правила распространяются и на процедуры. Для них так же, как и для переменных, область видимости (область доступности) зависит от того, где и с каким ключевым словом объявлена процедура. А именно:

В любой процедуре формы:

- доступны все процедуры этой формы независимо от того,

с каким ключевым словом они объявлены (Public, Private, Static);

- доступны только процедуры Public других форм приложения,

однако в операторах их вызова необходимо указывать имя

формы, на которой объявлена вызываемая процедур, и через

точку имя самой процедуры;

- доступны только процедуры Public любого из стандартных

модулей приложения.

В любом стандартном модуле:

- доступны все процедуры этого модуля независимо от того, с

каким ключевым словом они объявлены (Public, Private, Static);

- доступны только процедуры Public других стандартных модулей

приложения;

- доступны только процедуры Public других форм приложения,

однако в операторах их вызова необходимо указывать имя

формы, на которой объявлена вызываемая процедура, и через

точку - имя самой процедуры.

5.2.1. Параметры (аргументы) процедур.

Обычно для выполнения процедуры ей нужно передать некоторую информацию. Эта информация заключается в значениях переменных, передаваемых процедуре при её вызове. Переменную, передаваемую процедуре при её вызове, называют параметром или аргументом процедуры. Различают формальные и фактические параметры процедур.

Формальные параметры это те, которые перечисляются в списке параметров в заголовке процедуры при её объявлении. Фактические параметры это те, которые подставляются в оператор вызова процедуры вместо соответствующих формальных параметров.

Список формальных параметров представляет собой перечень имён переменных, массивов, процедур или функций, содержащих передаваемые процедуре данные для обработки, а также перечень имён переменных или массивов, возвращаемых процедурой с результатами обработки.

Параметры можно передавать процедуре по ссылке (с использованием ключевого слова ByRef) и по значению (с использованием ключевого слова ByVal). При передаче параметра по ссылке процедура получает физический адрес переменной в памяти. Значение этой переменной может быть изменено в процедуре. По умолчанию все параметры передаются процедуре по ссылке. В этом случае необходимо явно указывать тип переменной: Private Sub P (ByRef n As Integer).

При передаче параметра по значению процедуре передаётся только копия переменной. Если процедура изменяет эту переменную, то это затрагивает только её копию. Значение же самой переменной в оперативной памяти не изменяется. Признаком передачи параметра по значению служит ключевой слово ByVal.

Например: Private Sub P (ByVal n As Integer).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]