Файл: Освой самостоятельно программирование для MS Access 2002 за 24 часа [П.Киммел].pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 21.10.2020
Просмотров: 7889
Скачиваний: 25

Stream и освобождения
для него фрагмента памяти — если
бы в составе класса была реализована процедура
то в
этот момент она была бы автоматически вызвана.
Примите к сведению: существует объект ActiveX под названием Script-
ing.
воспользоваться им в прикладной
программе, необходимо
переменную и
вызвать
CreateObject. Другой
следует добавить
ссылку на библиотеку Microsoft Scripting Runtime Library и создать
экземпляр объекта FileSystemObject с помощью ключевого слова New.
Примеры использования объекта Scripting. FileSystemObject вы
найдете в оперативной справочной системе Microsoft Visual Basic, задав в
качестве ключевого слова поиска строку
FileSystemObject.
Класс
рассмотренный в этом разделе, достаточно полезен
и эффективен. Но существует также и более развитый и гибкий
стандартный класс —
Это весьма удачная
альтернатива, если в недалеком будущем ваши потребности превзойдут
уровень возможностей, предоставляемых классом FileStream.
Мощь объектно-ориентированного подхода к программированию заключается, в
частности, в том, что он позволяет сосредоточить внимание на целостной проблеме.
Код класса обладает высокой степенью переносимости (поскольку размещается в от-
дельном модуле и решает задачу комплексно) и управляемости — вы можете, напри-
мер, легко исправлять внутренний интерфейс класса, не повредив внешний код.
Тестирование класса
Создаваемые классы следует обязательно тестировать. В этой ситуации вполне
применимы все методы и приемы, рассмотренные ранее в главах "17-й час. Отладка
кода" и "18-й час. Обработка ошибок во время выполнения программы". По завер-
шении
класса постройте тестовую процедуру, которая позволит
"прощупать" все его методы и свойства — если класс протестирован, смело создавайте
его объекты, не боясь ошибок.
Расширение возможностей существующих
Один из важных аспектов объектно-ориентированного программирования связан с
возможностью агрегации классов (т.е. создания новых классов, расширяющих потен-
циал существующих). Под
агрегацией
в данном случае понимается включение класса в
состав атрибутов нового класса.
Глава "22-й час. Совершенствование типов данных" содержит примеры расшире-
ния набора функциональных средств класса за счет агрегации кода.
Создание экземпляра класса
Приемы построения экземпляров стандартных и пользовательских классов абсо-
лютно одинаковы. Следующая строка кода демонстрирует команду создания объекта
Stream класса FileStream:
Dim Stream As New FileStream
час. Основы программирования классов
395

