Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Часть 2. Основы офисного программирования.doc
Скачиваний:
8
Добавлен:
01.05.2025
Размер:
4.04 Mб
Скачать

5.2.7. Создание объектов пользователя

В VBA у пользователя имеется возможность создавать собственные объекты. Модули класса содержат информацию о создаваемых пользователем объектах. Модуль класса содержит код, используемый для создания объектов, задания их свойств, код методов объектов. Имя соответствующего объекта (точнее класса объектов) используется в качестве имени модуля класса.

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

В объектно-ориентированном программировании используется понятие абстракции. Абстракция – выделение только тех свойств, которые существенны, интересны на определенном уровне рассмотрения. Классы определяют информацию об объекте, действия, выполняемые объектом и над объектом. Класс – это «проект» объектов. Объекты, созданные на основе одного и того же класса, обладают одинаковым набором свойств и методов, но значения свойств могут быть разными, они задаются при порождении экземпляра объекта определенного класса. Экземпляром класса называется объект, созданный на основе класса. На основе одного и того же класса можно создать произвольное количество экземпляров.

Для создания собственного класса необходимо выполнить команду Вставка Модуль класса. После выполнения этой команды в окне проекта у текущего проекта появляется ветвь, представляющая новый класс, и открывается окно модуля этого класса. Для ввода имени нового класса вместо присвоенного ему при создании стандартного имени нужно открыть окно свойств этого компонента и изменить соответствующее свойство (Name). Других свойств у класса пока нет.

При создании свойств класса требуется предусмотреть возможность выполнения двух операций: получения текущего значения свойства и установки значения свойства. Эти операции выполняются с помощью процедур Property Get и Property Let. В заголовках этих процедур указывается имя соответствующего свойства.

Процедура Property Let используется для установки значения свойства. Основной функцией этой процедуры является проверка того, является ли устанавливаемое значение допустимым. Устанавливаемое значение всегда задается в инструкции Property Let (заголовке процедуры) последним параметром. Переданное при обращении к процедуре значение аргумента, если оно соответствует условию допустимости, становится текущим значением свойства и запоминается в переменной уровня модуля, доступной в любой процедуре модуля класса.

Процедура Property Get используется для получения текущего значения свойства. Данная процедура просто должна присвоить значение соответствующей переменной уровня модуля свойству (т.е. эта процедура должна содержать оператор присваивания, в левой части которого указывается имя свойства).

Свойства можно создать автоматически с помощью диалогового окна команды Вставка Процедура. В поле «Имя» диалогового окна «Вставка процедуры» задается имя свойства. Переключатель группы «Тип» устанавливается в позиции «Свойство». Если свойство имеет общую область определения, т.е. доступно для просмотра и изменения программисту, использующему объект, то следует установить в группе «Область определения» переключатель «Общая», если же свойство можно использовать только в модуле класса, то выбирается переключатель «Личная». Скрытые, недоступные для использования программистом компоненты можно просмотреть с помощью команды Показать скрытые компоненты контекстного меню окна просмотра объектов.

В результате выполнения программы в модуль класса вставляются «заготовки» процедур. Например, если с объектом связан файл, имя этого файла является свойством этого объекта. Описания переменной для хранения этого свойства при работе с объектом и процедур установки/получения значения свойства могут быть следующими:

Dim Pic_File As String ‘ Имя файла объекта

Public Property Get Файл() As String

' Свойство, указывающее файл, в котором хранится объект

' Файл = Pic_File

End Property

Public Property Let Файл(ByVal vNewValue As String)

' Установка свойства - файла, в котором хранится объект.

' Файл может размещаться только на диске C

If (vNewValue <> "") And _

(Left(vNewValue, 3) = "C:\") And _

(Len(vNewValue) > 3) Then

Pic_File = vNewValue

Else

x = MsgBox("Недопустимое имя файла!", _ vbCritical, "Ошибка в свойстве")

End If

End Property

Для создания и работы с экземплярами объектов класса нужно описать объектные переменные соответствующих типов инструкциями вида

Dim ОбъектнаяПеременная As Класс

и присвоить им значения с помощью инструкции

Set ОбъектнаяПеременная = New Класс

Предположим, что в проекте создан модуль класса «МойКласс», в который включены приведенные выше инструкции. Свойство «Файл» доступно программно, в приведенной ниже процедуре создается объект, принадлежащий классу «МойКласс», устанавливается его свойство «Файл» и значение свойства выводится на экран:

Public Sub СозданиеОбъектаПользователя()

Dim A As МойКласс

Set A = New МойКласс

MsgBox A.Файл

A.Файл = "C:\Объект"

MsgBox A.Файл

End Sub

Код процедур установки и получения свойства можно ввести вручную в окне программы модуля класса.

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

Если в окне модуля класса выбрать из списка объектов строку «Class», в списке «Процедура» появляются два элемента. С их помощью можно создать процедуру инициализации (Initialize) и уничтожения (Terminate) для объектов этого класса. В процедуре инициализации можно записать код для присваивания начальных значений свойствам создаваемого объекта. А в процедуре уничтожения выполнить действия, связанные с удалением этого объекта. Например, в модуль класса «МойКласс» можно вставить код инициализации объекта:

Private Sub Class_Initialize()

Pic_File = "C:\Temp\ObjFile"

File_Number = FreeFile

Open Pic_File For Random As File_Number

End Sub

где переменная File_Number описана на уровне модуля:

Dim File_Number As Integer ' Номер файла

При создании экземпляра объекта данного класса открывается или создается файл

Если при работе с объектом используются, например, какие-либо временные файлы, то при уничтожении объекта можно удалить эти файлы:

Private Sub Class_Terminate()

MsgBox "Уничтожение!"

Close File_Number

Kill (Pic_File)

End Sub

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

В модуле класса можно описать специальный метод создания объектов с определенными свойствами, задаваемыми параметрами метода.