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

О понятии агрегации
Агрегацию можно трактовать как способ, придуманный человеком для преодоле-
ния барьера сложности восприятия окружающего мира. Все мы, усвоив тысячелетний
опыт наших предшественников, научились "втискивать" небывало сложные понятия в
относительно простые образы.
Что вы можете сказать о любви? Да, это чертовски сложная штука! Говорите, что
хотите — о полете бабочки над цветущим лугом, родных глазах со слезинками сча-
стья, грубых биохимических реакциях в организме, закоулках подсознания, в кото-
рых, согласно Фрейду, скрываются низменные страсти, о сонетах Шекспира и ли-
рике Байрона — все равно любовь остается абстракцией, а абстракции чудовищно
сложны. Впрочем, вы и я способны совместить все мыслимые аспекты этого со-
стояния человеческой души в одном представлении и назвать его простым сло-
вом —
любовь.
Теперь все понятно (нет — конечно, далеко не все, а может быть,
непонятно ничего вовсе).
Технические идеи также бывают сложными. Я говорю
а подразумеваю
"язык программирования для Windows, обладающий продолжительной историей раз-
вития и имеющий какое-то отношение к парню по имени Билл Гейтс". Все это труд-
нопроизносимое многословие укладывается в три буквы —
V-B-A.
Дополнительное
преимущество агрегации (пусть даже два человека по-разному истолковывают некое
"агрегированное" понятие) состоит в том, что она обеспечивает отправную точку, ко-
торая окажется несомненно полезной в ходе дальнейших обсуждений и уточнений.
Теперь даже сложная вещь может быть понята и адекватно воспринята, если растол-
ковать подробно в письменном или устном виде.
Типы данных — это та начальная ступень, которую программисты, искавшие спо-
собы агрегации простых элементов данных в более сложные информационные едини-
цы, просто не могли обойти. Языки — естественные и искусственные — и сейчас
продолжают развиваться. Не секрет, что компьютер породил даже целый пласт новой
жаргонной лексики.
Типы данных, определяемые пользователем, — это совсем не страшно. Так что да-
вайте, не мудрствуя лукаво, приступим к делу.
Объявление новых типов
В своей основной обязательной форме объявление типа требует двух
строк кода. Первая строка содержит служебное слово Туре, за которым
следует уникальное название типа, а вторая состоит из пары слов — End
Туре. Синтаксис объявления типа, не содержащего членов, выглядит так:
Туре
A End Type
В типе, определенном пользователем, должен содержаться хотя бы один
элемент.
Все слова в определении типа вводятся буквально, без кавычек и разделителей.
Тип необходимо наделить уникальным именем. Правила именования типов обычны;
в качестве имени может использоваться любая последовательность допустимых сим-
волов. Имя должно быть внятным и красноречивым, отражающим суть и назначение
200 Часть IV. Определение типов данных. Использование массивов и коллекций

данных. Объявление типа подчиняется и другим правилам. Все объявления типов
должны располагаться в начале модуля, вне каких бы то ни было функций или проце-
дур, и содержать, по меньшей мере, по одному члену. Размещение объявлений типов
внутри функций (процедур) не допускается.
Новый термин
Член
типа, определенного пользователем, — это переменная, служащая
частью конструкции типа и указываемая в пределах между первой и по-
следней строками объявления типа.
Если тип объявлен верно, он становится частью всплывающего в окне модуля спи-
ска доступных типов (рис.
Листинг
демонстрирует пример объявления про-
стого типа, содержащего единственный член — целочисленную переменную.
\
contacts
Option
Access
модуля с раскрытым списком доступных
данных
Листинг
Пример объявления простого пользовательского типа данных
Туре ААА
As
End Type
Integer
Sub NewType ( )
Dim
A As AAA
= 5
End Sub
час. От сложного к простому: создание собственных типов данных
201

Строки 1-3 листинга
содержат объявление нового типа, ААА. Стро-
ка 2 тела объявления определяет целочисленную переменную-член
Строки
иллюстрируют
использования созданного
типа: в строке 6 содержится объявление объекта А нового типа, а в стро-
ке 7 — оператор присваивания значения его члену (переменной Anlnt).
Обратите внимание на использование в строке 7 символа точки. Запись вида
трактуется компилятором следующим образом: "Необхо-
димо взять экземпляр
и обратиться к его члену
Кон-
Dim A As ААА называют
объявлением экземпляра (объекта)
типа или класса.
Если представить человечество как "класс", каждого из нас можно назвать
"экземпляром" (или "объектом") этого класса.
Отдельный экземпляр созданного типа получает в свое распоряжение собственные
копии переменных-членов типа. Тип можно воспринимать как оригинал, с которого
снимается необходимое число слепков. Поэтому при каждом объявлении экземпляра
пользовательского типа данных в памяти создается новый полный комплект перемен-
ных, служащих частью этого типа. Если строку 6 листинга
переписать, введя Dim
A As ААА, В As ААА, это будет означать создание двух объектов типа ААА — А и В.
Присваивание переменной Anlnt объекта А значения 5 не оказывает никакого влия-
ния на содержимое одноименной переменной объекта В.
Какие данные может содержать
пользовательский тип
В составе типа, определяемого пользователем, могут находиться самые разнооб-
разные данные — строки, целые и вещественные числа, переменные для хранения
значений валюты, даты и даже экземпляры других нестандартных типов — одним сло-
вом, объекты всех встроенных и созданных типов данных.
В пользовательский тип данных, однако, не могут включаться объекты, помечен-
ные служебными словами Const, Static и Global, а также функции и подпрограм-
мы. Напротив, последние могут быть членами
классов
VBA, хотя другие языки позво-
ляют размещать определения функций даже в типах данных.
Некоторые языки программирования, например С, допускают опре-
деление функций в составе типов данных. Аналогом директивы Туре в
языке С служит слово
Это полезно знать, поскольку сама опе-
рационная система Windows написана на языке С, а функции Windows
Application Programming Interface (API) в состоянии существенно
расширить возможности вашего VBA-кода. Многие из них предпо-
лагают наличие в прикладной программе определений соответствующих
типов данных.
Листинг
содержит примеры использования в составе создаваемого типа объяв-
лений самых разных переменных и иллюстрирует приемы работы с ними. Точное ко-
личество и состав набора членов определяемого типа данных обусловливаются исклю-
чительно потребностями
задачи.
202 Часть IV. Определение типов данных. Использование массивов и коллекций

Листинг
Пример использования сложного типа данных
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Type LotsaData
AString As String
Anint As Integer
As Double
As Currency
TheDate As Date
TheTime As Date
TripleA As AAA
RecordSet As
End Type
Sub
)
Dim Data As LotsaData
= "Что-то вот
= 13
=
= 5000
= Date
= Time
= 16
Set
= Nothing
End Sub
Строки
листинга 11.2 содержат объявление типа данных, назван-
ного LotsaData. В строке 2 объявляется символьная переменная, в стро-
ке 3 —
в строке 4 — двойной точности; строка 5 содер-
жит определение члена типа Currency, строки 6 и 7 — переменные типа
Date; в строке 8 объявляется экземпляр типа ААА, а строка 9 содержит
объявление объекта стандартного класса
В строках 12-23, где находится код процедуры Initialize, создается объект типа
LotsaData и выполняется инициализация его членов. После создания экземпляра
типа (строка 13) разрешается ссылаться на его члены с помощью оператора точки
Чтобы получить доступ к членам вложенных объектов составных типов, достаточно
перечислить цепочку имен, отделяя их символом точки (как сделано в строке 21).
Конструкция
= 16 означает следующее: "присвоить литераль-
ное значение 16 переменной Anint из состава такого объекта TripleA типа ААА, ко-
торый, в свою очередь, служит членом экземпляра Data типа
Новый термин
Новый термин
Идиома
в программировании — это способ выражения законченной мыс-
ли с помощью средств языка. Например, пользовательский тип дан-
ных — это идиома.
Класс —
это тип данных, экземпляры которого могут не только что-то
"знать", но и "уметь". "Знание" заключено в содержимом членов-
объектов данных, а "умение" - в наборе членов-функций и процедур.
Воспринимайте классы как результат развития концепции пользователь-
ских типов, полученный за счет добавления в состав типа функций и
процедур.
-й час. От сложного к простому: создание собственных типов данных
203

Новый термин
Объект —
это экземпляр класса. (В ходе изложения мы иногда, отступая
от канонов строгости, употребляем это слово также для ссылки на эле-
менты данных других типов.)
Для обеспечения поддержки парадигмы объектно-ориентированного программиро-
вания в язык и среду
на протяжении нескольких последних лет были внесены
существенные изменения. RecordSet, член типа
определенного в
тексте листинга 11.2, — это объект класса
Разработчики языка
VBA и участники проекта по его модернизации, связанной с добавлением объектных
возможностей, решили ввести средства, позволяющие различать присваивание
обыч-
ное
и
объектное.
Вот почему в строке 22 используется служебное слово Set. Более
подробные сведения о классах и их объектах приведены в главе "21-й час. Основы
программирования классов".
Создание экземпляров пользовательских
типов данных
Объявления переменных (экземпляров) пользовательских типов данных подчиня-
ются общим правилам. Такие конструкции могут находиться как внутри функций или
подпрограмм, так и за их пределами. Помните: все переменные, объявленные в теле
любой функции или процедуры, называются
а за ее пределами —
глобаль-
ными.
Признак "глобальности" объекта можно явно подчеркнуть заданием служебного
слова Global, а внутри функций (подпрограмм) допускается использовать
тор Static. Листинг 11.3 содержит ряд примеров объявления и применения локаль-
ных, глобальных и статических экземпляров пользовательских типов данных.
Листинг 11.3. Примеры использования локальных, глобальных и статических
объектов данных
9
10:
11:
Type
NoData As Integer
End Type
Dim
As Typel
Global T2 As Typel
Sub
)
Dim T3 As Typel
Static T4 As Typel
End Sub
В строках 1-3 листинга
находится объявление типа Typel, содер-
жащего один член — целочисленную переменную. В строке 5 создается
экземпляр
нового типа; хотя объявление лишено явного указания
служебного слова Global. Переменная
трактуется компилятором как
глобальная внутри текущего модуля, и к ней разрешается обращаться из
любой строки этого модуля, хотя из других модулей, которые могут су-
ществовать в программе, она не "видна". Уровень относительной дос-
тупности элементов данных, функций и процедур задается контекстом их
определения. Строка 6 содержит явное объявление глобального экземп-
204 Часть IV. Определение типов данных. Использование массивов и коллекций