Процесс создания объекта путем добавления ссылки с применением
ключевого слова New называется
ранним связыванием
(на этапе
компиляции). Вызов CreateObject с присвоением значения перемен-
ной типа Variant называется
динамическим связыванием.
При использовании раннего связывания редактор Visual Basic пред-
лагает список свойств и методов объекта, поскольку тип объекта
известен уже на этапе разработки. Для динамически связанных
объектов такого рода
редактор не располагает.
Объекты ActiveX требуют применения функции CreateObject с передачей ей
строки наименования класса. Листинг 21.9 содержит пример создания ActiveX-объекта
Excel. (Предварительно включите библиотеку Microsoft Excel 10.0 Object Library в со-
став проекта — для этого выберите в строке меню окна редактора VBA команду
и в одноименном диалоговом окне установите соответствующий
флажок.)
Листинг 21.9. Пример создания ActiveX-объекта Excel
1: Sub
)
Dim Excel As Object
3: Set Excel =
4:
= True
5:
6: Set Excel = Nothing
7 : End Sub
)
[ Строка 2 листинга 21.9 содержит конструкцию объявления объекта с
I именем Excel. (Думается, это название достаточно подходяще.) В стро-
ке 3 вызывается функция CreateObject, которой в качестве аргумента
передается строка с наименованием
С помощью выражения строки 4, содержащего обращение к Property-
методу Visible, объект отображается на экране, а затем сеанс работы
Excel завершается (строка 5) и объект удаляется из памяти (строка 6).
Аналогичным образом можно создать в среде прикладной программы эк-
земпляры Word, Outlook и даже Access (!), поскольку функция CreateOb-
ject позволяет строить объекты любых серверов OLE Automation.
OLE Automation — одно из достижений протокола Component Object Model
(СОМ). Сервер OLE Automation представляет собой программу (построенную в соот-
ветствии с требованиями стандарта СОМ), которая может предоставить в общее поль-
зование часть своего интерфейса. Серверы OLE Automation обеспечивают сервис для
других программ или используются в качестве самостоятельных приложений.
Access 2002 — это полноценный сервер OLE Automation.
Резюме
Простота и сложность объектно-ориентированного подхода к программированию за-
ключается в огромных возможностях создания новых полезных типов данных. В отсут-
ствие классов не было бы
и компонентов, задача создания графических интер-
фейсов оставалась бы чрезвычайно сложной и — куда уж страшнее! — не появился бы
язык программирования VBA. VBA — это дитя, плоть от плоти, объектной модели.
396
Часть VIII.
программирование в Access

На прошлых занятиях рассказывалось о том, как пользоваться готовыми классами.
Но теперь вы изучили способы создания собственных. Класс — это тип данных, опре-
деляемый пользователем-программистом. Код класса сохраняется в отдельном модуле.
Классы состоят из свойств и методов, в совокупности называемых атрибутами, или
членами. Свойства — это элементы данных, а методы — правила их обработки.
Уровень доступности атрибутов класса задается с помощью служебных слов-
Public и Private. Члены класса, помеченные словом Private, дос-
тупны исключительно для методов этого же класса, и забота о них целиком возложена
на плечи автора-программиста. Атрибуты Public служат частью внешнего, общего
интерфейса класса.
Объектно-ориентированный подход предоставляет большое количество преиму-
ществ и целым коллективам программистов, работающих над серьезными проектами,
и даже любителям-одиночкам, позволяя концентрировать внимание на самых значи-
тельных частях общей задачи. Классы VBA предоставляют вам все необходимое.
Следующая глава, "22-й час. Совершенствование типов данных", посвящена рас-
смотрению ряда усовершенствованных возможностей объектно-ориентированного
подхода, причем в ходе ее изложения мы будем опираться на материал текущего заня-
тия. Не упустите случая закрепить свои "объектно-ориентированные" навыки и озна-
комьтесь с разделами "Вопросы и ответы" и "Задания", приведенными ниже.
Вопросы и ответы
Вопрос. Как только процедуры и функции становятся частью класса, их перестают
называть процедурами и функциями. Почему?
Ответ.
Это не просто игра слов. Новые термины подразумевают расширенное тол-
кование. Методы — да, это процедуры и функции, но за ними стоит кое-что еще.
Property-методы можно трактовать и как данные. А свойства — это больше чем
обычные элементы информации. Новая терминология требует и нового осмысления.
Без нее мы не сможем понимать друг друга.
Вопрос. Так ли принципиален вопрос освоения способов объектно-ориентированного
программирования в контексте использования Access?
Ответ.
И да, и нет. Практически все, с чем вы имеете дело, работая в Access, свя-
зано с теми или иными аспектами объектно-ориентированного программирования.
Разумеется, можно заниматься программированием для Access, ограничившись при-
менением существующих классов, — для решения многих задач этого достаточно. Но
наиболее эффективные результаты достигаются только тогда, когда вы способны ис-
пользовать для решения конкретной проблемы все имеющиеся возможности.
Вопрос. Должен ли я досконально овладеть всеми идиомами объектно-
ориентированного подхода, чтобы суметь построить собственный класс?
Ответ.
Нет. На этом занятии были рассмотрены базовые понятия и приемы, и те-
перь вы вполне в состоянии создавать собственные классы, хотя в VBA существуют и
более сложные процессы. Важно понимать, что различные объектно-
ориентированные языки программирования далеко не равноценны. В Object Pascal
или C++, например, поддерживается множество других идиом, и поэтому каждый из
них гораздо более труден для изучения — разумеется, они более мощные. Access VBA
предлагает разумный компромисс между гибкостью и эффективностью, с одной сто-
роны, и простотой использования — с другой.
Вопрос. Как узнать, когда именно следует создавать класс?
Ответ.
Хороший вопрос. Далеко не обязательно, чтобы весь код программы при-
надлежал классам. Если вы сталкиваетесь с повторяющейся задачей, охватывающей
21-й час. Основы программирования классов 397

определенный круг данных и способов их обработки, соответствующая группа строк
кода становится подходящей "кандидатурой" для оформления в виде класса. Процесс
перехода структурного кода в объектно-ориентированный может происходить посте-
пенно. Наглядный пример — класс
Работа с файлами предполагает на-
личие средств их открытия, чтения, записи и т.п. И со временем вполне естественно
возникает мысль об объединении всех требуемых элементов данных и процедур в
единое целое, класс.
Задания
Ниже приведены тестовые задания и упражнения, которые помогут вам самостоя-
тельно проверить уровень освоения материала, изложенного в этой главе. Ответы на
вопросы вы найдете в приложении.
Тесты
1. Тип и переменная находятся в такой же взаимосвязи, как класс и ... (вставьте про-
пущенный термин).
2. Класс может содержать свойства, для которых не определены методы Property.
Верно ли это?
3. Каким обобщенным термином обозначаются процедуры и функции-члены класса?
4. Перечислите действия, необходимые для создания нового модуля класса.
5. С помощью каких служебных слов обозначаются Property-методы, предназначен-
ные для чтения переменных и присвоения им значений?
1. Определите класс, содержащий переменные-свойства для хранения данных о теле-
фонных номерах и именах их владельцев.
2. Наберите код класса FileStream в окне редактора. Постройте тестовую процедуру,
которая в целях проверки корректности кода класса должна записывать в файл
строку текста, возвращать указатель в начало файла и считывать ту же строку.
3. Примените объект Scripting. FileSystemObject для чтения файла с данными,
сохраненными при выполнении предыдущего упражнения.
398 Часть VIII. Объектно-ориентированное программирование в Access

22-й час
Совершенствование типов
Анализ в программировании — это процесс постижения проблемы. Синтез — ее
реализация. Примеры формального анализа возникают там, где аналитик, общаясь с
заказчиком или пользователем будущей программы, выясняет природу проблемы.
Неформальный подход к анализу проявляется в тех случаях, когда вы сами, совер-
шенно самостоятельно решаете, что для достижения результата должна быть написана
определенная программа. Подобные примеры характерны для ситуаций, когда коли-
чество участников рабочей группы не превышает двух-трех человек. В крупномас-
штабных проектах анализ может выполняться одними людьми, а практическая реали-
зация принятых решений —
В настоящий момент вы будете выступать и в
роли аналитика, и в роли программиста.
Существует опасность бессистемного создания классов, а также бессмысленного их
наполнения. На этом занятии речь идет о том, как создать удачный класс и его объекты.
Основные темы занятия.
• Критерии "классового" подхода.
• Принципы объектно-ориентированного проектирования.
• Расширение возможностей существующих классов посредством агрегации.
• Использование новых классов.
Определение цели
На этом занятии основной причиной, побуждающей строить новый класс, будем
считать потребность в практической реализации ассоциативного массива.
Ассоциатив-
ным
называется массив, в котором каждому значению соответствует именованный
ключ. Об ассоциативном массиве можно говорить как о разновидности базы данных.
Окружающая действительность предлагает немало образцов задач, нуждающихся в
решении с помощью ассоциативных массивов. Знакомые всем файлы INI, предназна-