Основы офисного программирования и язык VBA

jura кофемашина ремонт ищите тут

Создание собственных динамических классов


VBA допускает создание динамических структур данных: списков, стеков, очередей, деревьев. Хоть мы и говорим о динамической структуре данных, речь фактически идет о создании динамических типов данных (классов), содержащих как данные, так и операции над ними.

Рассмотрим классический пример и создадим линейный односвязный список. Это можно делать по-разному, но одно из самых разумных решений - определить три класса, задающие

  1. информационную часть элемента списка;
  2. структуру элемента списка;
  3. сам список, в том числе и операции, над ним определенные.

Для определенности рассмотрим список, хранящий информацию о "личностях". Тогда можно считать первую часть нашей задачи решенной,- класс Личность уже создан, и мы его просто используем. Теперь создадим класс с именем ЭлементСпискаЛичностей, задающий структуру элемента (запись). Этот класс прост, поскольку элементы линейного односвязного списка состоят из двух полей - информационного и поля указателя соседнего элемента. Никакие методы над этим классом обычно не определяются. Его полное описание:

'Класс ЭлементСпискаЛичностей содержит только два поля Public Сам As Личность Public Друг As ЭлементСпискаЛичностей

В определении класса ЭлементСпискаЛичностей свойство Друг является объектом того же класса. VBA допускает такую рекурсию в определении - без нее списковую структуру не организовать.

Осталось определить класс СписокЛичностей, задающий сам список. Главное на этом этапе - спроектировать операции над списком. Мы ограничимся набором традиционных методов:

  1. AddFirst (F As Личность) - добавляет элемент в начало списка;
  2. AddLast (F As Личность) - добавляет элемент в конец списка;
  3. Initialize - конструктор по умолчанию, инициализирует список;
  4. PrintList() - печатает содержимое элементов списка;
  5. ClearList() - очищает список.

Методы диктуют и состав данных (свойств) класса СписокЛичностей. Нужны минимум два указателя на начало и конец списка: First и Last. Эти свойства разумно закрыть от внешнего использования. Мы добавим к ним открытую переменную Count, следящую за числом элементов списка.


Начало  Назад  Вперед



Книжный магазин