Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика 3-4(ЯП)+.doc
Скачиваний:
133
Добавлен:
10.06.2015
Размер:
681 Кб
Скачать
☆

Реализация основных идей объектно-ориентированного программирования в языке vb. Поля и методы. Конструирование объекта класса. Адресная природа объекта класса

Рассмотрим подходы к реализации механизмов объектно-ориентированного программирования (ООП) в языке программирования Visual Basic. В этом языке идеи ООП реализованы наиболее примитивно, но в тоже время интуитивно ясно.

Краеугольным камнем ООП здесь являются особые программные модули – модули классов (class module) – основным предназначением, которых является размещением внутри себя единственного класса объектов, со всеми его полями, методами и свойствами. Имя такого модуля совпадает с именем самого класса. Структура модуля класса полностью аналогична модулю подпрограмм, однако, непосредственное обращение к подпрограммам и переменным такого модуля запрещено. Это возможно только от имени экземпляра объекта класса. Другим важным для понимания класса отличием является способ хранения данных по сравнению со стандартным модулем. Так задание нового значения для открытой глобальной перемененной в стандартном модуле становится видимым в других частях программы. Данные же в модуле класса существуют раздельно для каждой реализации (экземпляра объекта) этого класса. На том же основании можно заключить, что данные в стандартном модуле имеют область видимости всю программу, а время их жизни ограничено временем ее исполнения, тогда как данные для модуля класса существуют только во время жизни отдельного объекта. Переменные модуля класса создаются при создании объекта, а уничтожаются при его разрушении. Наконец, переменная объявленная открытой в стандартном модуле видима во всем проекте, тогда как открытая переменная в модуле класса видима только клиентам (consumer) объекта данного класса.

Рассмотрим простой пример класса объектов:

' Модуль класса CMessage

Public Msg As String ' Поле

Public Sub ShowMessage () ' Метод

MsgBox Msg ' показываем содержимое переменной-поля Msg

End Sub

Всякая переменная объявленная на уровне модуля класса становится полем, а подпрограмма – методом. Единственным видимым отличием модулей класса от стандартных модулей является, то что модули класса могут включают два необязательных метода с предопределенными именами – Class_Initialize() и Class_Terminate(), которые автоматически выполняются при создании и уничтожении объекта данного класса.

Для использования функциональности класса необходимо создать хотя бы один экземпляр класса, то есть объект класса. Для этого необходимо объявить объектную переменную, которая используется для хранения начального адреса объекта в памяти программы. Фактически объектная переменная представляет собой указатель, подобный указателям в языках программирования С/С++ и OP. Однако в VBв отличие от других языков программирования настоящего значение указателя не раскрывается, а также отсутствует возможность создавать указатели скалярных и структурных типов, соответственно невозможны адресные операции.

Объектные переменные могут быть описаны с помощью ключевых слов DIM, PUBLIC и PRIVATE. Например:

Dim objMessage As CMessage

Объявление объектной переменной (как и всякого указателя), в отличие от переменной скалярного или простого структурного типа не означает создание самого объекта, т.е. выделения для него памяти в динамической области программы. Объявление объектной переменной означает лишь резервирование ячейки памяти для адреса начала объекта в памяти. Для конструирования же самого объекта, то есть размещения в памяти полей (переменных) и методов объекта, в VB имеется специальный оператор NEW. Действие этого оператора заключается в том, что он распределяет память и размещает в ней поля и методы создаваемого объекта, а также возвращает адрес начала объекта в памяти.

Созданный с помощью оператора NEW объект, должен быть присоединен к соответствующей объектной переменной с помощью особого оператора присваивания SET, который позволяет присвоить объектной переменной адрес, возвращаемый оператором NEW.

Set objMessage = New CMessage

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

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

Для доступа к членам класса используется специальный оператор, подобный оператору доступа к полю записи (пользовательского, структурного типа). Этот оператор получил название селектора члена класса(member selector) и синтаксически представлен символом «.».

Например, для использования объекта в рассматриваемом примере необходим следующий код:

Public Sub UseObject ()

Dim objMessage As CMessage

Set objMessage = New CMessage

objMessage.Msg = "Hello world"

objMessage.ShowMessage

End Sub

VB имеет возможность создавать несколько указателей на один и тот же объект, в виде нескольких объектных переменных:

Dim objMsgFirst As CMessage // первая объектная переменная

Dim objMsgSecond As CMessage // вторая объектная переменная

Set objMsgFirst = New CMessage // создаем первый объект

// второй объектной переменной присваиваем ссылку

// на первый объект

Set objMsgSecond = objMsgFirst

Для сравнения двух указателей в VBимеется специальный операторIS, который позволяет определить указывают ли две объектных переменных на один и тот же объект:

If objMsgFirst Is objMsgSecond then

MsgBox "Объектные переменные указывают на один объект"

End if

Рис. 15. Ссылочная природа объектов

В VBобъект существует до тех пор пока на него имеется хотя бы одна ссылка, то есть хотя бы одна используемая объектная переменная, которая находится в области видимости и время «жизни», которой не истекло. Сама ссылка, т.е. объектная переменная, разрушается когда она выходит из области видимости. Кроме того, можно явно разорвать связь между указателем и объектом, на который он указывает, присвоив объектной переменной значение специальной константыNOTHING:

Set objCommentSecond = Nothing

Однако разрыв связи объекта с одной объектной переменой не означает уничтожение объекта, если имеется хотя бы еще одна ссылка на объект.