Программирование для интернета с использованием COM
Создание интерфейса класса в ActiveX DLL
Объект "стул" имеет некоторые атрибуты: цвет, высота, наличие или отсутствие колес. Эти атрибуты можно присоединить к классу в виде свойств. Ниже показано, как расширить класс clsChair добавлением свойства color.
- Выберите команду Tools\Add Procedure (Сервис\Добавить процедуру).
- Введите имя свойства в текстовом поле Name (Имя) (см. рис. 1.5).
- В области Type (Тип) выберите Property (Свойство).
- В области Scope (Область) выберите Public (Общая).
- Нажмите на клавишу OK, и в соответствующем окне отобразится код, представляющий структуру свойств Let и Get.
Браузер объектов
Свойством называется специальная пара функций, предназначенных для эмуляции одного атрибута класса при использовании класса другой программой. Одна из функций предназначена для считывания значения, а другая – для записи значения. Нажмите на клавишу F2 для открытия специального окна просмотра Object Browser (Браузер объектов) – это интерфейс ко всем программным элементам проекта, открытого в VB IDE. На рисунке 1.6 в левом верхнем поле со списком выбрана библиотека ConfigSeat, а в списке Classes (Классы) в левой части окна содержится класс clsChair.
Выберите класс clsChair, чтобы отобразить добавленное свойство color в правой области. Выделите свойство color, и в нижней части окна в области отчета появится детальное описание этого свойства с указанием типа, класса и библиотеки, которым оно принадлежит.
Свойство color в его текущем состоянии является практически бесполезным, так как для его значений еще не определены переменные. Без этих переменных установка значения свойства не позволит ни сохранить значение, ни получить его. Свойство используется для изменения значения в классе, которое находится в памяти при работе класса, поэтому нужно объявить локальную переменную с областью действия, охватывающей весь класс.
Значение color представляет собой строку, описывающую цвет стула, поэтому в верхней части кода класса объявим частную (private) строковую переменную с именем m_scolor. Ключевое слово private означает, что переменная недоступна программе за пределами класса. Область действия private целесообразно использовать при контроле доступа потребителей к членам класса, свойствам, подпрограммам и функциям. При работе возможна ситуация, когда потребуется изменить другие значения класса или проверить цвет при его установке. Если локальная переменная m_scolor будет общей, то потребитель класса сможет изменить ее значение, не поставив в известность класс.
Рекомендуется всегда использовать свойства для разрешения установки или считывания атрибута в классе. Данный подход несколько затрудняет программирование и повышает уровень сложности программного решения, однако в будущем будет проще вносить изменения в класс. Если правила работы класса поменяются, то обновление объекта COM гораздо легче реализовать под общим интерфейсом COM, поскольку код, лежащий в основе функций свойства, используется для корректировки атрибута класса без изменения общего интерфейса класса. Изменение интерфейса класса потребует изменения потребителей класса, поэтому сложности из-за отсутствия абстракции между внутренними членами класса и его внешним интерфейсом, окажутся более серьезными по сравнению с первоначальным усложнением проекта.
В листинге 1.1 приведен код, реализующий класс clsChair.
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' constants to class Private Const DEFAULT_COLOR = "Brown" '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' locals to class 'holds the color of the chair Private m_scolor As String '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Public Property Get color() As Variant color = m_scolor End Property Public Property Let color(ByVal vNewValue As Variant) m_scolor = vNewValue End Property Private Sub Class_Initialize() 'set default color on instantiation m_scolor = DEFAULT_COLOR End SubЛистинг 1.1. clsChair With Support to Read and Write the Color to the Instance Option Explicit
Вверху каждого файла кода в VB рекомендуется размещать выражение Option Explicit. Оно проверяет все необъявленные переменные, используемые в коде, при компиляции. При обнаружении таких переменных VB прерывает компиляцию и генерирует сообщение об ошибке. Данное выражение позволяет принудительно объявлять переменные, что полезно для выявления опечаток в именах переменных. Можно провести долгие часы, пытаясь понять, почему переменная не содержит нужного значения, и в результате обнаружить, что эта переменная просто неправильно указана в строке кода. Выявить такие ошибки трудно, поэтому используйте команду Option Explicit. VB настраивается на автоматическое добавление данного выражения в код каждого файла с помощью команды Tools\Options (Сервис\Параметры). Откройте вкладку Editor (Редактор) и отметьте опцию Require Variable Declaration (Требовать объявление переменных).
Построение тестовой структуры
Любое программное обеспечение необходимо тестировать, и VB IDE для этого имеется прекрасный механизм. Нажмите на кнопку Start (Пуск) в панели инструментов VB либо на клавишу F5, чтобы откомпилировать и выполнить программу.
Поскольку проект ConfigSeat является библиотекой ActiveX DLL, его нельзя выполнить, т.к. он должен использоваться другой исполняемой программой. Для тестирования класса clsChair следует создать еще один проект в том экземпляре IDE, где редактируется clsChair.Это будет исполняемая программа с одной задачей – тестированием класса clsChair. Программа для тестирования другой программы называется тестовой структурой.
- В Visual Basic выберите команду File\Add Project (Файл\Создать проект) для открытия диалогового окна Add Project (Создание проекта).
- Во вкладке New (Новый проект) выберите шаблон проекта Standard Exe. Будет создан новый проект с именем Project1, содержащий форму Form1.
- В Project Explorer (Диспетчер проектов) щелкните правой кнопкой мыши на новом проекте и выберите Set As Start Up.
- Переименуйте проект, присвоив ему имя clsChairTester.
- В настоящий момент класс clsChair недоступен, поскольку в тестовой структуре clsChairTester нет ссылки на проект ConfigSeat. Для создания ссылки выберите команду Project\References (Проект\Ссылки) для открытия диалогового окна References (Ссылки) (см. рис. 1.7).
- Выберите ссылку для библиотеки ConfigSeat, отметив соответствующую ей опцию, после чего нажмите на кнопку OK.
Запомните. В диалоговом окне References (Ссылки) отображаются ссылки для выбранного в настоящий момент проекта. Изменение ссылок применяется только к этому проекту. Вы можете случайно выделить и другие проекты в группе проектирования, поэтому перед внесением изменений убедитесь в том, что выбрано соответствующее диалоговое окно References (Ссылки) с именем окна активного проекта в строке заголовка.
Элемент form1 можно настроить на отображение функционирования различных компонентов класса clsChair. Используемый подход заключается в представлении всех свойств класса в виде текстовых полей, всех функций – в виде кнопок, с текстовыми полями для аргументов формы тестовой структуры соответствующего класса. Тестовую структура нужно сохранить вместе с исходным кодом тестируемого класса, так как в будущем это поможет при усовершенствовании класса или устранении ошибок.
Примечание. Рассматриваемая тестовая структура – clsChairTester – сохранена с исходным кодом данной лекцию и доступна на веб-сайте автора книги.
В классе clsChair имеется только одно свойство, поэтому тестовая структура просто установит значение свойства и покажет его пользователю. После добавления в форму нескольких текстовых полей и командной кнопки, написания кода для создания и управления классом clsChair можно протестировать компонент "стул" с помощью тестовой структуры.
- Нажмите на клавишу F5 для запуска тестовой структуры. Выходные данные покажут, что объект успешно создан, и что цвет стула равен значению Brown (Коричневый).
- Введите новый цвет и нажмите на кнопку Set New Color (Присвоить новый цвет).
На рисунке 1.8 показана тестовая структура, при работе которой цвет стула успешно изменен в нескольких тестах.