Введение в программирование на примере VBA
Часть III. Создание объекта на основе класса
ИтогиКонцепции, с которыми вы познакомились в этой части книги, непросты, но нужны для по-настоящему эффективной работы. Будем надеяться, что вы хотя бы увидели направления, в которых придется трудиться. Если до сих пор мы работали, используя объектную направленность языка постольку поскольку, то с началом использования классов мы сделали очень большой и важный шаг. Для этого, правда, вам придется изменить способ мышления и думать в терминах объектов и их атрибутов. Ничего сложного в этом нет, человеческий разум изначально приспособлен к использованию объектов, это может объяснить то, что из всех существующих парадигм программирования именно объектная парадигма получила наибольшее распространение. Если бы вы писали программу, используя «старый» структурный стиль, – без объектов, то вам пришлось бы создать «основную» процедуру приложения, работающую в цикле от момента запуска до завершения работы. В этой «основной» процедуре должна быть структура выбора (наподобие Select Case или If...Then VBA) обрабатывающая действия пользователя или какие-то другие внешние воздействия, и вызывающая те или иные процедуры, обеспечивающие реакцию приложения. Подобным образом построены программы на необъектных языках, таких, как C, Fortran и других. Определенного рода преимущества есть и здесь – необъектная программа, как правило, будет работать быстрее. Но, во-первых, современный уровень компьютерной техники может обеспечить достаточный уровень быстродействия и для объектных приложений, во-вторых, не так уж много областей, требующих столь скрупулезной борьбы за скорость. Необъектный способ построения весьма затрудняет повторное использование кода. Главное же – процесс создания объектного приложения значительно нагляднее, проще и быстрее структурного. Следует обратить ваше внимание на то, что сведения о классах, полученные вами, ограничены возможностями VBA – и, значит, весьма кратки и недостаточны. VBA может лишь создавать объекты на основе написанных вами классов. Другие, более «объектные» языки, такие, как семейство языков .NET, Java, C++ и другие, значительно мощнее в этом смысле. Так, в них можно создавать классы на основе существующих (так называемое наследование), заранее определять, каким именно видом объектов будет манипулировать класс (параметризованные классы), создавать несколько методов с одним и тем же именем, выполняющих одни и те же действия – но принимающих разные параметры (перегрузка методов). Наконец, есть языки, где класс как программная концепция также является объектом, доступным для манипулирования в процессе работы приложения. Начинающему, незнакомому с этими понятиями, сложно представить, какие широчайшие возможности предоставляют программисту «истинно» объектно-ориентированные языки. Но и работать с ними сложно, намного сложнее, нежели с VBA. А ведь, пойдя в первый класс, вы не будете недоумевать из-за того, что не стали изучать интегралы? – этот учебник и есть курс первоклассника-программиста, и VBA – ваша первая тетрадка в косую линейку… В ходе этой части учебника вам пришлось включить в проект элементы управления, не входящие в поставку VBA. Этот прием иллюстрирует повторное использование компонентов. VBA позволяет вам не тратить силы и время на написание контролов, если у вас есть уже готовые. Помимо отдельных контролов, вы можете подключать к проекту целые объектные библиотеки. Как правило, при установке приложений, имеющих в своем составе объекты, доступные для повторного использования, происходит автоматическая регистрация их в системе, и контролы появляются в диалоговом окне Additional Controls, с которым вы уже знакомы. Объектные библиотеки и компоненты, не имеющие визуального отображения, доступны в окне References (Ссылки), появляющемся при выборе соответствующего пункта в меню IDE VBA. Но вы не выполнили «правильную» установку компонента – и в системе он не зарегистрировался (это может произойти, например, при обычном копировании файла компонента из сети или с дискеты в каталог, содержащий ваше приложение)? Не страшно. В окне References есть кнопка (Обзор), нажатие на которую выводит окошко навигации по каталогам вашего компьютера. Следует найти файл компонента, который вы хотите подключить к проекту – и подтвердить свой выбор. Операционная система автоматически зарегистрирует компонент и сделает его доступным для VBA. Помните, что не все компоненты, найденные таким образом, могут быть подключены, если не получилось – скорее всего, этот компонент вообще нельзя использовать в VBA. Интересная концепция, с важностью которой мы столкнулись – многозадачность приложения. Вернее говоря, мы увидели, что VBA не имеет таковой. Вспомните, в момент запуска программы произошло «зависание» субстрата-Excel. То есть, до тех пор, пока приложение VBA выполняет какое-то длительное действие, такое, как цикл, реакция на другие «раздражители» невозможна. Мы справились, применив оператор DoEvents, – но это не лучший выход. Этот способ предоставления «рабочего места» программам тогда, когда «пожелает» программист, остался еще со времен 16-разрядных версий Windows, и называется кооперативной многозадачностью. Основной недостаток, волнующий нас при использовании подобного приема – ненадежность. Представьте себе, что из-за какой-то ошибки произошло «зависание» цикла – и оператор DoEvents не выполняется. Зависнет и приложение-субстрат, которому передается «рабочее время» этим оператором – и вы рискуете утратить результаты работы и, возможно, какие-то важные данные. К сожалению, для VBA других вариантов нет, возможностей для реализации вытесняющей многозадачности, при которой распределение ресурсов («рабочего времени») производится операционной системой вне зависимости от указаний программиста (а операционная система делает это лучше и надежнее) VBA не имеет. Вернее, это можно сделать, используя WinAPI – но задача настолько сложна, что, возможно, проще будет изучить и использовать другой язык, такой, как C++ или Java… |