Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОСНОВЫ ОФИСНОГО ПРОГРАММИРОВАНИЯ И ЯЗЫК VBA - 1....doc
Скачиваний:
60
Добавлен:
17.12.2018
Размер:
1.88 Mб
Скачать

Модуль класса Свойства

Мы начали эту лекцию с примера создания класса "Личность" и привели полное его описание, что позволило целиком охватить всю картину. Теперь разберем детали построения класса. Шаг за шагом построим еще один простой класс Rational, определяющий рациональные числа. Начнем построение класса, как обычно, с комментария, содержательно описывающего назначение класса, его свойства и поведение. Вот комментарий, к нашему классу:

' Класс Rational

'Определяет новый тип данных - рациональные числа и основные

'операции над ними - сложение, вычитание, умножение и деление.

'Рациональное число задается парой целых чисел (m,n) и изображается,

'обычно, в виде дроби m/n. Число m называется числителем, а

'n - знаменателем. Для каждого рационального числа существует

'множество его представлений, например, - 1/2, 2/4, 3/6, 4/8, …

'задают одно и тоже рациональное число. Среди всех представлений

'можно выделить то, в котором числитель и знаменатель несократимы.

'Именно такие представители будут храниться в нашем классе.

'Операции над рациональными числами определяются естественным

'образом. Лучшим их описанием будут соответствующие им методы.

После комментария следует описание переменных, задающих свойства класса. Это могут быть терминальные свойства, заданные обычными переменными VBA, как, например, Имя, Фамилия в классе "Личность", так и свойства - участники. Напомним, что свойства - участники это объекты других классов. Без них не обойтись, если мы строим семейство классов. Помните, что в Office 2000 нет наследования классов в классическом понимании, - его заменяет встраивание. Так что при построении семейства классов, приходится иметь дело с "толстыми" объектами, свойства которых являются объектами, имеющими свойства, являющиеся объектами и так далее. Взгляните еще раз на рисунок 1.1 первой лекции и просмотрите ее раздел "встраивание против наследования", имеющиеся там примеры поясняют ситуацию.

В разбираемом нами случае речь не идет о семействе классов, поэтому класс Rational имеет только терминальные свойства. Пояснять, что это за свойства нет необходимости. Вот их определение:

'Свойства класса Rational

Private m As Integer 'числитель

Private n As Integer 'знаменатель

Сокрытие свойств

Возникает вопрос, почему свойства объявлены с описателем Private, а не Public Заметьте, таким же образом мы описывали свойства и в классе "Личность". Такова общепринятая практика объектно-ориентированного программирования. Если бы свойства имели атрибут Public, - были бы открытыми, тогда при работе с объектом, можно было бы иметь к ним прямой доступ, как при чтении, так и записи. Но такая свобода, как правило, недопустима. Вот возможные стратегии при работе со свойствами:

  • Чтение, запись (Read - Write).

  • Чтение, запись при первом обращении (Read, Write-once).

  • Только чтение (Read-only).

  • Только запись (Write-only).

  • Ни чтение, ни запись (Not Read -Not Write), - свойство закрыто.

Открытость свойств не позволяет реализовать только первую из стратегий. В нашем примере с классом Rational открытость свойств недопустима, поскольку числитель и знаменатель преобразуются скрытым от внешнего пользователя способом, позволяющим всегда задавать единственного представителя рационального числа.

При задании свойств делайте их закрытыми.

Для доступа к закрытым свойствам и реализации перечисленных выше стратегий работы с ними предложены специальные методы - свойства Property Let, Set и Get, примеры их мы видели в классе "Личность", а подробный разговор еще предстоит.