В начало
Статьи
Библиотека
Разное

Вот здесь - новый сайт, заходите немедленно!

kift - Коллекция Интересных Фактов и Теорий

А тут можно поболтать и побухтеть, милости просим:

kift - неизданное

Введение в программирование на примере VBA

Часть III. Создание объекта на основе класса

Аннотация
Предисловие
Часть I. Макрос Word
     1. Проектирование и запись макроса
     2. Разбор макроса
     3. Внесение исправлений
     Итоги
Часть II. Макрос-приложение
     4. Проектирование
     5. Визуальное редактирование
     6. Запуск и остановка
     7. Вывод данных
     8. Выбор ответа
     9. Перемещение по списку
     10. Обратное перемещение
     11. Новая версия
     12. Реализация новой версии
     13. Завершение работы
     Итоги
Часть III. Объект на основе класса
     14. "Основное" приложение
     15. Компонент-таймер
    Итоги
Послесловие

Итоги

Концепции, с которыми вы познакомились в этой части книги, непросты, но нужны для по-настоящему эффективной работы. Будем надеяться, что вы хотя бы увидели направления, в которых придется трудиться.

Если до сих пор мы работали, используя объектную направленность языка постольку поскольку, то с началом использования классов мы сделали очень большой и важный шаг. Для этого, правда, вам придется изменить способ мышления и думать в терминах объектов и их атрибутов. Ничего сложного в этом нет, человеческий разум изначально приспособлен к использованию объектов, это может объяснить то, что из всех существующих парадигм программирования именно объектная парадигма получила наибольшее распространение.

Если бы вы писали программу, используя «старый» структурный стиль, – без объектов, то вам пришлось бы создать «основную» процедуру приложения, работающую в цикле от момента запуска до завершения работы. В этой «основной» процедуре должна быть структура выбора (наподобие Select Case или If...Then VBA) обрабатывающая действия пользователя или какие-то другие внешние воздействия, и вызывающая те или иные процедуры, обеспечивающие реакцию приложения. Подобным образом построены программы на необъектных языках, таких, как C, Fortran и других. Определенного рода преимущества есть и здесь – необъектная программа, как правило, будет работать быстрее. Но, во-первых, современный уровень компьютерной техники может обеспечить достаточный уровень быстродействия и для объектных приложений, во-вторых, не так уж много областей, требующих столь скрупулезной борьбы за скорость. Необъектный способ построения весьма затрудняет повторное использование кода. Главное же – процесс создания объектного приложения значительно нагляднее, проще и быстрее структурного.

Следует обратить ваше внимание на то, что сведения о классах, полученные вами, ограничены возможностями VBA – и, значит, весьма кратки и недостаточны. VBA может лишь создавать объекты на основе написанных вами классов. Другие, более «объектные» языки, такие, как семейство языков .NET, Java, C++ и другие, значительно мощнее в этом смысле. Так, в них можно создавать классы на основе существующих (так называемое наследование), заранее определять, каким именно видом объектов будет манипулировать класс (параметризованные классы), создавать несколько методов с одним и тем же именем, выполняющих одни и те же действия – но принимающих разные параметры (перегрузка методов). Наконец, есть языки, где класс как программная концепция также является объектом, доступным для манипулирования в процессе работы приложения. Начинающему, незнакомому с этими понятиями, сложно представить, какие широчайшие возможности предоставляют программисту «истинно» объектно-ориентированные языки. Но и работать с ними сложно, намного сложнее, нежели с VBA. А ведь, пойдя в первый класс, вы не будете недоумевать из-за того, что не стали изучать интегралы? – этот учебник и есть курс первоклассника-программиста, и VBA – ваша первая тетрадка в косую линейку…

В ходе этой части учебника вам пришлось включить в проект элементы управления, не входящие в поставку VBA. Этот  прием иллюстрирует  повторное использование компонентов. VBA позволяет вам не тратить силы и время на написание контролов, если у вас есть уже готовые. Помимо отдельных контролов, вы можете подключать к проекту целые объектные библиотеки.

Как правило, при установке приложений, имеющих в своем составе объекты, доступные для повторного использования, происходит автоматическая регистрация их в системе, и контролы появляются в диалоговом окне Additional Controls, с которым вы уже знакомы. Объектные библиотеки и компоненты, не имеющие визуального отображения, доступны в окне References (Ссылки), появляющемся при выборе соответствующего пункта в меню Tools IDE VBA.

Но вы не выполнили «правильную» установку компонента – и в системе он не зарегистрировался (это может произойти, например, при обычном копировании файла компонента из сети или с дискеты в каталог, содержащий ваше приложение)? Не страшно. В окне References есть кнопка Browse (Обзор), нажатие на которую выводит окошко навигации по каталогам вашего компьютера. Следует найти файл компонента, который вы хотите подключить к проекту – и подтвердить свой выбор. Операционная система автоматически зарегистрирует компонент и сделает его доступным для VBA. Помните, что не все компоненты, найденные таким образом, могут быть подключены, если не получилось – скорее всего, этот компонент вообще нельзя использовать в VBA.

Интересная концепция, с важностью которой мы столкнулись – многозадачность приложения. Вернее говоря, мы увидели, что VBA не имеет таковой. Вспомните, в момент запуска программы произошло «зависание» субстрата-Excel. То есть, до тех пор, пока приложение VBA выполняет какое-то длительное действие, такое, как цикл, реакция на другие «раздражители» невозможна. Мы справились, применив оператор DoEvents, – но это не лучший выход. Этот способ предоставления «рабочего места» программам тогда, когда «пожелает» программист, остался еще со времен 16-разрядных версий Windows, и называется кооперативной многозадачностью. Основной недостаток, волнующий нас при использовании подобного приема – ненадежность. Представьте себе, что из-за какой-то ошибки произошло «зависание» цикла – и оператор DoEvents не выполняется. Зависнет и приложение-субстрат, которому передается «рабочее время» этим оператором – и вы рискуете утратить результаты работы и, возможно, какие-то важные данные. К сожалению, для VBA других вариантов нет, возможностей для реализации вытесняющей многозадачности, при которой распределение ресурсов («рабочего времени») производится операционной системой вне зависимости от указаний программиста (а операционная система делает это лучше и надежнее) VBA не имеет. Вернее, это можно сделать,  используя WinAPI – но задача настолько сложна, что, возможно, проще будет изучить и использовать другой язык, такой, как C++ или Java…

Hosted by uCoz