Классы и объекты
Покажем использование объектов класса Book, изменив код программы 20.22 следующим образом:
Программа 20.24. Использование объектов встроенных классов.
Sub ObjectExample() Dim author As New Person Dim bookObj As New Book author.perslnit "Novikov", #10/10/1951#Эта функция также возвращает ссылку на объект ActiveX. Только в этом случае в качестве параметров выступает путь, который указывает полный путь к файлу с объектом. Второй параметр при этом не обязателен.
В нижеприведенной программе мы открываем документ Word двумя разными функциями.
Программа 20.26. Открытие документа.
Sub DocOpen1() Dim docObj As ObjectSet docObj = CreateObject("Word.Application") docObj.Visible = TruedocObj.Documents.Add БлокОператоров docObj.Quit End SubSub DocOpen2() Dim docObj As ObjectSet docObj = GetObject("d:\of2001\62\62.doc") End SubВыше мы рассмотрели вопросы объявления класса и использования его объектов вообще. Теперь же перейдем к изучению внутреннего устройства и организации класса более детально, а именно рассмотрим виды процедур класса и их работу со свойствами класса.
В VBA все процедуры класса делятся на три группы:
- Процедуры-методы.
- Процедуры-свойства.
- Процедуры – реакции на событие.
Синтаксис объявления процедур-методов не отличается от стандартного, за исключением возможного использования ключевого слова Friend, о котором говорилось в разделе "Структура программы". Настала пора детально рассмотреть возможность его употребления. Ключевое слово Friend, как и ключевые слова Private и Public, предназначено для ограничения области видимости метода. Если Private делает метод видимым только внутри модуля, а Public – для всех модулей всех проектов, то Friend занимает промежуточную позицию между ними, он делает видимым метод только в том проекте, где был описан класс.
Как известно, определение класса в VBA состоит из двух разделов: реализации и интерфейса. Одна из наиболее трудных задач для программистов-новичков в ООП заключается в определении того, какие члены класса делать закрытыми (включать в раздел реализации), а какие, наоборот, открытыми (включать в раздел интерфейса). Общим правилом можно считать, что чем меньше программе известно о реализации класса, тем лучше. То есть желательно скрыть посредством ключевого слова Private как можно большее количество свойств класса в разделе реализации, а доступ к свойствам осуществлять через специальные открытые методы (Public), организующие интерфейс класса.
Замечание
Сокрытие информации – это сокрытие деталей реализации функций, класса или даже программы. В условиях сокрытия информации программист работает с функциями и классами, как с черными ящиками. Другими словами, передавая функции некоторое значение в форме входного параметра, программист знает лишь результат, который будет получен на выходе этой функции. Сокрытие информации в реализационную часть класса и доступ к ней через функциональный интерфейс повышают надежность программы.
— Регулярная проверка качества ссылок по более чем 100 показателям и ежедневный пересчет показателей качества проекта.
— Все известные форматы ссылок: арендные ссылки, вечные ссылки, публикации (упоминания, мнения, отзывы, статьи, пресс-релизы).
— SeoHammer покажет, где рост или падение, а также запросы, на которые нужно обратить внимание.
SeoHammer еще предоставляет технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Зарегистрироваться и Начать продвижение
Например, предположим, что свойство birthday класса Person может принимать значения только в диапазоне от 1900 до 2000. Если это свойство объявлено как Public, то ему можно присвоить недопустимые значения: writer.birthday = #31/12/1899#. Ограничение видимости свойства и использование метода Public дает возможность проверки присваиваемых значений:
Public Sub InitBirthday(bthday As Date) If bthday > #1/1/1900# and bthday < #11/1/2001# Thenbirthday = bthday ElseMsgBox("You date is out of range") End If End SubТаким образом, употребление ключевого слова Public при объявлении свойства name в классе Person также оказывается некорректным. Но, если отменить глобальную видимость, то станет невозможным употребление функций, напрямую связанных с глобальными свойствами. Например, метод bkPrint класса Book окажется некорректным, т. к. уже нет доступа через author.name. Как же быть? Как тогда получить значение этого свойства?
