Свойства Visible, Enabled, Checked
В последней строке верхней половины окна редактора меню есть еще три свойства элементов меню. Свойство Visible позволяет отображать или скрывать отдельные элементы меню. Свойство Enabled функционирует так же, как в других элементах управления: если его значение False, то текст надписи подсвечивается серым цветом и пользователь не может выполнить эту команду меню .Свойство Checked позволяет пометить выбранный элемент меню галочкой.
Свойств элементов меню можно изменять и во время выполнения. При этом синтаксис такой же, как и для других элементов управления:
mnuFLoad.Caption = ”&3агрузить”
mnuFLoad.Enabled = False
mnuFLoad.Visible = False
mnuFLoad.Checked = True
Для создания процедуры выполнения команды меню следует во время проектирования выбрать соответствующий пункт в форме. При этом создастся процедура обработки события Click.
Классы
Объектно-ориентированное программирование - это методология разработки программ, основанная на представлении программы в виде совокупности объектов, каждый из которых является реализацией определенного класса. В объектно-ориентированном программировании объект представляет собой элемент приложения, например лист, ячейку, диаграмму, форму или отчет. Программный код и данные структурируются так, чтобы имитировалось поведение фактически существующих объектов.
В объектно-ориентированном программировании важную роль играют четыре понятия. При абстрагировании реальные процессы ограничиваются их функциями, существенными для программирования. Внутреннее содержимое объекта защищается от внешнего мира посредством инкапсуляции. Благодаря наследованию уже запрограммированные функциональные возможности можно использовать и для других объектов. Полиморфизм позволяет использовать различные объекты и по-разному реализуемые функции под одним именем.
Объекты являются программным представлением физических и/или логических сущностей реального мира. Они необходимы для моделирования поведения физических или логических объектов, которые они представляют. Например, элемент управления TextBox служит для отображения или редактирования текста в форме. Для добавления элемента управления TextBox в форму не нужно писать ни строчки - можно просто воспользоваться готовым объектом TextBox из панели элементов. Для изменения поведения и состояния элементов управления используются их свойства и методы.
На панели элементов Visual Basic находятся, строго говоря, не объекты, а классы. Различие между классами и объектами состоит в том, что объекты в Visual Basic существуют только во время выполнения. Классы же используются для задания структуры объектов. Во время выполнения создаются копии классов. Благодаря этому для данного класса можно создавать произвольное количество объектов. С другой стороны, классы образуют группы одноименных объектов.
Абстрагирование
Человек использует абстрагирование для того, чтобы проще описывать сложные объекты окружающей среды. Представьте себе, что в обычном языке не существует объектов (понятий), абстрагирующих окружающий мир. Тогда для того, чтобы сообщить другому человеку о каком то предмете, например автомобиле, пришлось бы его подробно описывать. Трудно вообразить, сколько времени потребовалось бы для описания объекта. Причем описание должно быть очень точным, чтобы не возникло ошибочное представление о другом объекте.
То же относится и к программированию. Например, для использования текстового окна (TextBox) не нужно разрабатывать специальный драйвер графической карты. Вы просто используете объект класса TextBox. Этот абстрагированный объект содержит все, что нужно для редактирования текста в Windows.
Если вы создаете собственное приложение, то большую помощь при этом окажут собственные объекты. В исходном коде вы используете программное представление таких объектов, как фирмы, служащие, овары, счета и многое другое. Такой способ рассмотрения больше соответствует реальности, чем при чисто процедурной разработке приложений..
Инкапсуляция
Объекты позволяют значительно упростить разработку приложения. В очень редких случаях разработчика интересует внутренняя реализация объектов. Главное, чтобы объект обеспечивал функции, которые он должен предоставить. Поэтому объекты защищены от внешнего вмешательства. Например, если вы хотите снять деньги со счета через банкомат, то без карточки это невозможно, так как его содержимое защищено от доступа случайного клиента. Денежные автоматы защищены - инкапсулированы. На процессы, протекающие внутри банкомата, и на его содержимое клиент не имеет прямого влияния.
Взаимодействие клиента с объектом происходит через интерфейс. Обычно интерфейс определяет единственный способ входа в объект и выхода из него; детали реализации остаются инкапсулированными.
При создании собственных объектов необходимо организовать такие же интерфейсы. В объектах Visual Basic интерфейсами являются свойства, методы и события. Только они предоставляются данным объектом в распоряжение других объектов. Благодаря этому система программирования предотвращает доступ других объектов (клиентов) к внутренним переменным состояния объекта, которые могут обрабатываться только предусмотренными для этого процедурами.
Это имеет большое значение при сопровождении программы. Если в связи с изменившимися обстоятельствами потребуется изменить реализацию интерфейса объекта, то изменение ограничится только процедурой, относящейся к свойству или методу. Если синтаксис интерфейса не изменился, то можно с уверенностью сказать, что изменение не отразится на других проектах, использующих этот объект. В противном случае при попытке использовать переменную, которая не существует в новом варианте объекта, в других проектах может возникнуть ошибка.
Инкапсуляция поддерживает абстрагирование тем, что объект можно использовать, не зная, как он реализован внутри. Если программист поддерживает определенны интерфейс, то инкапсуляцию можно обеспечить и при процедурном построении программы. В объектно-ориентированных языках реализация инкапсуляции обеспечивается системой программирования.
Наследование
Наследованием мы называем повторное использование уже созданной части кода в других проектах. Посредством наследования формируются связи между объектами, а для выражения процесса используют понятия о родителях и потомках. В программировании наследование моделирует связь “это – является” или “это – имеет”. Наследование служит для сокращения избыточности кода и суть его заключается в том, что уже существующий интерфейс вместе с его программной частью можно использовать для других объектов. При наследовании могут также проводиться изменения интерфейсов.
Полиморфизм
Полиморфизм означает, что различные объекты используют одинаковую абстракцию, т.е. могут обладать свойствами и методами с одинаковыми именами. Однако обращение к ним будет вызывать различную реакцию для различных объектов. Большое достоинство полиморфизма состоит в том, что при использовании объекта можно вызывать определенное свойство или метод, не заботясь о том, как объект выполняет задачу. Это очень важно при модификации программного обеспечения. Изменения или новшества просто адаптируются к имеющимся компонентам приложения.
Модуль класса
В Visual Basic классы используются в качестве шаблонов объектов. С их помощью во время выполнения можно создавать любое количество объектов одного класса. Внутренняя структура класса передается объекту посредством модуля класса. Таким образом, класс описывает семейство объектов,а каждый экземпляр класса является уникальным представителем этого семейства.
При написании программ, для имитации поведения реальных объектов, в объектах объединяются как принципы действия, так и данные.
Для создания собственного объекта нужен шаблон. Эти шаблоны в Visual Basic представляют модули классов. С помощью команды Project \ Add Class Module или соответствующе кнопки панели инструментов Visual Basic такой модуль класса можно добавить в проект.
После добавления модуля класса появляется пустое окно кода, в котором можно реализовать класс. В проектах типа Standard.EXE классы имеют только одно свойство - имя класса.
В среде разработки Visual Basic все модули класса сохраняются как отдельные файлы с расширением CLS..
В качестве классов могут также применяться и формы, в частности, если необходимо, чтобы создаваемый объект функционировал как окно. Все описанные здесь действия можно выполнять как с модулем класса, так и с формой. После добавления модуля класса или формы в проект можно создавать свойства и методы.
Мастер классов
Visual Basic предоставляет и другую возможность создания классов. Если на вкладке Environment диалогового окна Tools \ 0ptions в группе Show Templates For активизировать опцию Class Modules, то при добавлении модуля класса отобразится диалоговое окно Add Class Module. С его помощью можно либо создать пустой модуль класса, либо запустить мастер классов Visual Basic (утилита Class Builder). Для редактирования уже существующих в проекте классов эту утилиту можно вызвать также посредством команды Class Builder Utility меню Add Ins из окна кода Visual Basic. При помощи команды File \ New \ CIass данного мастера можно добавить новый модуль класса. В открывающемся диалоговом окне Class Module Builder следует задать имя класса и, при необходимости, казать ряд других параметров.
В списке Based On можно указать имя класса, на котором основан создаваемый класс. На вкладке Attributes можно задать описание модуля класса (комментарий), а также имя справочного файла для данного класса.
Чтобы все изменения, выполненные мастером, были перенесены в проект, следует либо выполнить команду Update Project меню Files мастера, либо при завершении работы с мастером утвердительно ответить на вопрос о необходимости сохранения изменений. С помощью мастера, кроме классов, можно создавать собственные коллекции, добавлять к ним сво ства, методы и события.
Свойства
Чтобы можно было использовать объекты класса (Сlass или Form), необходимо создать соответствующие свойства и методы. Свойства в общем случае предназначены для изменения значений переменных состояния объектов. Например, свойство Text текстового окна позволяет задавать либо считывать значение отображаемой строки. При этом обычно объект не выполняет никаких действий. Свойства, не соответствующие этому правилу (например, CommonDialog1.Action = 1), следует заменять методами, реализующими аналогичные функции (CornmonDialog1.ShowOpen).
Есть две возможности реализации свойств в классах: использование процедур свойств, позволяющих контролировать значения свойств, или объявление в классе переменных общего доступа (Public). Однако, переменные, объявленные как Public, не обладают всеми возможностями процедур свойств.
Процедуры свойств
Кроме процедур Sub и Function, в Visual Basic есть и третья категория - процедуры Property, с помощью которых можно определять свойства класса. Чтобы процедуры были видимыми вне собственного контейнера, их следует объявлять как Public.
Поскольку значения свойств можно как считывать, так и устанавливать, то для одного свойства могут потребоваться две процедуры с одним и тем же именем: одна для чтения, другая для присвоения значения свойства. Чтобы различить их, в заголовке процедуры используется дополнительное ключевое слово (Let или Get).
Оператор Property Let
В Visual Basic операция присваивания значения переменной имеет следующий синтаксис:
[Let] имя_перемнной = выражение
Явное использование необязательного ключевого слова Let зависит от стиля программирования, поэтому при присваивании значения переменной оно обычно не указывается. Однако в процедуре присваивания значения свойству использование ключевого слова Let обязательно, так как в этом случае оно указывает, что данная процедура является процедурой задания значения свойства.
Public Property Let Property_Name(ByVal vNewValue As Variant)
mVariable = vNewValue
End Property
Переменная vNewValue содержит значение, присваиваемое свойству. При этом тип данных этой переменной должен соответствовать типу данных свойства.
Оператор Property Get
Процедура считывания значения свойства объявляется с использованием ключевого слова Get.
Public Property Get Property_Name () As Variant
Property_Name = mVariable
End Property
Здесь, как и в процедуре Function, возвращаемое значение присваивается имени процедуры. При создании процедуры Property Get следует обратить внимание на то, что она использует тот же тип данных, что и одноименная процедура Property Let.
Обычно при определении свойства необходимо задавать обе процедуры. Воспользовавшись командой Add Procedure меню Tools, можно сэкономить время, поскольку эта команда позволяет создать одновременно обе процедуры свойств (Property Get и Property Let).
Оператор Property Set
Существует и третий тип процедур свойств - процедура Property Set. Процедура Set используется аналогично Let, но передает не значение свойства, а ссылку на объект.
Public Property Set Property_Name (ByVal objNewValue As Object)
Set Property_Name = objNewValue
End Property
В этой связи важную роль играет свойство по умолчанию. Каждый элемент управления имеет такое свойство, которое всегда используется Visual Basic, если имя свойства в коде явно не указано.
Text1 = ”Hello” ‘равнозначно Textl.Text =”Hello”
vVariable =Text1
В приведенном примере свойству Text текстового окна присваивается определенное значение. Во второq строке это значение считывается. Но если переменной объекта требуется передать сам объект Text1, то строка кода должна выглядеть иначе - при присваивании объектных переменных в Visual Basic вместо неявного ключевого слова Let следует явно использовать ключевое слово Set.
vVariable = Text1 ‘Содержимое: ”Hello”
Set vVariable = Text1 ‘Содержимое: копия Text1
Ограничение доступа
Разделение процедур свойств на процедуры присваивания и процедуры считывания позволяет легко создавать свойства, доступные только для чтения или только для изменения. Допустим, нужно ограничить доступ к свойству и сделать его доступным только для чтения. Для этого достаточно создать только одну процедуру -
В этом окне задается имя,тип данных и доступность сво ства.При
необходимости можно назначить это сво ство свойством по умолчанию.
Если при создании сво ства в окне Property Builder установить опцию
Public Property
или Friend Property,мастер добавит в модуль класса три процедуры Property
(Let,Get и Set),а также внутреннюю переменную класса для хранения значения
свойства.
Private mvarProperty_Name As Variant Public Property Let Property_Name
(ByVal vData As Variant)
mvarProperty_Name =.vData
End Property
Public Property Set Property_Name (ByVal vData As Object)
Set mvarproperty Name =vData End
Property
Public Property Get Property_Name ()As Variant If
IsObject(Property_Name)Then
Set Property_Name ° mvarProperty__Name Else
Property_Mame =mvarProperty_Name End If
End Property
Использование
Обычно в процедурах свойств объем кода не больше,чем в
приведенном примере.Дополнительный код может понадобиться лишь
для проверки правильности значения,присваиваемого свойству.При
этом не следует забывать,что свойства не должны вызывать никаких
действий объекта ^Ото реализуется только посредством его методов..
Методы
Для использования объектов класса (Class или Form) нужны соответствующие свойства и методы. Методы используются для расширения функциональных возможностей объекта.
Существует два типа процедур: с возвращаемым значением (синтаксис функции) и без возвращаемого значения (синтаксис оператора). Это также относится и к методам. Например, метод Clipboard.SetText использует синтаксис оператора, а метод Clipboard.GetText - синтаксис функции. При создании методов действуют те же правила, за исключением того, что процедуры Sub и Function следует объявлять как Public.
Синтаксис оператора
Для создания метода без возвращаемого значения в модуль класса необходимо добавить процедуру Public Sub, имя которой будет именем метода:
Public Sub имя_метода()
…
End Sub
Обращение к такому методу аналогично вызову обычной процедуры. При необходимости процедуре могут передаваться аргументы. Посредством аргументов более точно определяется характер выполняемого действия или передаются обрабатываемые элементы.
Синтаксис функции
Методы с возвращаемыми значениями реализуются как Public Function, а имя функции становится именем метода.
Public Function имя_метода () As тип_данных
имя_метода = выражение
End Function
Как и в обычной функции, возвращаемое значение присваивается имени функции. Обращение к такому методу аналогично обычному вызову функции. В методах такого типа также могут использоваться аргументы. При этом действуют те же правила, что и в обычных функциях.
Мастер классов
Создать метод очень просто с помощью мастера классов. Для добавления метода следует в левой части окна мастера классов выбрать соответствующий класс и при помощи команды меню File \ New \ Method или соответствующей кнопки панели инструментов окна мастера открыть диалоговое окно Method Builder.
В поле Name следует указать имя метода, в поле Return Data Type - тип данных возвращаемого значения (если метод должен возвращать данные). Если поле Return Data Type оставить пустым, будет создана процедура Sub. Если указать тип данных, будет создана процедура Function В список Arguments посредством кнопки со знаком (+) можно добавить аргумент метода с указанием его имени и типа данных. Если при этом установить флажок ByVal, аргумент будет передаваться по значению. В Visual Basic 6.0 аргумент может быть массивом (Array), массивом параметров (ParamArray, который применяется, если количество передаваемых процедуре аргументов заранее неизвестно), параметром по умолчанию (Default), необязательным параметром (Optional), а также передаваться по значению (ByVal). Кроме того, при использовании аргумента поддерживаются перечисления (Enums).
Аргументы, ошибочно добавленные в список Arguments, можно удалить с помощью кнопки удаления. Порядок аргументов можно изменить с помощью двух кнопок со стрелками.
Использование
Обычно методы содержат намного больше кода,ч ем процедуры свойств, так как в них выполняется непосредственная обработка данных. Сложные задачи можно разбить на несколько процедур (Sub или Function), которые объявляются как Private, поскольку могут использоваться только внутри класса. Инкапсуляция внутренних данных является большим преимуществом ООП.
1. События
События - это реакции объекта на действия системы, пользователя или других приложений. Анализ и обработка событий позволяет объекту реагировать на внешние воздействия. Каждый класс имеет набор собственных событий. По умолчанию все классы содержат два события, которые происходят после загрузки и перед выгрузкой объекта. Эти события - Initialize и Terminate.
События, определяемые пользователем
Объекты, определяемые пользователем, могут генерировать собственные события. События создаются в два этапа. Сначала в секции объявлений класса объявляется событие (при необходимости с аргументами), а затем в процедуре внутри класса происходит вызов этого события.
Public Event Event_Name()
Public Sub CallEventO
RaiseEvent Event_Name
Оператор Event
Событие, определяемое пользователем, объявляется внутри класса с помощью оператора Event. Аргументы, передаваемые процедуре обработки события, должны указываться в строке объявления события.
Оператор RaiseEvent
Для генерации события внутри класса предназначен оператор RaiseEvent, которому в качестве аргумента передается имя события..
Ключевое слово WithEvents
Контейнер, в котором используется объект ,должен содержать процедуру обработки события. До создания процедуры обработки события нужно объявить объект, используя ключевое слово WithEvents.
'Общие объявления Dim WithEvents object
As classi
Private Sub object имя события()End Sub
После такого объявления указанный объект будет добавлен в список (Object) окна кода, в результате чего из списка (Procedure) можно будет выбирать события объекта. Иногда процедуре обработки события требуется передавать некоторые аргументы (например, процедуре обработки события MouseMove передаются параметры состояния кнопок мыши и позиции курсора). Такие аргументы описываются при объявлении события. При вызове оператора RaiseEvent вместе с именем события указываются и значения аргументов, которые обрабатываются в соответствующей процедуре:
События могут генерироваться только в том классе, в котором объявлены.
События, определяемые пользователем, применяются только в контейнерах Class Module или Form.
Мастер классов
Мастер классов может помочь и при создании событий. Для создания события в окне мастера выбирается нужный класс, а затем вызывается команда меню File \ New \ Event. В появившемся диалоговом окне следует задать имя события и, при необходимости, его аргументы.
Так же, как и при создании методов, с помощью соответствующих кнопок в окне мастера можно создать список аргументов, их типы данных и порядок. В результате работы мастера в модуль класса вставляется соответствующая строка.
При создании событий работа с мастером может показаться более хлопотной, чем непосредственный ввод кода в области объявлений. Все остальные действия при создании событий с помощью мастера должны выполняться вручную.
2. Объекты, определяемые пользователем
После обеспечения класса свойствами, методами и событиями его можно использовать.
Объявление
Использовать классы непосредственно в программе нельзя. Внутри приложения используются объекты, созданные на основе класса. На основе одного класса можно создать любое количество объектов – экземпляров класса.
Ключевое слово New
В Visual Basic объекты класса создаются с помощью ключевого слова New. Это слово следует использовать при объявлении переменных, например в строке Dim:
Dim obj As New Class1
В этом примере создается новый объект класса Class1 с именем obj. В Visual Basic доступ к объектам всегда производится посредством переменных. Поэтому строка New очень похожа на обычное объявление переменной. Новый объект можно создать и по другому, с помощью следующего кода:
Dim obj As Class1 Set object = New Class1
Оператор Set
При выполнении присваивания объектных переменных всегда нужно использовать оператор Set. При присваивании значений не обязательно указывать оператор Let. При объявлении переменных объекта действуют те же правила в отношении области действия и времени жизни, что и для обычных переменных.
Объекты класса обладают всеми свойствами, методами и событиями, которые определены в исходном классе, однако каждый объект класса может иметь различные значения свойств и функционировать независимо от других..
Использование объектов
После того, как объектной переменной присвоена ссылка на объект класса, к ней можно обращаться как к обычному элементу управления.
Чтобы использовать события объекта, при его объявлении следует применять ключевое слово WithEvents. Однако оно не может применяться вместе с ключевым словом New. Для удаления объектной переменной из памяти необходимо удалить ссылку на объект. Если ссылки на объект не существует, переменная удаляется из памяти.
Ключевое слово Nothing
Для удаления ссылки из объектной переменной используется ключевое слово Nothing.
Если на используемы объект не ссылаются другие переменные, то Windows удаляет его из памяти. Значение Nothing должно присваиваться посредством оператора Set, как при любом присваивании объектов.
3. Каталог объектов
Каталогом объектов Visual Basic (Object Browser) удобен для просмотра объектов. С его помощью можно просмотреть все имеющиеся свойства, методы и события.
Для открытия окна каталога объектов можно воспользоваться кнопкой панели инструментов Visual Basic. Из списка Project / Library выберите имя проекта. После этого в списке Classes появляются имена всех классов выбранного проекта. Имена всех свойств, методов и событий данного класса отображаются в списке Members of после выбора нужного класса.
Свойства отображаются независимо от того, как они были реализованы: как процедуры свойств или как переменные Public. В окне подсказки отображается дополнительная информация, например используемый тип данных. Голубой кружок над пиктограммой свойства указывает, что данное свойство является свойством по умолчанию. Для методов выводится список аргументов с указанием их типа данных, а также типа данных возвращаемого значения. Для событий указываются аргументы и их типы данных.
Если при создании элемента с помощью мастера в соответствующем диалоговом окне свойств на вкладке Attributes вы задали описание, введенный текст появится в окне подсказки. Добавить текст описания можно также в окне каталога объектов, щелкнув правой кнопкой мыши на соответствующем элементе списка. В появившемся контекстном меню выберите команду Properties и введите текст описания в диалоговом окне Procedure Attributes. Это диалоговое окно можно открыть и в среде разработки с помощью команды Tools \ Procedure Attributes.
Каталог объектов, как правило применяется для поиска объектов, методов или свойств. Если нужный компонент найден, его имя можно скопировать в буфер обмена с помощью кнопки Copy to Clipboard. Если выбранный класс находится в текущем проекте, можно отобразить модуль класса с помощью кнопки View Definition. Если для элемента указан справочный файл и Help Context ID, можно получить соответствующую тему справки с помощью кнопки Help. С помощью диалогового окна Procedure Attributes можно выполнить операции над классом, например скрыть свойство, метод или событие. При использовании каталога объектов внутри проекта также отображаются элементы, объявленные как Private.
4. Раннее и позднее связывание
Скорость выполнения приложения может зависеть от того, каким образом Visual Basic осуществляет связывание переменных с их объектами. Связывание может быть ранним (Early Binding)или поздним (Late Binding).
Раннее связывание
Раннее связывание осуществляется, если при объявлении переменной указывается конкретный тип данных:
Dim objVarl As TextBox
Dim objVar2 As Class1
Dim objVar3 As Word.Application
В приведенном примере при объявлении переменных их типы данных указываются точно. Раннее связывание выполняется быстрее, чем позднее, поэтому рекомендуется использовать его всегда.
Позднее связывание
Позднее связывание выполняется, если при объявлении переменной определенный тип объекта не указывается.
Dim objVarl As Object
Dim objVar2 As Variant
Dim objVar3 As Control
В данном примере типы переменных определяются только при присваивании им конкретного объекта, а при объявлении переменноq указывается только универсальный тип. При таком объявлении при каждом обращении к объекту анализируются все допустимые объекты, а это требует значительных затрат времени.
Позднее связывание следует использовать в тех случаях, если при разработке невозможно заранее определить, какие типы объектов будут использоваться..
5. События Initialize и Terminate
Кроме событий, определяемых пользователем, классы всегда содержат события Initialize и.Тегminate, которые являются аналогами событий формы Load и Unload.
Событие Initialize
Событие Initialize класса наступает при первом использовании объекта. В процедуре обработки этого события следует выполнять код, необходимый для инициализации объекта. Это может быть, например, объявление собственных объектов или подключение к серверу базы данных.
Объявление переменной с помощью оператора Dim не вызывает наступление события Initialize - это событие вызывается только при первом обращении к свойствам или методам объекта.
Событие Terminate
Как только уничтожаются все ссылки на объект, Windows удаляет этот объект из памяти. В этот моментнаступает событие Terminate.
Private Sub Commandl_Click()
Set obj =Nothing ‘наступает Terminate
End Sub
Это событие используется для того, чтобы объект мог корректно освободить память, т.е. удалить все внутренние объекты или отсоединиться от внешних источников данных.
При создании собственных классов можно легко контролировать наступление событий Initialize и Terminate. Для этого временно на период отладки в модуль класса следует поместить следующий код:
Private Sub Class_Initialize()
MsgBox ”Инициализация”
End Sub
Private Sub Class_Terminate()
MsgBox “Удаление”
End Sub
6. Оператор Implements
С помощью оператора Implements можно передавать интерфейсы одного объекта другим. Для этого в качестве шаблона используется так называемый абстрактный класс, который не содержит кода, а только задает структуру интерфейса. Абстрактные классы служат не для создания объектов, а для определения набора свойств и методов.
Поскольку на основе класса Visual Basic всегда можно создать объекты, даже если модуль класса не содержит кода, то, строго говоря, в Visual Basic нет абстрактных классов.
При реализации интерфейса или класса необходимо включить в новый класс или интерфейс все составные части (процедуры, свойства) исходного объекта, объявленные как Public.
В производном классе после применения оператора Implements имя_класса можно воспользоваться определенными в абстрактном классе свойствами и методами.
Все процедуры абстрактного класса объявляются как Private. Это необходимо для того, чтобы они сами не становились свойствами или методами производного класса.
Весь код может находиться либо в абстрактном, либо производном классе. Можно разделить код между двумя классами.
Оператор Implements позволяет многократно использовать один и тот же программный код.
7. Обработка ошибок
Классы, определяемые пользователем, должны иметь собственные обработчики ошибок. Если внутри класса невозможно устранить ошибку, то эту задачу должна взять на себя вызывающая процедура. Для этого используетсяобъект Err:
Err.Raise number [,source ][ ,description ][,helpfile,helpcontext ]
Метод Raise использует некоторые именованные аргументы.
Аргумент number содержит уникальны код ошибки. Для кодов ошибок, определяемых пользователем, к непосредственному номеру следует прибавить константу vbObjectError. При этом нельзя выходить за пределы области значений переменных типа Long.
Аргумент source содержит ссылку на источник ошибки, т.е.на класс. При задании аргумента source следует использовать структуру ProjectName.ClassName.
Аргумент description содержит текст, описывающий возникшую ошибку. В процедуре обработки ошибки этот текст можно получить, воспользовавшись свойством Description объекта Err.
Аргументы helpfile и helpcontext указывают справочный файл и в нем - тему справки.
С помощью метода Raise ошибка передается вызывающе процедуре, которая должна иметь соответствующий обработчик ошибок.
Реакция на ошибки?
Реакцию среды разработки на ошибку можно настроить, воспользовавшись вкладкой General диалогового окна Options, которое открывается одноименно командой меню Tools. На вкладке General разработчик может выбрать один из трех вариантов реакции среды разработки на ошибку:
· Break on All Errors - при возникновении ошибки среда разработки переходит в режим прерывания (отладки) независимо от того, имеется или нет активная процедура обработки ошибок, и независимо от того, находится ли ошибочный код в модуле класса.
· Break in Class Module - возникновение любо необрабатываемой ошибки в модуле класса приводит к переключению среды разработки в режим отладки и выделению строки кода, вызвавшей ошибку. Если при отладке компонентов ActiveX вы запускаете тестовую клиентскую ActiveX программу в другом проекте,то при установке этой опции обработка ошибки будет выполняться в модуле класса компонента ActiveX,а не в тестовой программе.
· Break on Unhandled Errors - если процедура обработки ошибок активна, то возникшая ошибка обрабатывается без переключения среды в режим отладки. Если же такая процедура отсутствует, то происходит переключение среды в режим отладки. Если ошибка произошла в модуле класса, то выполнение программы останавливается в вызывающей процедуре, а не в модуле класса..
Использование
Собственные классы можно использовать и для централизованной обработки ошибок. При этом код ошибки передается объекту, определяемому пользователем. Объект анализирует и обрабатывает ошибку и через возвращаемое значение информирует источник ошибки о необходимости выполнения определенных действий.
1. Коллекции
Объект Collection - это упорядоченный набор элементов, на который можно ссылаться как на единое целое. Благодаря этому возможно объединение собственных объектов в легко управляемые логические единицы. Некоторые задачи, решаемые с помощью коллекций, можно решить также с помощью массивов или переменных, определяемых пользователем, однако коллекции имеют некоторые преимущества:
· коллекциями можно управлять и они более гибко индексируются;
· методы коллекций позволяют добавлять и удалять объекты;
· коллекции требуют меньше памяти;
· размер коллекций регулируется автоматически (без явного использования оператора ReDim)
Методы и свойства
Посредством методов Add и Remove добавляются или удаляются отдельные объекты коллекции. Доступ к конкретному объекту коллекции осуществляется с помощью метода Item. Свойство Count содержит число объектов коллекции.
Метод Add
Для добавления объектов в коллекцию используется метод Add. При этом следует указывать имя объекта. Дополнительно можно передавать аргумент key с помощью которого в дальнейшем можно будет обращаться к данному объекту.
Collection.Add object [,key ] [,before ] [,after ]
Здесь:
object - объект, который нужно добавить;
key - символьная строка для идентификации объекта;
before - номер позиции предыдущего объекта;
after - номер позиции последующего объекта.
Метод Remove
Для удаления объекта из семейства используется метод Remove. При этом для идентификации объекта указывается либо номер позиции, либо аргумент key.
Метод Item
С помощью метода Item можно получить доступ к определенному элементу коллекции. Для идентификации этого элемента так же, как и при Remove, используется номер позиции или аргумент key.
Семейства представляют собой удобный способ управления большим количеством объектов.
Мастер классов
Собственные семейства можно создавать также с помощью мастера классов. Для создания семейства в окне мастера классов нужно выполнить команду File \ New \ Collectfon или нажать соответствующую кнопку панели инструментов. На экране появляется диалоговое окно, в котором следует указать имя семейства.
Если в проекте уже существуют классы, то один из них можно использовать для создания коллекции объектов конкретного класса. Если проект не содержит классов, семейство создается на основе нового класса. Мастер формирует новый класс, создавая для него все необходимые методы и свойства.
Цикл For Each..,Next
Для работы со всеми элементами семейства можно воспользоваться специальной формой цикла For...Next - For Each...Next. В этом цикле также используется объектная переменная цикла (счетчик). Каждый элемент в семействе один раз присваивается объектной переменной. Если обработаны все элементы, выполняется автоматически выход из цикла. Хотя такую возможность можно реализовать с помощью свойства Count и цикла For...Next, все же цикл For Each...Next более удобен..
1. Массивы
Наряду с семействами для объединения объектов используются и массивы. В этом случае действуют те же правила, что и для статических и динамических массивов.
Массивы объектных переменных помогают раскрыть принципы создания семейств при объектно-ориентированном подходе.
Словарь терминов*
A
abstract class – абстрактный класс~ класс, используемый только как основа для производных классов.
active window – активное окно~ окно, с которым в данный момент работает пользователь. Обычно располагается поверх остальных окон и выделяется цветом своего заголовка.
ActiveX~ технология на базе COM, которая позволяет создавать различные компоненты (элементы управления, документы и др.), используемые как фундаментальные строительные блоки в большинстве Windows-приложений. ActiveX-компоненты можно разрабатывать во многих средах программирования, в том числе Microsoft.