Объекты и переменные
Попробуем обобщить сведения об объектах и переменных. Начнем с того, что у них общего и что их различает. Если есть описания:
Dim X As T, Y As T1
то без контекста понять нельзя, что есть X и Y - "обычные" переменные или объекты. Например, если T - тип, заданный пользователем, а T1 - определенный им класс, то X - это переменная, а Y - объект. С нашей точки зрения, класс и тип - понятия, если не эквивалентные, то близкие по смыслу. Также близки понятия объекта и переменной. Класс - это специальная форма определения типа. Если есть тип T и класс T1, то можно объявить произвольное число экземпляров типа T и класса T1. Экземпляры типа T называются переменными, класса T1 - объектами. Класс задает свойства, методы и события своих объектов. Тип всегда задает свойства, неявно - методы, но никогда - события.
В объявлении: Dim Y As T1, где T1 - класс, объект Y мы часто называем переменной, говоря, что она имеет тип Object. Переменные типа Object рассматриваются как ссылки, задающие адрес памяти, где хранится объект. У них фиксированная длина 4 байта. При объявлении такой переменной память для самого объекта может и не отводиться в отличие от обычных переменных, поэтому не определено и значение ссылки. Задать ссылку - связать переменную с объектом - можно двумя путями:
- создать новый объект, выделив ему память;
- сослаться на уже существующий объект.
Есть два способа связывания: раннее и позднее . При позднем связывании переменная объявляется так:
Dim V As Object
Это объявление говорит о том, что переменная является объектом (ссылкой), но ничего о классе этого объекта - он может быть произвольным, и выяснится это только динамически при выполнении программы, когда переменная V будет связываться с только что созданным или существующим объектом того или иного класса. Поэтому такое связывание называется поздним, или динамическим. Естественно, что необъявленные переменные или те, которым тип при объявлении не задан (значит, у них по умолчанию тип Variant), допускают только позднее связывание.
При раннем связывании в момент объявления указывается класс объекта, например:
Dim Петров As Личность, Козлов As Личность
Это позволяет еще на этапе трансляции проверять, допустимы ли те или иные операции над объектами Козлов и Петров. За исключением весьма сомнительного преимущества позднего связывания - возможностью связаться с объектом любого типа, ранее связывание предпочтительнее во всех отношениях. Для программиста особенно важно, что при раннем связывании, когда задан класс объекта, в процессе работы с этим объектом идет подсказка о его свойствах и методах. Подсказка облегчает жизнь программиста, и лишаться ее не стоит. Поэтому наш совет - выбирайте раннее связывание.
Теперь о том, как создаются новые объекты, и как происходит связывание с объектами, уже существующими. Для удобства разделим все объекты на три группы:
- объекты, чей класс определен пользователем в одном из модулей класса; например, объекты класса Личность, созданного в этой лекции;
- объекты родового приложения (Excel, Word, PowerPoint), которому принадлежит проект и которые доступны по умолчанию;
- ActiveX и Com AddIns -объекты, в частности, объекты других приложений Office 97 при их подключении к исходному приложению. Например, в Word можно подключить объекты Excel, а документы Word включить в рабочие листы Excel.