|
Программирование >> Проектирование интерфейса пользователя
Строки 1-3 листинга содержат объявление нового типа, ААА. Строка 2 тела объявления определяет целочисленную переменную-член Строки иллюстрируют использования созданного типа: в строке 6 содержится объявление объекта А нового типа, а в строке 7 - оператор присваивания значения его члену (переменной Anlnt). Обратите внимание на использование в строке 7 символа точки. Запись вида Имя- трактуется компилятором следующим образом: Необходимо взять экземпляр ш1ляраТипа и обратиться к его член ена . Конструкцию Dim А As AAA называют объявлением экземпляра (объекта) тина или класса. Если представить человечество как класс , каждого из нас можно назвать экземпляром (или объектом ) этого класса. Отдельный экземпляр созданного типа получает в свое распоряжение собственные копии переменных-членов типа. Тип можно воспринимать как оригинал, с которого снимается необходимое число слепков. Поэтому при каждом объявлении экземпляра пользовательского типа данных в памяти создается новый полный комплект переменных, служащих частью этого типа. Если строку 6 листинга i. i переписать, введя Dim A As ААА, В As ААА, это будет означать создание двух объектов типа ААА - А и В. Присваивание переменной Anlnt объекта А значения 5 не оказывает никакого влияния на содержимое одноименной переменной объекта В. Какие данные может содержать пользовательский тип В составе типа, определяемого пользователем, могут находиться самые разнообразные данные - строки, целые и вещественные числа, переменные для хранения значений валюты, даты и даже экземпляры других нестандартных типов - одним словом, объекты всех встроенных и созданных типов данных. В пользовательский тип данных, однако, не могут включаться объекты, помеченные служебными словами Const, Static и Global, а также функции и подпрограммы. Напротив, последние могут быть членами классов VBA, хотя другие языки позволяют размещать определения функций даже в типах данных. Некоторые языки программирования, например С, допускают определение функций в составе типов данных. Аналогом директивы Туре в языке С служит слов uct. Это полезно знать, поскольку сама операционная система Windows написана на языке С, а функции Windows Application Programming Interface (API) в состоянии существенно расширить возможности вашего VBA-кода. Многие из них предполагают наличие в прикладной программе определений соответствующих типов данных. ЛистинМ 1.2 содержит примеры использования в составе создаваемого типа объявлений самых разных переменных и иллюстрирует приемы работы с ними. Точное количество и состав набора членов определяемого типа данных обусловливаются исключительно потребностями конкретной задачи. Листинг.2. Пример использования сложного типа данных 2 3 4 7 8 5 10 11 12 13 14 15 16 17 18 19 20 21 22 23 Type LotsaData AString As String Anint As Integer ADouble As Double SomeMone- As Currency TheDate As Date TheTime As Date TrrpleA As AAA RecordSet As ADODB.Recordset End Type Su alize ( ) Dim Data As LotsaData Data.AString = Что-то вот эдакое! Data.Anint = 13 Data.ADouble = 34000000000000# Data.SomeMoney = 5000 MsgBox Data.SomeMoney Data.TheDate = Date Data.TheTime = Time Data.TripleA.Anint = 16 Set Data.RecordSet = Nothing End Sub Строки листинга 11.2 содержат объявление типа данных, назван- ного LotsaData. В строке 2 объявляется символьная переменная, в строке 3 - целочисленная, в строке 4 - двойной точности; строка 5 содержит определение члена типа Currency, строки 6 и 7 - переменные типа Date; в строке 8 объявляется экземпляр типа ААА, а строка 9 содержит объявление объекта стандартного класса ADODB. Recordset. В строках 12-23, где находится код процедуры Initialize, создается объект типа LotsaData и выполняется инициализация его членов. После создания экземпляра типа (строка 13) разрешается ссылаться на его члены с помошью оператора точки (.). Чтобы получить доступ к членам вложенных объектов составных типов, достаточно перечислить цепочку имен, отделяя их символом точки (как сделано в строке 21). Конструкция Data.TripleA.Anint = 16 означает следдошее: присвоить литеральное значение 16 переменной Anint из состава такого объекта TripleA тина AAA, который, в свою очередь, служит членом экземпляра Data типа MoreComplexType . Новый термин Новый термин Идиома в программировании - это способ выражения законченной мысли с помощью средств языка. Например, пользовательский тип данных - это идиома. Класс - это тип данных, экземпляры которого могут не только что-то знать , но и уметь . Знание заключено в содержимом членов-объектов данных, а умение - в наборе членов-функций и процедур. Воспринимайте классы как результат развития концепции пользовательских типов, полученный за счет добавления в состав типа функций и процедур. Новый термин Объект - это экземпляр класса. (В ходе изложения мы иногда, отступая от канонов строгости, употребляем это слово также для ссылки на элементы данных других типов.) Для обеспечения поддержки парадигмы объектно-ориентированного программирования в язык и среду VBA на протяжении нескольких последних лет были внесены существенные изменения. RecordSet, член типа MoreComplexType, определенного в тексте листинга 11.2, - это объект класса ADODB. Recordset. Разработчики языка VBA и участники проекта по его модернизации, связанной с добавлением объектных возможностей, решили ввести средства, позволяющие различать присваивание обычное и объектное. Вот почему в строке 22 используется служебное слово Set. Более подробные сведения о классах и их объектах приведены в главе 21-й час. Основы программирования классов . Создание экземпляров пользовательских типов данных Объявления переменных (экземпляров) пользовательских типов данных подчиняются общим правилам. Такие конструкции могут находиться как внутри функций или подпрограмм, так и за их пределами. Помните: все переменные, объявленные в теле любой функции или процедуры, называются локальными, а за ее пределами - глобальными. Признак глобальности объекта можно явно подчеркнуть заданием служебного слова Global, а внутри функций (подпрограмм) допускается использовать квалификатор Static. Листинг 11.3 содержит ряд примеров объявления и применения локальных, глобальных и статических экземпляров пользовательских типов данных. Листинг 11.3. Примеры использования локальных, глобальных и статических объектов данных 9 10: 11: Type Typel NoData As Integer End Type Di Tl As Typel Global T2 As Typel Su peVars ( ) Dim T3 As Typel Static T4 As Typel End Sub Анализ В строках 1-3 листинга находится объявление типа Typel, содержащего один член - целочисленную переменную. В строке 5 создается экземпляр Tl нового типа; хотя объявление лишено явного указания служебного слова Global. Переменная трактуется компилятором как глобальная внутри текущего модуля, и к ней разрешается обращаться из любой строки этого модуля, хотя из других модулей, которые могут существовать в программе, она не видна . Уровень относительной доступности элементов данных, функций и процедур задается контекстом их определения. Строка 6 содержит явное объявление глобального экземп-
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |