Объекты visual basic


Основы VBA

Читайте также:

  1. II. Институционально-правовые основы регулирования хозяйственной деятельности
  2. II. Основы вероучения ислама. Основные течения в исламе.
  3. II. Теоретические основы метода
  4. III. Физические основы национального характера. Органическое строение и темперамент.
  5. Адвокатура (понятие, история и перспективы развития, правовые основы деятельности).
  6. Американский фашизм. Теоретические основы.
  7. АНАТОМИЧЕСКИЕ И ПАТОЛОГОАНАТОМИЧЕСКИЕ ОСНОВЫ КОСТЕЙ И ИХ РЕНТГЕНОВСКОЕ ИЗОБРАЖЕНИЕ
  8. Анатомо-физиологические основы психики
  9. Асептическое воспаление основы кожи копыта
  10. Биохимические основы возникновения и проведения нервного импульса
  11. Биохимические основы возникновения некоторых заболеваний
  12. БЛОК № 1. Исторические и методологические основы криминалистики.

Объекты, семейства, классы

VBA (Visual Basic For Applications) – это объектно-ориентированный язык макропрограммирования высокого уровня, интегрированный во все программы пакета MS Office 2003 и предоставляющим возможности визуального программирования. Основное отличие программ на языке VBA от программ, написанных на других языках программирования (например, Basic, Pascal), состоит в том, что наряду с обычными переменными и константами, эти программы манипулируют готовыми объектами приложений Microsoft Office, такими, например, как документы, абзацы, строки и слова Word; или рабочие книги, рабочие листы и диапазоны ячеек Excel.

VBA непосредственно связан с языком Visual Basic (VB). Основное различие между ними формулируется следующим образом: проекты VBA выполняются только с помощью приложения, поддерживающего VBA, в то время как Visual Basic позволяет создавать полностью автономные приложения. С другой стороны, синтаксис языков VBA и VB практически одинаков. Оба языка имеют почти одинаковые интегрированные среды разработки.

Visual Basic для приложений является объектно-ориентированным языком, предоставляющим возможности визуального программирования.

VBA содержит иерархию объектов, каждому из которых соответствует свой набор методов и свойств. Объекты представляют собой фундаментальные «строительные» блоки – почти все, что делается в среде VBA, включает модификацию объектов

Объектом VBA считается некоторый элемент, который можно отобразить в окне приложения и на который можно воздействовать некоторым образом, изменяя его состояние. Например, Рабочая книга, Рабочий лист, Активная ячейка, Диапазон являются объектами. К числу наиболее значимых объектов Excel следует отнести следующие.

Таблица 1. Объекты Excel

Объект Краткая характеристика
Application (объект «Приложение») Этот объект представляет собой само приложение Excel в целом. Он включает в себя глобальные устанавливаемые параметры, такие, например, как используемый стиль ссылок на ячейки или режим проведения вычислений. Кроме того, он включает в себя встроенные функции Excel.
Windows (семейство «Окна») Объекты этого семейства используются при управлении окном (сворачивании, разворачивании, разбиении его на части и т.д.) Принадлежащий к этому семейству объект ActiveWindow представляет собой активное в настоящий момент окно.
Workbooks (семейство «Рабочие книги») Объекты этого семейства определяют состояние рабочей книги, например: не является ли она доступной только для чтения; или какой из листов рабочей книги активен в настоящий момент. Принадлежащий к этому семейству объект ActiveWorkbook — это объект, который представляет собой активную в настоящий момент рабочую книгу.
Worksheets (семейство «Рабочие листы») Объекты этого семейства используются при копировании или удалении абочих листов, их скрытии или отображении, проведении вычислений для формул рабочего листа. Принадлежащий к этому семейству объект ActiveWorksheet — это объект, который представляет собой активный в настоящий момент рабочий лист.
Range (объект «Диапазон») Этот объект позволяет изменять свойства диапазона ячеек, например, используемый шрифт, проверять или изменять содержимое ячеек, вырезать или копировать указанный диапазон, и многое другое. Это наиболее часто используемый в Excel объект. Принадлежащий к этому же классу объектов объект ActiveCell представляет собой активную в настоящий момент ячейку. Следует обратить внимание на то, что не существует такого объекта, как Cell (ячейка)— отдельно взятая ячейка представляет собой частный случай объекта Range (Диапозон).

Существуют сотни самых разнообразных объектов VBA, многие из которых объединяются в Семейства объектов. Семейством (Collection) в VBA называется совокупность однотипных объектов. Например, в Excel семейство Worksheets является совокупностью всех рабочих листов — объектов Worksheet — в данной рабочей книге, а семейство Lines — совокупностью прямых линий, нарисованных на данном рабочем листе. Составляющие семейство отдельные объекты называются элементами семейства. Можно ссылаться на отдельные элементы семейства, указывая в скобках имя конкретного объекта.

Хотя семейства представляют собой группы объектов, сами семейства также являются одиночными объектами. Такой собирательный объект-семейство представляет собой всю совокупность входящих в семейство объектов, и имеет собственные свойства и методы, с помощью которых можно изменять разом состояние всех объектов семейства.

Например, оператор ActiveSheet.Lines.Deleteудаляет все нарисованные на активном рабочем листе прямые линии.

Как правило, индивидуальные объекты, являющиеся элементами семейств, имеют гораздо больше свойств и методов, чем соответствующий собирательный объект-семейство. Например, объект-семейство Workbooks в Excel имеет всего пять свойств (Application, Count, Creator, Item, Parent) и четыре метода (Add, Close, Open, OpenText), в то время как объект Workbook имеет 59 свойств и 42 метода.

Не все объекты приложений могут группироваться в семейства — для некоторых индивидуальных объектов не существует соответствующих семейств.

Приведем краткий список наиболее часто используемых семейств объектов Excel.

Таблица 2. Семейства объектов Excel

Семейство Описание
Workbooks Все открытые в настоящий момент рабочие книги. С помощью метода Open можно открыть еще одну рабочую книгу. Метод Add создает новую рабочую книгу.
Sheets Включает в себя все листы рабочей книги — как обычные рабочие листы, так и листы диаграмм. Наиболее часто используемые методы — Add, Copy, Delete, Select.
Worksheets Все рабочие листы рабочей книги. Используются те же методы, что и для семейства Sheets.

Важнейшим понятием объектно-ориентированного программирования является класс, который определяется как проект, на основе которого впоследствии будет создан конкретный объект, т.е. класс определяет имя объекта, его свойства и действия, выполняемые над объектом. В свою очередь объект является экземпляром класса.

Дата добавления: 2015-07-02 ; Просмотров: 1217 ; Нарушение авторских прав? ;

Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

Редактор Visual Basic (VB). Объекты VB, типы данных VB.

Visual Basic, экспресс-выпуск — это простой и быстрый способ создания программ для Microsoft Windows.

Программы, написанные на Visual Basic, также имеют структуру: модули соответствуют главам, процедуры – абзацам, строки кода – предложениям.

При объявлении переменной необходимо решить, как она будет называться, и какой тип данных будет ей присвоен.

Объявите переменную, при помощи ключевых словDimиAs, как это показано ниже.

Язык Visual Basic

Dim aNumber As Integer

Эта строка кода сообщает программе, что требуется использовать переменную с именем aNumber, и что она должна хранить целые числа (тип данных Integer).

Поскольку aNumber является переменной типа Integer, она может хранить только целые числа. Если бы нужно было хранить, например, число 42.5, то использовался бы тип данных Double. А для хранения слов используется тип данных с именем String. Еще одним типом данных, который следует упомянуть здесь, является тип Boolean, который может хранить значения True или False.

В Visual Basic важную роль играют объекты.Идея объекта заключается в том, что некоторые данные и код, предназначенный для работы с этими данными, объединяются в единое целое. Внешний код может взаимодействовать с объектом через его свойства, методы и события. Один из возможных примеров объекта — управляющий элемент, который вы помещаете на форму на этапе визуального программирования. Он обладает методами, свойствами и событиями.

Объекты Краткое описание объекта
App Глобальный объект. Позволяет получать или указывать сведения о заголовке приложения, данные о версии, путь и название исполняемого файла данного приложения и его файлов Справки и определить, не исполняется ли в настоящий момент экземпляр данного приложения. Не отображается в панели инструменьтов или на форме.
CheckBox Элемент управления (флажок проверки) дает пользователю возможность альтернативного выбора True/False или Yes/No. Можно использовать группы флажков проверки для показа множественного выбора
Clipboard Объект. Предоставляет доступ к системному буферу обмена. Не отображается в панели инструментов или на форме
ComboBox Элемент управления сочетает возможности элементов управления TextBox и ListBox. Пользователи могут вводить информацию в область текста или выбирать пункты из окна со списком
CommandButton Элемент управления командная кнопка служит для инициализации начала, прерывания или окончания процесса. В основном используется событие Click
Data Элемент управления. Позволяет работать с существующей базой данных, создавать, удалять, сортировать и т.п. записи
DataObject Является контейнером для данных, передаваемых из объекта-источника в объект-получатель при операции OLE-перетаскивания.
DirListBox Элемент управления используется для показа иерархического списка каталогов и выбора нужного пользователем
DriveListBox Элемент управления (окно со списком устройств) позволяет пользователю выбрать корректный диск во время выполнения
Err Объект. Содержит информацию об ошибках выполнения (главным образом номер). Не отображается в панели инструментов или в форме.
FileListBox Элемент управления используется для показа списка файлов, дает пользователю возможность выбрать файл или группу файлов
Form Форма. На ней размещаются другие объекты и в окне кода пишется программный код. Загружается в exe-проект по-умолчанию.
Frame Элемент управления, обеспечивает группировку элементов управления по признакам. Можно использовать рамку Frame для функционального разделения областей форм, например, чтобы отделить группы кнопок OptionButton
Image Элемент управления используется для показа графических изображений
Label Метка — графический объект, текстовое содержимое которого пользователь на может редактировать непосредственно
Line Графический элемент управления отображается как горизонтальная, вертикальная или диагональная линия
ListBox Элемент управления (окно со списком) показывает список пунктов, из которого пользователь может выбрать один или несколько пунктов
OLE Контейнер, который позволяет вставлять в форму различные объекты, например avi-файлы, картинки и т.п.
OptionButton Элемент управления (так называемая радиокнопка) переключатель, который может быть включен или выключен. Используется для выбора одного из многих.
PictureBox Элемент управления (окно с рисунком) может показывать графические изображения из файлов. Так же можно создавать собственные графические файлы (.bmp)
Printer Объект. Предоставляет возможность обращаться к заданному по умолчанию принтеру. Не отображается в панели инструментов или на форме.
Screen Объект. Предоставляет доступ к объекту Screen (Экрану или Десктопу (Desktop)). Не отображается в панели инструментов или на форме
ScrollBar (VscrollBar и HScrollBar) Элементы управления. Представляет собой горизонтальный (VScrollBar) или вертикальный (HScrollBar) ползунок, позволяющий изменять размеры, положения объектов и т.п.
Shape Графический элемент управления (фигура) отображается в виде прямоугольника, квадрата, овала, круга, прямоугольника с закругленными углами или квадрата с закругленными углами.
TextBox Элемент управления. Текстовое окно, служит для ввода-вывода текста на экран и редактирования. Объем текста ограничен.
Timer Элемент управления таймер позволяет выполнять часть кода программы через определенные (свойство Interval) промежутки времени

Дата добавления: 2014-11-29 ; просмотров: 628 ; ЗАКАЗАТЬ НАПИСАНИЕ РАБОТЫ

Что такое объект?

29.01.2020, 13:38

Что такое OLE объект?
Я уже не первый год занимаюсь программированием. Но по большому счёту только сегодня задумался над.

Что такое Commandtype и что он определяет в ADO?
Chto takoe Commandtype i chto on opredeliat v ADO?

что такое ClassBulder
народ, подскажите, что такое Class Builder.. и с чем его едят? (как пользоваться?) инструкцию.

что такое Raz?
Dim Raz As Double Dim i As Integer Dim x As Double Dim y1 As Double Dim y2 As Double Dim S As.

Что такое &HA
Всем привет. Мне нужно понять что делает следующая строка кода: If (Len(Me.Text1.Text) = &HA).

29.01.2020, 14:57 2

Всё, что видишь в приложении на VB6 есть совокупность объектов. Кнопки, текстовые поля, сама форма и т.д.
У объектов есть свойства, методы и события. Из жизни, к примеру объект
Телефон:
свойство ( характеристики объекта ) — красный, кнопочный
метод (действия или задачи, которые выполняет)- связь с другими телефонами
событие (воздействие на которое реагирует объект) -входящий звонок, поднятие трубки

Всё то же самое и в VB6, да и в любом объектно-ориентированном языке программирования.

29.01.2020, 16:07 [ТС] 3
Visual Basic
29.01.2020, 16:43 4
Visual Basic
29.01.2020, 16:43
29.01.2020, 16:46 5

Не знаю .. чейто текст .. ((
я однажды тоже . ехал на чемто .. потом сам проснулся и спрашиваю
где мы едем ? .. на верблюде ! ? )) .. ладно

Мне кажется это я гдето писал ..

29.01.2020, 16:54

fever brain, и что?:D

Меню пользователя SoftIce
29.01.2020, 17:02 [ТС] 7
29.01.2020, 17:41 8
29.01.2020, 19:19 [ТС] 9
29.01.2020, 22:37 10

Для накачки. Данными.

Вот форум. Используй!

29.01.2020, 23:10 [ТС] 11
29.01.2020, 23:12 12

Решение

Т.е. Вы хотели спросить для чего используются переменные, которые ссылаются на объект?

Давайте начнем с понятийного аппарата.

Dim x As Object
x — такая же переменная по принципу хранения в памяти как и другие. Просто данное объявление означает, что в дальнейшем мы захотим присвоить ей ссылку на какой-то объект.
При этом в отличие от других типов присвоение производится несколько иначе:

As Object — это общее понятие какого-либо объекта, будь-то форма, контрол, класс и др. специфические.
При этом, контрол — это не конкретный тип, а группа типов объектов, например, кнопки, галочки, сама форма.

Т.е. Вы можете написать:

Visual Basic
Visual Basic
Visual Basic

Указывать вместо конкретного типа (например, CommandButton) группу, к которой относится этот тип объекта (Control) может быть полезно, к примеру, при перечислении всех контролов на форме.
Но редактор будет Вам подсвечивать список доступных свойств и методов только, если указан конкретный тип объекта.

Вот так неправильно (если на форме будут другие контролы кроме кнопки, то тип объекта не совпадет и вылетит ошибка):

Visual Basic

А так правильно:

Visual Basic
Visual Basic

Теперь на счет примера с As Object.

Выше мы работали с объектами, типы которых уже где-то в нашей программе задекларированы, т.е. ей заранее известно о перечне свойств, методов, событий объекта, тип которого носит имя, к примеру «CommandButton».

Но мы также можем работать и с объектами, для которых наша программа не знает названий их свойств и др .
И в этом случае нам придется использовать именно тип Object.

Допустим, мы хотим создать экземпляр приложения Microsoft Excel.

Используя COM-технологию, это легко сделать с помощью такой конструкции:

Visual Basic

Данный прием называется позднее связывание.

Либо мы можем заранее сослаться на библиотеку типов с помощью меню Project -> Preferences, выбрать библиотеку Microsoft Excel.

Код будет таким же, за исключением объявлений:

Visual Basic

Данный прием называется ранним связыванием.

У позднего и раннего связывания есть свои плюсы и минусы, но здесь уже не буду об этом. Почитаете самостоятельно.

Есть и множество других, заранее включенных в состав ОС объектов, экземпляр которых можно создать описанным выше способом. Почитать можно здесь: Подскажите литературу для начинающего!

Часто ссылку на объект (Object) еще используют для обращения к подсистеме WMI.

Объекты также могут быть созданы, используя некоторые API-функции (например, см. CoCreateInstance).
Это допустим, различные интерфейсы, к примеру, ITaskbarList, IPersistFile, IPropertyStore . и прочее. Вот пример подобной работы.

Классы. ООП

Классы и объекты

Visual Basic.NET является полноценным объектно-ориентированным языком, а это значит, что программа может быть представлена в виде взаимосвязанных объектов, которые взаимодействуют между собой. Описанием объекта является класс , в то время как объект — экземпляр этого класса. Класс определяется с помощью ключевого слова Class :

Всю функциональность класса обеспечивают его члены — поля, свойства, методы, конструкторы, события. Поля представляют обычные переменные? обычным образом также определяются процедуры и функции (в этом плане классы во многом похожи на структуры):

Кроме обычных методов в классах существуют специальные методы — конструкторы . Конструкторы вызываются при создании нового объекта класса. Чтобы объявить конструктор, надо использовать ключевое слово New . Зачем нужен конструктор? Обычно конструктор выполняет инициализацию членов класса. Объявим в классе конструктор, который будет инициализировать поля нашего класса Book:

Здесь мы создали конструктор, который принимает три параметра — название книги, ее автора и год издания. Затем в конструкторе мы присваиваем значения параметров полям класса. Поскольку параметры и поля класса называются одинаково, то нам надо использовать ключевое слово Me , которое предоставляет ссылку на данный класс. Если бы параметры имели другие имена, то использование слова Me было бы необязательным. Если мы не создадим свой конструктор, тогда будет использоваться конструктор по умолчанию:

Теперь используем класс. Создайте новое консольное приложение. Затем нажмите правой кнопкой мыши на название проекта в окне Solution Explorer (Обозреватель решений) и в появившемся меню выберите пункт Add (Добавить) , в другом появившемся меню выберите пункт Class (Класс) . В окне создания нового класса присвойте ему имя Book и нажмите кнопку Add (Добавить) . В проект будет добавлен новый класс Book , который будет находиться в файле Book.vb . Перенесите в этот класс следующий код:

Теперь в основной файл приложения — в модуль добавим следующий код:

Если мы запустим код на выполнение, то консоль выведет нам информацию о книгах b1 и b2. Обратите внимание, что чтобы создать новый объект кроме конструктора нам надо использовать ключевое слово New . В первом случае мы используем свой конструктор, а во втором — конструктор по умолчанию.

Частичные классы

Частичные классы представляют возможность разделения одного класса на несколько файлов. Например, в одном файле может быть:

Для создания частичного класса перед его объявлением надо поставить ключевое слово Partial . В итоге в результате компиляции будет создан единый класс, который не будет отличаться от других классов.

Ключевое слово With

Предположим, что у нас есть следующий класс State :

При создании объекта класса мы указываем столицу, значения для остальных полей мы должны указать отдельно, например так:

Однако таких свойств может быть множество. И чтобы сократить объем кода, мы можем использовать конструкцию With. End With . Чтобы применить эту конструкцию, после слова With указывается объект, а затем построчно свойства объекта, которые мы хотим получить или присвоить:

Кроме того, мы можем использовать сокращенный синтаксис инициализации объекта с помощью ключевого слова With и одновременно указать все необходимые свойства:

Функциональные интерфейсы… в VBA

«…те, кто не прочь поглазеть на любителя прилюдно свалять дурака, пусть понаблюдают, как я доказываю, что Java и Visual Basic – близнецы, разлученные при рождении, а С++ им даже не дальний родственник.»

Брюс Мак-Кинни “Крепкий орешек Visual Basic”

Введение

Постоянный интерес к подходам функционального программирования в настоящее время приводит к тому, что традиционные языки программирования активно обзаводятся функциональными средствами. И, хотя чистые функциональные языки остаются пока не слишком популярными, функциональные возможности прочно обосновались в таких языках, как С++, Java, JavaScript, Python и др. Язык VBA уже многие годы пользуется заслуженной популярностью у довольно многочисленной аудитории пользователей Microsoft Office, однако этот язык практически не содержит функциональных средств.

Давайте попытаемся заполнить этого пробел – предлагаю законченную (хотя, возможно, и не безупречную) реализацию функциональных интерфейсов, выполненную средствами VBA. Реализация может служить основой для последующих доработок и улучшений.

Проблема функциональных аргументов

Первая проблема, с которой мы столкнемся на этом пути – это проблема передачи функциональных аргументов в функцию или метод. Язык VBA не содержит соответствующих средств (оператор AddressOf служит лишь для передачи адресов функциям Windows API и не вполне безопасен в работе). Это же можно сказать и об известной методике вызова функций по указателю (Магдануров Г.И. Visual Basic на практике СпБ.: “БХВ Петербург”, 2008). Давайте не будем рисковать — используем при реализации только стандартные возможности языка и стандартные библиотеки.

К сожалению, здесь нам ООП мало чем поможет. Для передачи функционального объекта в процедуру или функцию язык VBA предлагает стандартную возможность – обернуть нужную функциональность объектной оболочкой (создать объект, одним из методов которого и будет нужная функциональность). Объект можно передать как параметр. Этот подход работоспособен, однако весьма тяжеловесен – для каждой нужной функциональности придется создавать свой класс и объект этого класса.

Существует и другой способ, который оказывается существенно проще и не требует создания отдельных классов для каждой функциональности.

Предположим, что в некую процедуру proc требуется передать анонимную функцию, которая увеличивает свой аргумент на единицу. Эту функцию можно записать так:

Подобная нотация задания анонимных функций в настоящее время уже практически стала “стандартом де факто”. Единственная возможность передать такую функцию параметром состоит в использовании строкового представления:

здесь a и b – обычные параметры, а третий параметр – безымянная функция, что весьма наглядно и мало отличается от записей в популярных языках программирования.

Чтобы использовать анонимную функцию, заданную подобным образом, ее необходимо сначала привести к стандартному виду функции VBA. Это выполняет следующая служебная процедура:

Функция выделяет список параметров и тело вычисления, а затем формирует функцию с именем self. Для нашего случая функция self будет иметь следующий вид:

Очевидно, что в соответствии с синтаксисом VBA, эта функция будет делать именно то, что должна была делать анонимная функция – увеличивает значение своего аргумента на 1. Правда, эта функция – пока не есть функция VBA, а только строка, содержащая указанный код. Для того, чтобы превратить строку в функцию, можно использовать стандартную майкрософтовскую библиотеку “Msscript.ocx”. Эта COM-библиотека позволяет выполнить произвольный код VBA, заданный в строковой форме. Для этого необходимо выполнить следующее:

— Создать объект ScriptControl
— Вызвать метод установки языка (VBScript);
— Вызвать метод загрузки функции;
— Вызвать метод eval для исполнения вызова.

Все это выглядит примерно так:

После выполнения данного кода значение переменной r будет равно 6.

Здесь следует сделать три замечания:

  • Тело анонимной функции может содержать несколько строк. Отдельные операторы в этом случае завершаются точкой с запятой. Из окончательного кода символы “;” исключаются. Многострочное тело позволяет реализовывать в анонимных функциях весьма продвинутую функциональность;
  • То, что анонимная функция “в действительности” имеет имя “self”, дает неожиданный бонус – анонимная функция может быть рекурсивной.
  • Поскольку объект ScriptControl поддерживает два языка – VBScript и Jscript, то безымянная функция может быть (теоретически) написана и на Jscript (желающие могут попробовать).

Далее будет описана объектная модель реализации.

Объектная модель

Основой модели являются объекты двух видов: Container и Generator. Объект Container является хранилищем массива произвольных размеров, объект Generator, как следует из названия, реализует генератор общего вида.

Оба объекта реализуют интерфейс aIter, который более подробно описывается ниже. Интерфейс включает 19 функций:

Visual Basic
Имя метода Параметры Результат
isGen Возвращает True, если объект является генератором
isCont Возвращает True, если объект является контейнером
getCont Для контейнера возвращает локальный массив, для генератора возвращает Empty
getNext Возвращает следующее значение
hasNext Возвращает True, если следующее значение имеется
Init iniVal As Variant, lambda As String = «», emptyC As Boolean = False iniVal – начальное значение;
lambda – анонимная функция для генератора
emptyC – при задании True создается пустой контейнер
Take n as integer Возвращает контейнер, содержащий n последовательных значений, полученных из исходного объекта
Filter lambda as string Возвращает объект, полученный фильтрацией исходного в соответствии с безымянной функцией lambda
Map lambda as string Возвращает объект, полученный мапированием исходного в соответствии с безымянной функцией lambda
Reduce acc As Variant, lambda As String, Возвращает результат свертки текущего объекта с начальным значением аккумулятора acc и сворачивающей функцией, заданной параметром lambda
takeWhile n As Integer,
lambda As String
Возвращает контейнер, содержащий n (или менее) последовательных значений, удовлетворяющих предикату, заданному безымянной функцией lambda
dropWhile n As Integer,
lambda As String
Возвращает контейнер, содержащий n (или менее) последовательных значений, полученных из исходного после пропуска значений, удовлетворяющих предикату, заданному функцией lambda.
zip iter As aIter,
n As Integer = 10
Принимает контейнер или генератор, а возвращает контейнер, содержащий пары значений – из базового контейнера и из контейнера-параметра. Размер результата по умолчанию – десять.
zipWith iter As aIter,
lambda As String,
n As Integer = 10
Принимает контейнер и безымянную функцию двух аргументов. Возвращает контейнер, содержащий результаты применения заданной функции к последовательным парам – одно значение из базового контейнера, другое – из контейнера-параметра.
Size Для контейнера возвращает количество элементов
summa Сумма значений контейнера
production Произведение значений контейнера
maximum Максимальное значение в контейнере
minimum Минимальное значение в контейнере

Для объекта-генератора ряд методов впрямую не реализован – необходимо сначала отобрать некоторое количество значений в контейнер. При попытке вызвать для генератора нереализованный метод, генерируется ошибка с кодом 666. Далее будет рассмотрено несколько примеров использования описанных интерфейсов.

Примеры

Печать последовательных чисел Фибоначчи:

Здесь создается генератор с начальными значениями 0 и 1 и генерирующей функцией, соответствующей последовательности Фибоначчи. Далее в цикле печатаются первые 50 чисел.
Мапирование и фильтрация:

Создается контейнер и инициализируется числовой последовательностью из диапазона от 1 до 100. Далее числа с помощью map заменяются на обратные. Из них берется двадцать первых. Далее эта совокупность фильтруется и из нее отбираются числа, большие 0.3 или меньшие 0.1. Результат возвращается в контейнере, состав которого распечатывается.
Использование свертки:

Здесь с помощью свертки считается сумма и произведение чисел от 1 до 100.

В этом примере строится генератор co1, последовательно делящий исходное число на степени 10. Затем отбираются частные до появления нуля. После чего полученный список частных отображается функцией взятия остатка от деления на 10. В результате получается список разрядов числа. Список суммируется, у него вычисляется максимум, минимум и произведение.

Выводы

Предлагаемый подход оказывается вполне работоспособным и может быть с успехом применен для решения повседневных задач VBA-программиста в функциональном стиле. Чем мы хуже джавистов?

VBA в приложении к Excel, Word и Power Point

В № 1-10/2006 вниманию читателей будет предложен цикл статей (разработок занятий), посвященных использованию VBA (Visual Basic for Application) пакета Microsoft Office. Все материалы прошли многолетнюю апробацию в НОУ “Ломоносовская школа” и могут быть использованы как на уроках, так и во внеурочной деятельности — на факультативах, кружках, при реализации учебных проектов.

Занятие № 1. Основные понятия языка VBA Excel

На занятии рассматриваются следующие вопросы:

  • общее понятие о языке VBA;
  • объекты VBA;
  • свойства, методы и события;
  • элементы языка VBA;
  • структура редактора VBA.

VBA относится к языкам объектно-ориентированного программирования, поэтому знакомство с ним естественно начать с понятия объекта.

Объекты

Объект — основной элемент VBA Excel. В VBA объектами являются рабочая книга, рабочий лист и его составляющие.

  • Sheet — лист Excel;
  • Cell — ячейка;
  • Range — диапазон ячеек;
  • Application — приложение;
  • UserForm — пользовательская форма.

Доступ к объекту возможен через его методы и свойства.

Методы

Над объектами можно совершать различные действия. Действия, совершаемые над объектами, называются методами. Например, ячейку можно очистить (Clear), приложение закрыть (Quit), пользовательскую форму показать (Show) или скрыть (Hide).

Название метода отделяется от названия объекта точкой: объект.метод.

Примеры использования методов:

Range(«B2:E2»).Select — выбрать диапазон ячеек B2:E2;

Range(«C1:C5»).Clear — очистить диапазон ячеек C1:C5;

UserForm2.Hide — скрыть форму № 2;

UserForm5.Show — показать форму № 5;

Application.Quit — выйти из приложения.

Свойства

Свойствами описываются характеристики объектов. Например, размер и цвет шрифта, положение формы на экране или состояние объекта (доступность, видимость). Чтобы изменить характеристику объекта, надо просто изменить значение свойства, т.е. присвоить ему определенные значения.

Синтаксис установки значения свойства:

— где Объект обозначает имя объекта, Свойство — имя свойства, которому присваивается значение.

Имя объекта отделяется от имени свойства точкой.

Range(«D1»).Value = 2005 — поместить в ячейку D1 значение 2005.

Range(«C1:C10»).Text = «Информатика» — поместить в диапазон ячеек C1:C10 текст Информатика.

Range(«B2»).Font.Size = 14 — в ячейке B2 установить размер шрифта 14.

Методы и свойства некоторых объектов VBA

Объект: Application (приложение).

Метод: Quit (закрыть).

Свойство: Caption (имя главного окна).

Примеры. Application.Quit — закрыть приложение; Application.Caption = «Протокол» — установить в качестве заголовка окна приложения “Протокол”.

Объект: Sheet (лист), ActiveSheet (активный/выбранный лист).

Семейство: Sheets (листы).

Методы: Select (выбрать); ShowDataForm (показать встроенную форму).

Примеры: Sheets(«Меню»).Select — выбрать лист “Меню”; ActiveSheet.ShowDataForm — на активном в настоящий момент листе показать встроенную форму.

Объект: Range (диапазон).

Методы: Select (выделить); Clear (очистить).

Свойство: Name (имя).

Примеры. Sheets(«Протокол»).Range(«В4:В10»).Name = «Класс» — диапазону В4:В10, расположенному на листе “Протокол”, присвоить имя “Класс”; Sheets(«Протокол»).Range(«В4:В10»).Select — выделить диапазон В4:В10 на листе “Протокол”.

Объект, Семейство: UserForm (пользовательская форма).

Методы: Show (показать); Hide (скрыть).

Свойство: Caption (текст, отображаемый в строке заголовка).

Примеры. UserForm1.Show — показать пользовательскую форму номер один;

UserForm1.Hide — скрыть пользовательскую форму номер один;

UserForm1.Caption — «Информатика»- вывести заданный в кавычках текст в строке заголовка.

Объект, Семейство: TextBox (Поле ввода).

Свойство: Text (содержимое).

Примеры. UserForm1.TextBox1.Text = Date — в поле ввода номер один в пользовательской форме номер один записать текущую дату; UserForm1.TextBox2.Text = » » очистить поле ввода номер два в пользовательской форме номер один.

Объект, Семейство: ComboBox (поле со списком).

Метод: AddItem (добавить элемент в список).

Свойства: Text (содержимое); Rowsource (источник строк для списка).

Примеры. UserForm1.ComboBox2.Text = » » очистить значение поля для поля ввода со списком номер два в пользовательской форме номер один; UserForm2.ComboBox1.Rowsource=»В2:В10″ источником строк для поля один со списком в пользовательской форме два установить данные из диапазона В2:В10;

UserForm1.ComboBox1.AddItem («Факс») добавить к списку элемент, заключенный в кавычки.

Объект, Семейство: OptionButton.

Свойства: Value (значение); Сaption (надпись).

Примеры. UserForm3.OptionButton1.Value = True выбрать переключатель номер один в пользовательской форме номер три; UserForm3.OptionButton1.Capture = «Успеваемость» установить надпись “Успеваемость” рядом с переключателем в пользовательской форме номер три.

Объект, Семейство: CheckBox.

Свойства: Value (значение); Сaption (надпись).

Примеры. UserForm2.CheckBox1.Value = True установить флажок номер один в пользовательской форме номер два; UserForm3.CheckBox1.Value = False сбросить флажок номер один в пользовательской форме номер три; UserForm4.CheckBox1.Capture=»Класс» установить надпись “Класс” рядом с флажком в пользовательской форме номер четыре.

События

Событие представляет собой действие, распознаваемое объектом (например, щелчок мышью или нажатие клавиши, перемещение мыши или выход из программы), для которого можно запрограммировать отклик, т.е. реакцию объекта на произошедшее событие.

В языке VBA для каждого объекта определен набор стандартных событий.

Стандартное событие для объекта “кнопка” (CommandButton) — щелчок мышью (Click).

Если пользователь нажимает на кнопку, то это событие. На это событие должен быть отклик, т.е. выполнение какой-либо программы. Такая программа называется процедурой обработки событий и имеет стандартное имя. Если такой отклик не создан (не написана соответствующая программа), то система никак не будет реагировать на это событие.

Элементы языка VBA

Объекты — основные элементы языка VBA, но не единственные. К другим элементам относятся: константы, переменные, массивы, выражения, встроенные функции, встроенные диалоговые окна, операторы.

Константы — данные, не изменяющиеся в процессе решения задачи. Константы бывают двух видов: числовые и символьные.

Числовые константы — это целые либо вещественные числа.

Символьные константы — текст, заключенный в кавычки. Пример числовой константы — 5,8 (использование запятой или точки зависит от настроек операционной системы). Пример символьной константы — ООО “Темп”.

Переменные — данные, значения которых меняются в ходе выполнения программы. Для переменной задается имя и тип.

Имя переменной должно начинаться с буквы и может содержать любую комбинацию букв, цифр и символов за исключением точек, пробелов и следующих символов: “!”, “%”, “&”, “$”, “#”, “@”. Длина имени не должна превышать 255 символов. Не следует использовать имена, совпадающие с ключевыми словами VBA и именами встроенных функций и процедур.

Основные типы переменных, их размеры и диапазоны принимаемых значений приведены в табл. 1.

Переменные типа Variant могут хранить все, что в них поместят. Их тип изменяется в зависимости от последнего присвоения. В программах переменные описываются с помощью специального оператора Dim.

Массив — упорядоченная совокупность однотипных переменных. Массивы имеют имя и размерность. Имя массива подбирается с учетом тех же правил, что и имена переменных. Размерность — это количество элементов (переменных), составляющих массив.

Из констант, переменных и встроенных функций (они рассмотрены далее) с помощью скобок и знаков арифметических операций (“+”, “-”, “*”, “/”, “^”) можно составлять выражения. Частным случаем выражения может быть просто одиночный элемент, т.е. константа, переменная или обращение к встроенной функции.

В VBA имеется большой набор встроенных функций, которые разделяют на категории. Примеры категорий:

  • математические функции;
  • функции преобразования форматов;
  • логические функции;
  • функции времени и даты.
  • функции проверки типов;

Некоторые из функций приведены в табл. 2:

Кроме перечисленных функций, объект Applications позволяет вызвать более 400 встроенных функций рабочего листа при помощи конструкции вида:

Application.Функция Рабочего Листа(Аргументы).

  • Application.Sum(Sheets(«Проверка»).Range(«A1:B20»)) — суммируются значения из ячеек диапазона A1:B20, расположенного на листе “Проверка”;
  • Application.CountA(Sheets(«Ученики»).Range(«A:A»)) — подсчитывается количество непустых ячеек в столбце А на листе “Ученики”.

Структура редактора VBA

Редактор VBA активизируется командой Сервис ® Макрос ® Редактор Visual Basic. После выполнения команд мы попадаем в редактор VBA. Возвратиться из редактора VBA в рабочую книгу можно нажатием кнопки Вид(View) ® Microsoft Excel . Рассмотрим основные компоненты окна редактора. Внешний вид окна редактора представлен на рисунке. Окно редактора состоит из следующих компонентов:

  • панели инструментов;
  • окно проекта;
  • окно свойств;
  • окно редактирования кода;
  • меню.

Стандартная панель инструментов редактора Visual Basic содержит кнопки, предназначенные для выполнения наиболее часто используемых команд.

Панель разбита на отдельные сегменты по типу выполняемых команд.

Кнопки первого сегмента:

Кнопки для возврата в Excel, вставки элементов (модулей, процедур, экранных форм) в проект и сохранение рабочей книги.

Кнопки второго сегмента:

Кнопки для вырезания, копирования, вставки и поиска фрагментов кода.

Кнопки третьего сегмента:

Кнопки отмены действий и повторения отмененных действий.

Кнопки четвертого сегмента:

Кнопки для выполнения, остановки и прекращения выполнения процедуры, а также смены режима отображения экранной формы.

Кнопки пятого сегмента:

Кнопки, управляющие отображением окон проектов, свойств и просмотра объектов, а также панели инструментов.

Последняя кнопка — это обычная кнопка вызова справочной системы.

Окно проекта активизируется выбором команды Вид ® Окно проекта (View, Project window) или нажатием кнопки Окно проекта . В окне проекта представлена иерархическая структура файлов, форм и модулей текущего проекта.

В окне свойств перечисляются основные значения свойств выбранного объекта. Используя это окно, можно просматривать свойства и изменить их значения. Для просмотра свойств выбранного объекта надо выполнить команду Вид ® Окно свойств (Properties Windows) или нажатием кнопки .

Окно свойств состоит из двух составных частей: верхней и рабочей. В верхней части окна располагается раскрывающийся список, из которого можно выбрать любой элемент управления текущей формы или саму форму. Рабочая часть состоит из двух вкладок, в которых свойства располагаются По алфавиту (Alphabetic) и По категориям (Categorized).

Окно для просмотра объектов (Object Browser)

Окно Просмотр объектов (Object Browser) вызывается командой Вид ® Просмотр объектов (View, Object Browser) или нажатием кнопки . В этом окне можно просматривать все объекты проекта. Здесь вы найдете все свойства, методы и события, связанные с любым объектом.

Окно Просмотр объектов состоит из трех основных частей:

1. Раскрывающегося списка Проект/Библиотека в верхнем левом углу экрана. Например, библиотеки объектов Excel, VBA, Office и VBAProject (объекты пользовательского проекта).

2. Списка Классы. Выводятся все классы выбранной библиотеки.

3. Списка Компоненты (Members). Выводятся все компоненты выбранного класса.

Это окно предоставляет доступ ко всем объектам, свойствам, методам и событиям.

Проверочная работа № 1-1

Выберите правильный ответ (возможно несколько правильных ответов):

1. Объектом VBA являются:

2. Щелчок мышью или нажатие клавиши, перемещение мыши или выход из программы, это действие называется:

3. Для того чтобы подсчитать дискриминант в квадратном уравнении, надо его записать следующим образом:

4. Продолжите определение:

основной элемент языка VBA;

структура редактора VBA;

действия, совершаемые над объектами.

5. Чтобы стандартно изменить характеристику объекта, надо:

написать новую программу;

применить другое свойство;

изменить значение свойства.

6. Запишите конструкции, которые применяются для установки свойств объектов и доступа к их методам:

1. Запишите в ячейку В9 дату своего рождения, в ячейку В10 — свое имя.

2. Установите размер шрифта 16 в ячейках С4:F4, цвет — красный.

3. Покажите форму № 3.

4. Скройте форму № 2.

5. Выберите диапазон ячеек В2:D7.

Проверочная работа № 1-2

Выберите правильный ответ:

1. Очистить диапазон ячеек от А1 до С10:

2. Скрыть форму № 6:

3. Выйти из приложения:

4. Выделить диапазон ячеек от D6 до E8 на листе “География”:

5. Присвоить диапазону ячеек от А4 до А16, расположенных на листе “11 класс”, имя “Информатика”:

6. Установить источником строк для поля со списком два в пользовательской форме три данные из диапазона от А12 до А15:

7. Очистить значение поля для поля ввода со списком номер три в пользовательской форме номер два:

8. Установить флажок номер пять в пользовательской форме номер два:

UserForm2.ComboBox5. Capture = » True «

UserForm2.CheckBox5. Value = True

9. Сбросить флажок номер пять в пользовательской форме номер два:

UserForm5.CheckBox2. Value = True

UserForm2. CheckBox5. Value = False

UserForm2.ComboBox5. Capture = » True «

UserForm2.CheckBox5. Text = False

10. Выбрать переключатель номер два в пользовательской форме номер три:

UserForm2. CheckBox3. Value = False

UserForm2.ComboBox5. Capture = True

Практическая работа № 1-3

Установите соответствие между функцией и выражением:

Sin(x) х преобразуется в целое

Sqr(x) Натуральный логарифм

Abs(х) Модуль (абсолютная величина числа)

Cos(х) х преобразуется в число с плавающей точкой обычной точности

CInt(x) х преобразуется в строку

CSng(x) Текущие дата и время

CStr(x) Квадратный корень

Практическая работа № 1-4

1. Откройте новый файл.

2. Перейдите в редактор Visual Basic.

3. Нажмите клавишу для открытия окна Object Browser.

4. В списке Classes (Классы) найдите объект Range и выделите его.

5. Прокрутите соседний список Members of ‘Range’ для просмотра свойств и методов объекта Range.

6. Выберите метод Activate.

7. Нажмите клавишу . Откроется окно справочной системы Visual Basic с описанием метода Activate.

8. Откройте пример с применением метода Activate к объекту Range. Запишите пример.

9. Для объекта Range выберите свойство Cells. Запишите, для каких объектов, кроме объекта Range, характерно это свойство.

10. Запишите метод, используемый для удаления содержимого диапазона ячеек.

11. Запишите метод, используемый для удаления рабочего листа в книге.

12. В окне проекта выберите Лист1. В окне свойств измените его имя на имя ПРОБА. Запишите название свойства.

13. В окне проекта выберите Лист2. В окне свойств подберите свойство, которое будет делать этот лист невидимым. Запишите название свойства и его значение.

14. В окне проекта выберите Лист3. В окне свойств подберите свойство, которое будет изменять ширину столбцов. Укажите значение — 15. Запишите название свойства.

15. Закончите предложение: окно Object Browser можно использовать для просмотра списков объектов, событий, свойств и.

Формы в VBA – это тоже объекты

Формы в VBA – это тоже объекты

Формой называют любое созданное в VBA пользовательское окно. Если в вашей программе предусмотрен ее собственный пользовательский интерфейс, формами будут как главное окно программы, так и все другие диалоговые окна, отображаемые вашей программой (рис. 12.3).

Главное, здесь нужно понять, что формы VBA сами являются объектами, т.е. представляют собой сущности, содержащие как информацию (задающую, например, внешний вид формы на экране), так и набор средств для обработки этой информации. Официально формы в VBA описываются в терминах объекта User Form.

Рис. 12.3. Примеры форм VBA

Как и любые другие уважающие себя объекты в VBA, формы прекрасно вписываются в рамки парадигмы объектной модели. Каждый объект UserForm принадлежит одновременно двум коллекциям объектов — VBA-проекту, в котором хранится форма, и коллекции

UserForms, содержащей все формы, загружаемые программой. В свою очередь, объект UserForms служит контейнером для коллекции Controls, содержащей элементы управления, помещенные в форму.

Точно так же элементы управления в форме- кнопки, флажки, переключатели и всевозможные другие рычажки, которыми можно любоваться и играть, — тоже являются объектами.

Для каждого типа элементов управления в VBA предлагается объект соответствующего типа.

Техника, с помощью которой можно получить доступ к конкретной форме или помещенному в нее элементу управления и использовать свойства, методы и события этого объекта, ничем не отличается от техники, используемой с другими объектами, о которых говорится в этой главе. Подробнее о работе с формами и элементами управления (а значит, и соответствующими объектами) говорится в главах 10 и 19.

Использование объектов в программе

Теперь, когда теоретические основы пройдены, наступает время практических рекомендаций по программированию с использованием объектов VBA. Начнем, пожалуй, с использования в программном коде свойств, методов и событий объектов, а уж после этого перейдем к более тонким вопросам идентификации объектов, которые предполагается использовать.

Хотя в самом понятии объекта и есть кое-что, над чем можно поломать голову, использовать объекты достаточно просто. Поскольку объекты имеют имена, вы всегда можете знать, с каким из объектов работаете. Чтобы идентифицировать в программном коде метод или свойство объекта, с которыми предполагается иметь дело, нужно просто напечатать имя объекта, за ним точку и, наконец, имя метода или свойства.

Например, MyShape.LineStyle идентифицирует свойство LineStyle объекта с именем MyShape в Visio. Точно так же MyWorksheet. Calculate идентифицирует метод Calculate объекта рабочего листа с именем MyWorksheet в Excel.

Правда, здесь вы можете задать себе вопрос: «Но как же мне узнать имя объекта, которое необходимо поместить в начале?» Блестящий вопрос! Вот только ответ на этот вопрос требует достаточно пространных пояснений, которые я отложу до раздела ‘Идентификация объекта для использования», сосредоточившись сначала на обсуждении свойств, методов и событий. А пока что примите на веру, что объект можно вызвать по его имени.

Как вам стало очевидным из раздела «Что такое объектная модель», каждое VBA приложение имеет свою неповторимую объектную модель (иерархию объектов), а каждый из его объектов имеет свой собственный набор свойств, методов и событий. Чтобы заставить эти объекты работать в программе, вам необходимо хорошо разобраться в деталях объектной модели соответствующего приложения.

Во многих приложениях справка о VBA содержит специальный раздел, в котором вы найдете графическое представление объектной модели этого приложения (рис. 12.4). Если диаграмма объектной модели не появилась перед вами при первом же вызове справки, перейдите в окне справки на вкладку Содержание, где она будет представлена под рубрикой типа Microsoft Excel Objects.

Используя диаграмму объектной модели в качестве гида, вы сможете открыть информацию о конкретном объекте, дважды щелкнув на его имени в диафамме. Иначе получить нужную информацию можно, отыскав в указателе справки соответствующий раздел и открыв его. Как правило, в любом разделе, посвященном объекту, имеются ссылки на другие разделы, содержащие дополнительную информацию о свойствах, методах и событиях соответствующего объекта. (Заметьте, здесь идет речь о справке о VBA для соответствующего приложения, а не об общей справке о приложении или VBA. О работе со справочной системой VBA см. главу 4.)

Рис. 12.4. Объектная модель Excel

Другим жизненно важным средством для изучения свойств, методов и событий объектов и их взаимосвязей в приложении является обозреватель объектов в редакторе Visual Basic.

Полное описание обозревателя объектов см. в главе 6.

Классы и объекты

Эта глава вместе с главами 5 и 6 занимает центральное место в книге. Причины просты: язык VB .NET стал первой объектно-ориентированной версией VB, и тот, кто недостаточно хорошо разбирается в ООП, не сможет в полной мере использовать новые возможности VB .NET. Вероятно, это утверждение вас удивило — ведь возможность определения классов и создания объектов на их основе появилась еще в VB4. Чем же VB .NET так отличается от своих предшественников, что вам придется полностью переосмыслить свой стиль программирования? Развернутый ответ на этот вопрос приводится в этих трех главах.

За время преподавательской работы у нас сложилось впечатление, что большинство программистов VB почти не использовали средства ООП в предыдущих версиях Visual Basic. Это объяснялось как неудобной и плохо проработанной реализацией ООП, так и тем, что многие программисты не понимали, как правильно применять средства объектно-ориентированного программирования. Усовершенствования в VB .NET покончили с первой проблемой. Что касается второй. Что же, именно поэтому эта глава начинается с краткого курса ООП. Как бы вы к этому не относились, нормальное программирование в VB .NET возможно лишь при полноценном использовании объектной природы этого языка. В главах 4-6 ООП рассматривается с практической точки зрения программиста VB .NET, без углубленного изучения теоретических тонкостей. Особое внимание уделяется практическим примерам и приемам, используемым при решении реальных задач. Мы постараемся обойтись без высоких материй, поскольку чрезмерное обилие деталей только отвлечет читателя от основной темы — если вас интересует теория, вы найдете ее в десятках книг, посвященных ООП. Тем не менее в ООП используется достаточно специфическая терминология, поэтому мы начнем с обсуждения важнейших концепций и терминов (читатели, хорошо разбирающиеся в ООП, могут пропустить вводную часть).

На следующем этапе рассматривается использование существующих классов и объектов, созданных на их основе. В частности, мы покажем, как использовать важный класс StringBuilder и некоторые новые классы коллекций .NET Framework (в том числе хэш-таблицы и динамические массивы). Вы узнаете о некоторых тон костях, связанных с передачей объектов функциям и процедурам. Только после этого мы перейдем к определению новых классов и построению объектов на их основе (хотя в этой главе приводятся начальные сведения о наследовании и интерфейсах, подробное описание этих ключевых концепций ООП откладывается до главы 5).

Несмотря на внешние различия, с позиций ООП языки С# и VB .NET очень похожи, по-этому хорошее знание материала глав 4 и 5 упростит переход на С# и Java.

VB .NET значительно расширяет событийную модель программирования прежних версий VB, в основу которой были заложены элементы управления. В VB .NET вся программа состоит из самостоятельных объектов, взаимодействующих друг с другом. Объекты создаются по шаблонам, называемым классами. Объекты, построенные на базе одного класса:

  • обладают сходными свойствами и выполняют сходные операции;
  • не могут взаимодействовать друг с другом способами, не предусмотренными в открытом интерфейсе вашей программы;
  • изменяют свое текущее состояние со временем при поступлении специального запроса (в VB .NET это происходит при вызове метода или изменении свойства).

Если объект ведет себя по определенным правилам, образующим открытый интерфейс, и должным образом реагирует на внешние воздействия, пользователю не нужно думать о внутренней реализации этого объекта.

Программистам VB хорошо знакома концепция автономных фрагментов программного кода с четко определенной функциональностью. Конечно, речь идет об элементах управления. Возможность многократного использования кода, оформленного в виде элементов, повышает эффективность программирования на VB по сравнению с традиционной (процедурной) моделью.

Одно из величайших преимуществ .NET заключается в том, что вы можете программировать классы на любом языке по своему выбору, и они будут нормально работать в любом другом языке. Например, написанный на VB .NET элемент можно будет использовать в С#, и наоборот, а благодаря среде Common Language Runtime выбор языка практически не отразится на быстродействии.

Классы как пользовательские типы

Класс также можно рассматривать как «интеллектуальный» пользовательский тип, обладающий расширенными возможностями — например, перед изменением своих внутренних данных класс может проверить их новые значения. При обращении к данным класс может проверить полномочия стороны, от которой поступил вызов. Наконец, представьте себе пользовательский тип, который возвращает данные в определенном формате вместо того, чтобы просто выдавать их внутреннее представление.

С этой точки зрения объект представляет собой переменную пользовательского типа, с которой ассоциированы функции обращения к данным и их проверки. Главный принцип работы с данными класса — замена прямого доступа к данным вызовом вспомогательных функций.

На первый взгляд организация доступа к данным при помощи функций только прибавляет работы программисту, но это небольшое усложнение с лихвой компенсируется преимуществами от проверки и контроля доступа к данным.

По мере освоения ООП перед вами откроются новые возможности, не ограничивающиеся простой проверкой или возвращением внутренних данных объекта.

Как объекты взаимодействуют друг с другом?

Согласно одному из ключевых принципов ООП каждый класс (= шаблон для построения объектов) отвечает за выполнение небольшой группы взаимосвязанных задач. Проектирование и отладка специализированного класса, предназначенного для создания простых объектов с небольшим количеством задач, занимает гораздо меньше времени, чем разработка классов со сложными внутренними структурами данных, многочисленными методами и свойствами. Если потребуется сделать нечто такое, на что ваш объект не рассчитан, не стоит вносить изменения в исходный класс и усложнять его — лучше определите новый класс, оптимизированный для решения этой задачи. Предоставьте старому объекту доступ к объектам нового типа, и старый объект сможет обратиться к новому объекту с запросом на выполнение нужной операции.

Пользователи прежних версий VB хорошо знакомы с подобным взаимодействием между объектами. В частности, именно это и происходит при вызове методов или задании свойств элементов. С точки зрения пользователя, запрос к другому объекту реализуется обращением к свойству или вызовом метода этого объекта. На внутреннем уровне в обработке запросов участвуют обобщенные версии функций и процедур VB .NET (см. главу 3). Таким образом, все подробности внутренней реализации остаются скрытыми от внешнего мира.

На жаргоне ООП этот принцип формулируется так: объекты взаимодействуют с другими объектами только посредством обмена сообщениями. Еще раз подчеркнем — объект никогда не должен напрямую работать с внутренними данными другого объекта. Все взаимодействие должно происходить на уровне сообщений (задания свойств и вызова методов). Проектируйте свои объекты по принципу «черного ящика»: объект реагирует на сообщения из определенного набора, а его фактическая реализация остается неизвестной.

Подведем итог. Все операции с объектами в программе должны сводиться к изменению их свойств и вызову методов. Не используйте открытые (глобальные) переменные в классах или объектах, созданных на их основе.

Отправной точкой во всей терминологии ООП является понятие класса. Классом называется шаблон, по которому создаются объекты.

Каждый объект, созданный на основе класса, называется экземпляром этого класса. Методы, свойства и процедуры событий, определенные внутри класса, называются членами. Предположим, вы пишете программу для работы с информацией о сотрудниках компании. Несомненно, в такой программе будет определен класс Employee; каждый экземпляр класса Employee будет соответствовать конкретному человеку. Члены класса Employee должны соответствовать специфике решаемых задач (например, в свойстве Name будет храниться имя работника, а метод Raise-Salary будет использоваться для повышения зарплаты).

Отношения между классами в программах

В традиционном ООП предусмотрены три типа отношений между классами:

  • Использование: непосредственная зависимость.
  • Включение: иногда называется агрегированием. Реализует логические связи типа «является составной частью».
  • Наследование: реализует логические связи типа «является частным случаем».

В таких языках, как VB .NET, C# и Java, кроме классических типов существует четвертый тип отношений между классами — реализация интерфейса (отношение типа «поддерживает»). Суть реализации интерфейса заключается в том, что для поддержки некоторых функциональных возможностей ваш класс принимает на себя обязательства, по которым он должен содержать определенные члены. Интерфейсы существуют в VB начиная с версии 5 и часто используются в VB .NET. В главе 5 эта тема рассматривается гораздо подробнее.

Вернемся к классической тройке. Отношение использования, самое очевидное и распространенное, всего лишь означает, что один класс зависит от другого. Во всех ситуациях, когда один объект посылает сообщение другому объекту, можно говорить о зависимости между этими объектами. В обобщенном случае класс А использует класс Б, если:

  • член класса А отправляет сообщение объекту класса Б
  • член класса А создает или возвращает объекты класса Б.

Постарайтесь свести к минимуму количество взаимодействующих классов. Иначе говоря, избегайте лишних связей между классами, без которых можно обойтись. Если класс А не использует класс Б, то изменения в классе Б никак не отразятся на работе класса А (а следовательно, модификация класса Б не станет причиной ошибок в классе А!).

Термин «включение» (агрегирование) означает, что объект класса А содержит внутренние объекты класса Б.

На базе включения реализуется методика делегирования, когда поставленная перед внешним объектом задача перепоручается внутреннему объекту, специализирующемуся на решении задач такого рода. Агрегирование с делегированием методов было очень распространенным явлением в прежних версиях VB, поскольку этот принцип использовался при создании новых элементов (вспомните, как создавались новые, специализированные текстовые поля — вы размещали текстовое иоле внутри формы пользовательского элемента, а затем запускали программу-мастер, которая автоматически генерировала код делегирования).

Агрегирование по-прежнему широко используется в VB .NET, но во многих ситуациях ему на смену приходит наследование — третий тип отношений между классами. Наследование считается одним из четырех «краеугольных камней» ООП наряду с абстракцией, инкапсуляцией и полиморфизмом. Все четыре концепции будут рассмотрены в ближайших четырех разделах.

Абстракцией называется моделирование объектов в программе. Другими словами, речь идет об имитации реально существующих объектов, отражающей особенности их взаимодействия в окружающем мире. Так, первый объектно-ориентированный язык Simula (http://java.sun.com/people/jag/SimulaHistory.html) разрабатывался специально для задач имитации и моделирования. Впрочем, модные концепции виртуальной реальности выводят принцип абстракции на совершенно новый уровень, не связанный с физическими объектами. Абстракция необходима, потому что успешное использование ООП возможно лишь в том случае, если вы сможете выделить содержательные аспекты своей проблемы.

Приступая к построению объектной модели, всегда задавайте себе вопрос: какие свойства и методы должны входить в объект, чтобы он адекватно моделировал ситуацию для решения поставленной задачи?

В ООП термин «инкапсуляция» означает то, что мы обычно называем маскировкой данных. Скрывая данные, вы определяете свойства и методы для работы с ними. Вспомните, что говорилось выше, — успешное применение ООП возможно лишь в том случае, если все операции с внутренними данными объекта осуществляются посредством обмена сообщениями. Данные объекта хранятся в полях экземпляра; также часто встречается термин «переменные экземпляра». В сущности, это одно и то же, и выбор зависит в основном от того, к какому термину вы привыкли; в этой книге обычно используется термин «поля экземпляра». Текущее состояние объекта определяется текущими значениями полей экземпляра. Не забывайте главное правило: никогда не предоставляйте прямой доступ извне к полям экземпляра (внутренним данным объекта).

Вернемся к примеру с объектно-ориентированной программой для отдела кадров, в которой мы определили класс Employee. В переменных класса Еmplоуее могут храниться следующие сведения:

Чтобы изменить значения полей экземпляра, пользователи не обращаются к ним напрямую, а изменяют свойства и вызывают методы типа Rai seSalаrу. Разумеется, метод RaiseSalary будет изменять поле с текущей зарплатой, но в нетривиальном классе Employee он может работать с несколькими полями. Например, легко представить себе метод Rai seSalагу, который принимает решение о повышении зарплаты с учетом ее текущего уровня, рабочего стажа и личных достижений работника. Подведем итог. Инкапсуляция определяет функциональность объекта с точки зрения пользователя. Ее непосредственными проявлениями в VB .NETвыступают члены класса (методы, события и свойства).

Рискуя надоесть частыми повторениями, мы все же еще раз подчеркнем: успешное применение инкапсуляции возможно, если другие части вашей программы никогда не получают прямого доступа к полям экземпляра (переменным) ваших классов. Программа должна взаимодействовать с ними только через вспомогательные члены класса. Только при наличии закрытых данных, недоступных извне, объект превращается в «черный ящик» с четкими правилами поведения и неизвестным внутренним устройством. Ограничение доступа к данным имеет определяющее значение как для повторного использования, так и для надежности объекта при долгосрочном использовании.

В качестве примера наследования представьте себе классы для отдельных категорий работников (класс Programmer, класс Manager и т. д.). Механизм, используемый для создания таких классов на базе класса Empl oyee, называется наследованием. В иерархии наследования класс Employee называется базовым, а класс Programmer — производным классом. Производные классы:

  • всегда решают более специализированные задачи, чем базовые классы;
  • содержат все члены базового класса (хотя поведение этих членов может быть совершенно иным).

Например, метод RaiseSalary класса Manager может давать менеджеру большую прибавку к жалованию, чем метод RaiseSalary класса Programmer, при одинаковом стаже и личных показателях.


Производный класс может содержать новые методы, не имеющие аналогов в базовом классе.

Например, в класс Manager может быть включено новое свойство Secretary.

Разработчики давно хотели видеть наследование в VB и громко жаловались на его отсутствие. Нельзя сказать, что шум был поднят на пустом месте, однако многие склонны переоценивать важность наследования. Дело в том, что наследование, если хорошенько разобраться, всего лишь избавляет программиста от необходимости заново писать готовый код. В наследовании нет никакой мистики — это лишь способ упростить повторное использование программного кода. В нашем примере классы Employee и Manager обладали рядом сходных черт (наличие даты найма, зарплаты и т. д.). Зачем программировать свойство Salary в двух местах, если код будет абсолютно одинаковым? При полноценной реализации наследования использование функциональности базового класса в производном классе практически не требует дополнительных усилий — производный класс изначально наследует все члены своего предка. Программист может переопределить некоторые члены базового класса в соответствии со спецификой производного класса. Например, если менеджер автоматически получает 8-процентную прибавку к зарплате, тогда как для большинства работников прибавка составляет всего 4%, метод RaiseSalагу класса Manager должен заменить метод RaiseSalary базового класса Employee. С другой стороны, методы вроде GetName в изменении не нуждаются и остаются в прежнем виде.

Многие влиятельные теоретики ООП полагают, что от наследования вообще стоит дер-жаться подальше, и рекомендуют заменить его использованием интерфейсов (конечно, в VB .NET поддерживаются обе возможности). Такое отношение связано с проблемой неустойчивости базовых классов, которая в VB .NET отошла на второй план (за подробностями обращайтесь к главе 5). Использование интерфейсов вместо классического наследования иногда называется наследованием интерфейсов, тогда как за классическим наследованием закреплен термин «наследование реализации».

Напоследок мы хотим предупредить: не используйте наследование, если вы твердо не уверены в существовании логической связи «является частным случаем». Например, не создавайте класс Contractor (внештатный работник), производный от Employee, только для того, чтобы избавиться от хлопот по дублированию кода свойств имени или номера социального страхования. Внештатный работник не является служащим компании, и бухгалтер, простоты ради оформивший его по общим правилам, только наживет себе неприятности с налоговой инспекцией. То же относится и к вам: применение наследования при отсутствии логической связи «является частным случаем» приведет к печальным последствиям (см. главу 5).

В традиционной трактовке термин «полиморфизм» (от греческого «много форм») означает, что объекты производных классов выбирают используемую версию метода в зависимости от своего положения в иерархии наследования. Например, и в базовом классе Employee, и в производном классе Manager присутствует метод для повышения зарплаты работника. Тем не менее метод RaiseSalаrу для объектов класса Manager работает не так, как одноименный метод базового объекта Employee.

Классическое проявление полиморфизма при работе с классом Manager, производным от Empl oyee, заключается в том, что при вызове метода по ссылке на Empl oyee будет автоматически выбрана нужная версия метода (базового или производного класса). Допустим, в программе метод RaiseSalary вызывается по ссылке на Employee.

  • Если ссылка на Empl oyee в действительности относится к объекту Manager, будет вызван метод RalseSalary класса Manager.
  • В противном случае вызывается стандартный метод RaiseSalary базового класса.

В VB5 и VB6 смысл термина «полиморфизм» был расширен, и к традиционному полимор-физму на базе наследования добавился полиморфизм на базе интерфейсов (объект, реализующий интерфейс, вызывал метод интерфейса вместо другого метода с тем же именем). Объект, реализующий интерфейс Manager, правильно выберет метод RaiseSalary в зависимости от контекста использования.

В обоих случаях объект выбирает метод в зависимости от полученного сообщения. При отправке сообщения не нужно знать, к какому классу фактически при надлежит объект; достаточно разослать сообщение всем объектам Employee и поручить выбор полиморфного метода компилятору.

Следующий пример показывает, почему полиморфизму придается такое большое значение. Одному из авторов доводилось консультировать компанию, занимавшуюся компьютерной обработкой медицинских анализов. Каждый раз, когда в процесс тестирования включался новый реактив, программистам приходилось просматривать многие тысячи строк кода, искать команды Select Case и добавлять в них секции Case для нового реактива. Стоило пропустить хотя бы одну. и нам бы не хотелось, чтобы этот реактив испытывался на наших анализах крови. Конечно, исправление многих команд Select Case превращало сопровождение в настоящий кошмар, требующий долгих часов тестирования.

Полиморфизм позволяет написать программу, которая в подобной ситуации ограничивается единственным изменением. Все, что от вас потребуется, — определить для нового реактива новый класс и правильно запрограммировать в нем переопределяемые или добавленные методы.

Почему? Потому что в главной программе можно будет использовать конструкции следующего вида:

For Each reagent in Reagents

Показанный цикл будет автоматически работать с новым реактивом, а необходимость в долгих поисках Sel ect Case отпадет.

Select Case reagent Case iodine

‘ Действия с йодом Case benzene

‘ Действия с бензолом

‘ И т. д. для 100 разных случаев в 100 местах

В приведенном выше фрагменте цикл For Each перебирает все возможные реактивы, и благодаря волшебному свойству полиморфизма компилятор найдет метод, который должен вызываться для каждого конкретного реактива. Правильное использование полиморфизма избавит вас от громоздких команд Select Case, выбирающих нужное действие в зависимости от типа объекта.

Переход к использованию объектов

С давних времен в программировании использовалась структурная, процедурно-ориентированная модель. Сначала программист разбирался, что должна делать программа, а затем выбирал одно из двух:

  1. Задача разбивалась на подзадачи; те, в свою очередь, делились на подзадачи следующего уровня и т. д. Это продолжалось до тех пор, пока упрощение подзадач не позволяло реализовать их непосредственно (подход «сверху вниз»).
  2. Программист писал процедуры для решения простых задач и последовательно объединял их в более сложные процедуры, пока недобивался нужного эффекта (подход «снизу вверх»).

Конечно, многие опытные программисты не следовали рекомендациям теоретиков, выступавших за первый способ, и предпочитали решать практические задачи комбинацией этих двух стратегий [В программировании это обычно называется встречным движением.].

Между ООП и процедурно-ориентированным программированием существуют два важных различия:

  1. В ООП программист сначала выделяет классы, образующие объектную модель, и только после этого переходит к анализу их методов и свойств.
  2. Методы и свойства ассоциируются с классом, предназначенным для выполнения соответствующих операций.

Возникает очевидный вопрос: по каким критериям выделять классы в программе? Для этого имеется хорошее эмпирическое правило, которое связывает компоненты объектной модели с частями речи. Классы соответствуют существительным в постановке задачи. В нашем примере центральное место занимает существительное «работник» (Employee). Методы объектов соответствуют глаголам — например, работнику можно повысить зарплату (метод RaiseSalary). Свойства соответствуют прилагательным, описывающим существительные. Разумеется, это соответствие лишь намечает контуры объектной модели. Только практический опыт поможет вам решить, какие существительные, глаголы и прилагательные важны, а какие являются второстепенными.

Сейчас стоит повторить золотое правило программирования, нисколько не изменившееся с переходом на ООП: будьте проще. Использование простых классов заметно упрощает объектно-ориентированное программирование. Класс с простой внутренней структурой и небольшим числом внешних связей проще понять, а следовательно, и запрограммировать.

Описание логических связей между классами играет в ООП настолько важную роль, что появилась целая наука о построении диаграмм, иллюстрирующих отношения между классами. Чаще всего для описания логических связей применяется язык UML (Uniform Model Language). Средства построения диаграмм входят во многие системы автоматизированной разработки программ — такие, как Microsoft Visual Modeler и Visio, а также Rational Rose компании Rational Software (Visual Modeler входит в некоторые версии VS .NET).

Некоторые пакеты на основании диаграммы автоматически генерируют базовый код классов. За общими сведениями о UML мы рекомендуем обращаться на web-сайт Rational (www.rational.com/uml).

Итак, вы решили, какие классы должны входить в ваш проект. На следующем этапе построения объектной модели рассматриваются конкретные экземпляры этих классов. Попробуйте ответить на три вопроса:

  1. Каким состоянием должен обладать объект?
  2. Какими отличительными особенностями должен обладать объект?
  3. Каким должно быть поведение объекта?

В полях экземпляра хранится информация об операциях, выполняемых объектом; некоторые поля могут использоваться для хранения информации об истории существования объекта. В совокупности эти сведения определяют состояние объекта. Состояние объекта подвержено частым изменениям, но, как было сказано выше, любые изменения в состоянии объекта в результате внешних воздействий должны происходить только в результате полученных сообщений.

Текущее состояние объекта не обеспечивает его однозначной идентификации. Два объекта могут находиться в одинаковом состоянии, одинаково реагировать на внешние воздействия, но при этом они все равно остаются разными объектами (как два массива с одинаковым содержимым). Таким образом, должен существовать некий критерий, по которому объект можно отличить от других похожих объектов. К поведению объекта относится информация о том, что он делает в данный момент и что он теоретически может сделать в будущем. В VB .NET поведение объекта определяется его свойствами, методами и событиями.

Несомненно, эти три характеристики влияют друг на друга, и это обстоятельство должно учитываться в коде класса. Например, поведение объекта зависит от его текущего состояния: заблокированное текстовое поле ведет себя совсем не так, как доступное, и об этом следует помнить при проектировании класса.

На первый взгляд классы ООП и связанные с ними методы и свойства имеют много общего с процедурным подходом и модульным строением программ. Ключевое различие заключается в следующем:

Класс представляет собой шаблон для создания объектов, состояние которых изменяется со временем.

Выглядит слишком абстрактно? И вроде бы не имеет никакого отношения к программированию VB? Вспомните панель элементов Visual Basic. В прежних версиях VB каждая кнопка панели создавала объект, являющийся экземпляром класса соответствующего элемента.

А если бы панель элементов, готовая в любой момент создать новое текстовое поле или кнопку по вашему запросу, куда-то исчезла? Только представьте, какими сложными станут программы VB, если каждое текстовое поле придется оформлять в виде отдельного модуля! Кстати говоря, один модуль нельзя подключить к программе дважды, поэтому создание формы с двумя одинаковыми текстовыми полями потребует довольно изощренного программирования.

Благодаря существованию панели элементов VB всегда был объектно-ориентированным языком. Начиная с версии 4 в нем появилась возможность создавать некоторые типы объектов. Но только в VB .NET программист может определять классы для любых объектов и в полной мере использовать средства ООП на том же уровне, что и в C++ и С#. Более того, все языки .NET обеспечивают примерно равную эффективность п$и работе с классами.

Создание объектов в VB .NET

В VB .NET, как и в прежних версиях VB, объекты создаются ключевым словом New (исключение составляют строки и массивы — для создания этих объектов предусмотрена сокращенная запись).

Рассмотрим практический пример — в .NET Framework входит полезный класс Random для работы со случайными числами. По своим возможностям этот класс превосходит функцию Rnd, сохраненную в языке для обеспечения обратной совместимости. Например, класс Random позволяет заполнить байтовый массив случайными числами от 0 до 255 или сгенерировать положительное случайное число в заданном интервале. Однако Random — не функция, а класс, методы которого вызываются с указанием конкретного экземпляра. А для этого необходимо предварительно создать экземпляр (проще говоря, объект) класса Random.

Сделать это можно несколькими способами, и в любом варианте используется ключевое слово New. Самый наглядный, хотя и не самый компактный способ заключается в отделении объявления класса от вызова New:

Dim aRandomlnstance As Random

‘ Объявление aRandomlnstance = New Random()

Многие программисты предпочитают использовать сокращенную запись:

Dim aRandomlnstance As New Random

‘ Экземпляр создается при объявлении

Эта команда эквивалентна приведенному выше фрагменту; в ней используется такая возможность VB .NET, как инициализация переменных при объявлении.

На языке ООП метод New называется конструктором, поскольку он предназначен для создания (конструирования) экземпляров класса.

Программисты, работавшие с предыдущими версиям VB, должны обратить внимание на следующее: в VB .NET не поддерживается ключевое слово Set (некоторые побочные эффекты его исчезновения описаны в разделе «Свойства» настоящей главы). Два варианта синтаксиса New различаются только реакцией на исключения, возникающие при создании объектов (см. главу 7).

В прежних версиях VB между полной и сокращенной формой вызова конструктора существовали тонкие различия, связанные с тем, что при сокращенной записи создание объекта откладывалось до момента первого использования. В VB .NET эта особенность была исключена.

Некоторые программисты (особенно работающие на С# и Java) предпочитают третий вариант синтаксиса, который выглядит как комбинация первых двух:

Dim foo As Random = New Random()

Он ничем не отличается от второго варианта синтаксиса.

Метод New позволяет конструировать объекты в любом выражении VB .NET, если результат соответствует контексту. Следующая команда VB .NET вполне допу стима (хотя понять ее непросто, поэтому использовать подобный стиль программирования не рекомендуется):

Consolе.WriteLi net New Random().Next())

Впрочем, подобные конструкции могут встретиться в чужих программах, которые вам придется сопровождать. Особенно часто они используются программистами с опытом работы на C++/Java.

Создав экземпляр класса Random, вы можете пользоваться его методами и свойствами при помощи знакомого «точечного» синтаксиса. Библиотека .NET Framework содержит множество классов; технология IntelliSense всегда напомнит вам, что можно сделать с тем или иным экземпляром класса (рис. 4.1).

Рис. 4.1. Подсказка IntelliSense для класса Random

Например, в отличие от функции Rnd из прежних версий VB вам не придется дополнительно обрабатывать числа от 0 до 1, чтобы получить случайное положительное число в заданном интервале. Вам понадобилось случайное целое от 1 до 6? Воспользуйтесь следующей конструкцией:

Dim aRandomlinstance As New Random()

Dim die As Integer die =aRandomInstance.Next(1.6)

Не используйте класс Random для серьезных криптографических задач, поскольку его алгоритм построения случайных чисел легко взломать. Библиотека .NET Framework велика, и в нее входит генератор случайных чисел, надежный с точки зрения криптографии (конечно, более медленный) — класс RandomNumberGenerator из пространства имен System.Security.Cryptography (пространства имен рассматриваются ниже в этой главе).

Доступ к средствам класса обычно осуществляется через конкретный экземпляр, однако у этого правила имеется исключение. Дело в том, что некоторые возможности реализуются на уровне класса, а не отдельных объектов. В главе 3 мы встречались с классом Math и использованием конструкций Math . PI и Math . Sin( ) без вызова метода New. Члены, принадлежащие классу в целом, а не его отдельным экземплярам, называются общими (shared). К общим членам можно обращаться как по имени класса, так и по имени объектной переменной, объявленной с соответствую щим типом. Предположим, у вас имеется класс Ваr с общим методом Foo. Метод Foo может быть вызван любым. из приведенных ниже способов:

Dim test As Bar test.Foo()

В других языках программирования (таких, как С# и Java) общие члены называются статическими (static).

На первый взгляд конструктор New работает так же, как в предыдущих версиях VB. В действительности изменилось очень многое, и самое принципиальное изменение заключается в том, что при вызове New теперь могут передаваться параметры. Как вы вскоре увидите, в пользовательских классах переопределенная версия New замещает событие Initial ize из прежних версий VB, которое не поддерживало параметров.

Например, для класса Random определены две версии конструктора. Первая версия вызывается без параметров, как показано выше. В этом случае вы получаете случайные числа, полученные в результате случайной инициализации генератора по показаниям системных часов. Другая версия выглядит так:

Dim aRandomlnstance As Random

aRandomlnstance = New Random(42)

Эта версия класса Random генерирует одну и ту же последовательность случайных чисел, начинающуюся с числа 42 (эта возможность абсолютно необходима в процессе отладки).

Как ни странно, появление параметризованных конструкторов в VB сделало для полноценной реализации ООП едва ли не больше, чем поддержка наследования. Если наследование еще можно заменить в программе другими средствами (обычно агрегированием), то компенсировать отсутствие параметризованных конструкторов гораздо труднее. Параметризованные конструкторы нужны прежде всего для того, чтобы предотвратить случайное создание объекта в неопределенном состоянии. В прежних версиях VB это всегда порождало массу проблем, поскольку событие Initialize вызывалось без параметров. Оставалось лишь следовать общепринятой схеме — включать в класс функцию инициализации объектов (обычно этой функции присваивалось имя Create) и надеяться на то, что пользовать класса не забудет вызвать эту функцию. В противном случае объект не инициализировался, а поля экземпляра сохраняли значения по умолчанию, что приводило к появлению тонких, неуловимых ошибок.

В VB .NET, как во всех объектно-ориентированных языках, объект создается только конструктором. Более того, ниже будет показано, как потребовать обязательной передачи параметров при вызове конструктора — это гарантирует, что объект не будет создан в неопределенном состоянии.

Определение нескольких версий одной функции, различающихся только типом пара-метров, называется перегрузкой (overloading). Как будет показано ниже, в VB .NET перегрузка поддерживается не только для конструкторов New, но для любых функций и процедур. Перегрузка также используется для решения проблемы с передачей необязательных параметров.

Пример: класс String

Другим хорошим примером класса с несколькими конструкторами является класс String. Хотя для конструирования строк предусмотрена сокращенная запись (последовательность символов, заключенная в кавычки), в более сложных случаях лучше перейти на использование конструкторов. Например, один из конструкторов создает строку, состоящую из нескольких копий одного символа. Следующая команда создает строку из 37 пробелов:

Dim str As String = New String((CChar(» «), 37)

В данном случае вместо конструктора можно воспользоваться функцией Space (учтите, что в режиме жесткой проверки типов Option Strict On строка, состоящая из одного символа «пробел», должна преобразовываться в символ специальной функцией).

Обобщенная форма этого конструктора выглядит так:

New (ByVal с as Char, ByVal count As Integer)

При работе с классом Stri ng также часто используется конструктор New(ByVal val ue() As Char, который получает массив символов и преобразует их в строку.

Поскольку строковые переменные в VB .NET стали объектными, при вводе «.» после имени строковой переменной появляется подсказка IntelliSense со списком членов класса String.

Пример: класс StringBuilder

Чрезвычайно полезный класс StringBuilder входит в пространство имен System.Text (пространства имен рассматриваются в следующем разделе). Этот класс следует использовать вместо обычного класса String в тех случаях, когда вы собираетесь внести постоянные изменения в строку. Дело в том, что при каждом изменении строки (даже при простом добавлении нового символа) VB .NET приходится создавать новую строку, а эта операция требует времени. При работе с экземпляром класса StringBuilder VB .NET обходится модификацией исходного объекта.

При создании пустого объекта Stri ngBui I der методом New VB .NET резервирует блок памяти для 16 символов и автоматически наращивает его при включении новых символов. Объект StringBuilder можно рассматривать как «интеллектуальный» массив символов, который увеличивается и уменьшается по мере надобности и поэтому в каком-то смысле напоминает тип Stri ng в V-B6. Текущий размер объекта Stri ngBui I der называется вместимостью (capacity). В классе Stri ngBui I der определены шесть конструкторов, перечисленных в табл. 4.1.

Таблица 4.1. Конструкторы класса StringBuilder

6. Основы vba (Visual Basic for Application)

6.1. Объекты, методы, свойства

Visual Basic позволяет создавать программные продукты, способные с достаточной полнотой автоматизировать решение конкретных задач пользователя.

VBA является объектно-ориентированной средой, содержащей большой набор объектов, каждый из которых обладает множеством свойств и методов. Объекты и инструменты относятся к определенному классу (например, класс TextBox).

Свойства и методы также являются членами класса. С помощью свойств описывается, как выглядит объект, в частности дается информация о приемах форматирования текста, цвете и размере шрифта. Методы являются процедурами, которые могут быть выполнены для объекта (процедуры создания и удаления объекта, процедуры событий, определяющие принцип взаимодействия объекта с пользователем и т.д.).

Объекты (аналог существительному)

Объектом считается любой элемент приложения ─ ячейка, лист, рабочая книга, диаграмма. Фактически объектом является и само приложение Excel. Объекты могут включать области ячеек, рамки ячеек, окна, сценарии, стили и т.д. Каждый класс объектов имеет свое множество свойств, функций и событий.

Методы (аналог глаголу)

Метод ─ это действие, которое может быть выполнено над объектом. Методы реализуются посредством выполнения процедуры, которая является членом класса объектов.

Синтаксис вызова: Объект.Метод – указываются имя вызывающего метод объекта и имя самого метода, разделенные точкой.

Пример: Ball.Kick или Мяч.Ударить; Вода.Пить

Комбинация двоеточия и знака равенства в коде всегда указывают на параметр метода, т.е. как выполняется действие.

Методы могут иметь много параметров как обязательные, так и нет.

Пример 1: защита листа Лист1 от внесения изменения (метод Protect)

Пример 2: добавление нового рабочего листа

Свойство (аналог прилагательному)

Свойство является атрибутом объекта, описывающим, как объект выглядит (его цвет, размер и местоположение) и как он действует (является ли видимым, ссылается ли на другой объект). При создании объекта выполняется процедура создания экземпляра этого объекта.

Для присваивания свойству нового значения, необходимо создать оператор присваивания, в котором слева от знака равенства будут указаны имя и свойство объекта (разделенные точкой), а справа ─ новое значение.

Синтаксис вызова: Объект.Свойство

Свойство всегда присутствует в левой или правой части выражений, связанных с присвоением значения. Отсутствует двоеточие перед знаком равенства.

Пример 1: переименование Лист1 на Счета:

Событие – взаимодействие пользователя с определенным объектом на рабочем листе. Каждый класс объектов имеет собственную группу событий, на которые объекты данного класса реагируют.

Аргументы используются для передачи методам значений, необходимых им при решении тех задач, для реализации которых они запрограммированы. Задача выполняется корректно только в том случае, если каждый элемент имеет тип, который указан для данного метода. В качестве аргументов могут передаваться числа, текст и логические значения (истина и ложь).

Предоставляется два способа передачи аргументов методу:

─ внутренний, при котором аргументы должны быть указаны в определенном порядке;

Пример: ActiveCell.BorderAround LineStyle. Weight. ColorIndex. Color

Действие метода BorderAround объекта Range задает новые атрибуты рамки вокруг указанной области. При его использовании требуется задать аргументы для определения стиля линии, ее толщины и цвета. Причем свойство ColorIndex позволяет определить цвет с помощью числа, а свойство Color ─ с помощью константы VisualBasic.

─ внешний, при котором следования аргументов произвольно.

Пример: Range(“A1:C7”).Border Around Color Index:=3, Weight:=xlThick

– обязательные аргументы (для редактирования параметров ЭТ)

– необязательные аргументы (Для редактирования объектов (изменение цвета, размера, рамки))

6.2. Структура, используемая в VBA

На высшем уровне иерархии стоит приложение, далее идут проекты, связанные с фактическими документами этого приложения. На третьем уровне находятся модули (модули приложения, модули пользователя, модули класса, модули форм и модули ссылок), а на последнем – их процедуры и функции.

Иерархия, используемая в VBA, представлена на рис. 6.1.

Рис. 6.1. Иерархия, используемая в VBA

Модуль – это часть программы, оформленная в таком виде, при котором допускается ее независимая трансляция. Модуль состоит из двух разделов: раздела объявлений (Declaration) и раздела процедур и функций. В первом разделе описываются глобальные переменные, типы, определенные пользователем, и перечисляемые типы, во втором – процедуры и функции.

Процедурой называется фрагмент кода (минимальная семантически законченная программная конструкция), заключенный между операторами Sub и End Sub.

Синтаксис определения процедуры:

[PrivatePublicFriend] Sub имя_процедуры(аргумент_1, аргумент_2,_, аргумент_n)

Private – задает область видимости для процедуры – модуль, в котором она описана. Ее могут вызывать только процедуры этого же модуля

Public – процедура становится доступной для всех модулей (устанавливается по умолчанию)

Friend – процедура видима только в том проекте, где описан класс, членом которого она является.

Также в VBA используются процедуры без параметров, которые могут выступать в роли командных макросов и процедур обработки событий.

На рис. 6.2 представлен интерфейс VBA.

Рис. 6.2. Интерфейс VBA

6.3. Типы данных, используемые в VBA

Переменная – это поименованная область памяти, используемая для хранения данных в течение работы процедуры.

Для использования переменной ее необходимо описать (объявить).

Синтаксис оператора описания переменной:

Dim переменная [As тип]

Dim – ключевое слово, свидетельствующая о том, что объявляется переменная (dimension – размер);

Переменная – имя объявляемой переменной;

As – ключевое слово, используемое при задании типа данных (as – как);

Тип – тип данных для объявляемой переменной

Одним оператором Dim можно описать несколько переменных, перечислив их через запятую.

Dim i As Byte, j As Integer, k As Integer

В таблице 6.1. представлены основные типы данных, используемые для задания переменных.

Таблица 6.1. Типы данных

логические переменные, принимающие одно из двух значений: Истина или Ложь

Byte (короткий целый беззнаковый)

целое число из диапазона от 0 до 255

целые числа из диапазона от -32 768 до 32 767

Long (длинный целый)

целые числа из диапазона от -2 147 483 648 до 2 147 483 647

переменные для денежных вычислений с фиксированным количеством разрядов после десятичной запятой; позволяют избежать накопления погрешностей при округлении

переменные для хранения даты и времени

Single (с плавающей точкой одинарной точности)

числа с дробной частью от -3,40282310 38 до -1,40129810 -45

для отрицательных чисел и от 1,40129810 -45 до 3,40282310 38 для положительных чисел

Double (с плавающей точкой двойной точности)

числа с дробной частью от -1,7976931348623110 308 до -4,9406564584124710 -324

для отрицательных чисел и от 4,9406564584124710 -324 до 1,7976931348623110 308 для положительных чисел

String (строковой переменной длины)

переменные для хранения строк символов длиной от 0 до 64 Кбайт

Автоматическое подстраивание под данные

переменные для хранения ссылок на объекты

Если при описании переменных не указывается их тип, то им автоматически присваивается Variant. Это означает, что в ячейке, соответствующей этой переменной, может храниться информация любого вида (аналог формату «Общий» в ЭТ).

Пример: Dim i, j As Integer

Это эквивалентно следующей записи: Dim i As Variant, j As Integer

Для записи одинакового формата необходимо:

Dim i As Integer, j As Integer

Для использования тех или иных переменных в разных частях программы используется так называемая область видимости.

Области видимости переменной – это область программ, где имя переменной считается допустимым (видимым), а, следовательно, возможен доступ к ее значению (рис. 6.3).

Рис. 6.3. Области видимости переменной VBA

Существуют три уровня видимости переменной и пять способов ее объявления.

1Ур. – Процедура (областью видимости является процедура, в которой переменная объявлена).

*** Оператор Dim объявляет переменную в любом месте процедуры, но всегда предшествует операторам, использующим ее. Такая переменная может существовать только во время выполнения процедуры, после окончания которой значение этой переменной теряется, а память освобождается.

*** Static (аналогичен Dim) – но! объявляет статическую переменную. После выхода из процедуры память не освобождается и значение не теряется.

*** оператор Private объявляет переменную в разделе описаний Declaration (вне процедур модуля)

*** оператор Dim (в данном случае) полностью аналогичен оператору Private

3 Ур. – Приложение

*** оператор Public объявляет переменную в разделе описаний Declaration

Разделяются на пользовательские и встроенные.

Пользовательские константы требуют объявления. Для этого используется оператор вида:

Const константа [As тип] = значение

Const – ключевое слово, которое показывает, что объявляется константа;

As – ключевое слово, с которого начинается задание типа данных;

Константа – имя объявляемой константы;

Тип – тип данных для константы;

Значение – значение, присваиваемое константе.

Const pi As Double = 3.141592654

Const e As Double = 2.718281828

Const Message = “Завершение работы”

Можно объявлять несколько констант через запятую:

Const min = 0, max = 1000

Встроенные константы не требуют объявления. Имена встроенных констант начинаются с префикса vb, например, vbFriday.

6.4. Использование стандартных окон операционной системы Windows

В VB имеется большое количество встроенных процедур, которые отличаются от пользовательских процедур тем, что их описание были запрограммированы разработчиками VBA.

Для ввода пользователем информации в код программы и вывод данных из него, а также для создания пользовательских диалоговых окон используются функции MsgBox и InputBox.

6.4.1. Функция MsgBox

MsgBox (“сообщение”, [кнопки, заголовок]) — эта функция отображает диалоговое окно, содержащее сообщение длиной до 1024 символов, в которое с помощью операции конкатенации можно включить значение переменных, а также (необязательно) кнопки для реакции на отображения окна (по умолчанию только кнопка ОК).

При задании сложного диалогового окна, при помощи функции MsgBox используются следующие константы:

1) Для задания внешнего вида окна сообщения (рис. 6.4):

vbCritical, vbQuestion, vbExclamation, vbInformation.

Рис. 6.4. Внешний вид окон

2) Для задания кнопок в окне сообщения:

vbOkCancel, vbAbortRetryIgnore, vbYesNOCancel, vbYesNO, vbRetryCancel.

3) Для задания дальнейших действий после нажатия на соответствующую кнопку:

vbOk, vbCancel, vbAbort, vbRetry, vbIgnore, vbYes, vbNO.

Пример процедуры 1:

Private Sub Пример_1()

y = MsgBox(«Закрыть окно», vbQuestion + vbYesNoCancel, «Сообщение Windows»)

Код процедуры 1 в VBA и результат выполнения программы представлен на рис. 6.5.

Рис. 6.5. Пример процедуры 1

Пример процедуры 2:

y = MsgBox(«Закрыть окно», vbQuestion + vbYesNoCancel, «Сообщение Windows»)

If y = vbYes Then MsgBox («VVVVVVVVVVVVVVVVVVVV») Else

If y = vbNo Then ActiveCell = «Привет»

Код процедуры 2 в VBA и результат выполнения программы представлен на рис. 6.6.

Рис. 6.6. Пример процедуры 2

6.4.2. Функция InputBox

InputBox (“сообщение”[, заголовок] [, значение по умолчанию] [, координата x] [, координата y]) — функция, применяемая для ввода значений переменных в программу. Эта функция отображает диалоговое окно, содержащее окно ввода, кнопки ОК и Отмена, сообщение (подсказку для ввода) и (необязательно) заголовок окна, значение, вводимое по умолчанию, координаты окна по горизонтали и вертикали.

Так ввод числа можно задать командой:

a = InputBox («первое число»)

Рис. 6.7. Вид функции InputBox

6.4.3. Совместное использование функций MsgBox и InputBox

На практике для создания процедур функции MsgBox и InputBox используются совместно. Кроме того, в дополнение к ним может использоваться условный оператор If, который позволяет проверять введенные пользователем условия и на основе его выводов выдавать результат.

Условный оператор If — это оператор позволяющий задавать выполнение тех или иных действий в зависимости от заданных условий. Основными составляющими для этого служат:

Так выражение — если a>1 то b= a+1 иначе b=a-1 будет иметь вид

If a>1 then b= a+1 else b=a-1.

Пример процедуры 3:

Компьютер должен перемножить два числа, результат вывести в одну из ячеек таблицы. Если их произведение больше 2000, то компьютер должен выдать дополнительное сообщение «Полученное значение больше 2000».

Dim a, b, y As Long

a = InputBox(«первое число»)

b = InputBox(«второе число»)

Пример вычисления суммы значений, содержащихся в нечетных ячейках первого столбца первого листа (в пределах первых 10 ячеек):

Dim I As Integer

For I = 1 To 10 Step 2

S = S + Application.Worksheets(1).Cells(I, 1).Value

Рис. 6.12. Пример цикла 1

В циклах по структуре данных тело цикла поочередно повторяется для всех однородных объектов, составляющих массив или семейство. В этом случае в роли счетчика выступает объектная переменная.

For Each элемент In структура_данных

Пример последовательного вывода на экран окон сообщений с именами всех рабочих листов текущей книги:

D im S As Worksheet

For Each S In Application.Worksheets

Рис. 6.13. Пример цикла 2

6.6. Использование элементов управления для запуска макроса и ввода данных

Для использования элементов управления на рабочем листе необходимо для каждого из элементов написать код в VBA. Для этого предварительно необходимо перейти в режим конструктора. Также в этом режиме изменяются свойства объекта в окне Properties.

Для записи программного кода элемента управления необходимо дважды щелкнуть мышью на этом элементе (рис. 6.14 а) и он автоматически перейдет в режим VBA и сформирует «операторные скобки» с учетом события пользовательской формы (рис. 6.14 б).

Рис. 6.14. Формирование операторных скобок элемента управления

События пользовательской формы

Событие — это сигнал, подаваемый, если с объектом что-то происходит. Например, кнопка может генерировать событие в ответ на щелчок мышкой по ней, строка ввода – в ответ на ввод чего-то, на щелчок мыши по ней, и т.д.

Рис. 6.15 События пользовательской формы

Некоторые виды событий:

События мыши — одинарное (двойное) щелканье левой кнопкой мыши на объекте; нажатие (отпускание) кнопки мыши; передвижение курсора мыши по элементу управления.

События клавиатуры — нажатие простого символа, функциональных клавиш или какого-то сочетания символов на клавиатуре.

События формы — загрузка (Load), выгрузка (Unload) формы и пр.

Событие Click происходит, когда пользователь нажимает и отпускает кнопку мыши, в то время, когда ее указатель находится на объекте. Событие может произойти при изменении значения элемента управления.

Формат процедуры-обработчика события

Private Sub Form_Click()

Private Sub object_Click([index As Integer])

где object – имя объекта, к которому относится этот обработчик.

Private Sub Form_Click()

Рис. 6.17. Пример создания кнопки

Написание кода программы для ЭУ

Программирование элемента управления происходит по тем же принципам, что программирование макроса.

Пример 1: Написание Привет после нажатия кнопки:

Private Sub Кнопка_Click()

Рис. 6.18. Пример 1 создания элемента управления

Пример 2: Проверка условий: пересчет таблицы

Рис. 6.19. Исходная таблица

Создаем кнопку (рис. 6.20)

Рис. 6.20. Создание кнопки для реализации примера 2

Двойной щелчок переводит в окно создания процедуры (рис. 6.21):

Рис. 6.21. Окно создания процедуры

Private Sub sum_Click()

Dim I As Integer

For I = 2 To 8 Step 1

N = Cells(I, 2) * Cells(I, 3)

S = S + Cells(I, 4).Value

Где Cells(I, 4) – номер ячейки, где I – строка, 4 – столбец (D).

Код рассматриваемого примера в VBA и результат выполнения программы с разными условиями представлен на рис. 6.22.

Рис. 6.22. Реализация рассматриваемого примера

6.7. Пользовательские формы, создаваемые в VBA

Пользовательские формы необходимы для создания более эффективного интерфейса взаимодействия с пользователем.

Например, вместо ввода личной информации непосредственно на рабочем листе можно создать пользовательскую форму, запрашивающую ввод данных, или форма для программы расчета данных.

Формы являются объектами, которые могут вызываться другими модулями приложения.

К формам можно добавлять пользовательские методы и свойства. Для создания в форме нового метода надо добавить процедуру, объявленную со словом Public:

Public Sub UserMethod()

1) однодокументный (SDI) – можно открыть только один документ, при этом нужно закрыть активный документ, чтобы открыть другой;

2) многодокументный (MDI) – поддерживает несколько форм внутри основной формы-контейнера; имеет в меню Window элементы для переключения между окнами или документами;

3) стиль explorer – окно, имеющее две панели, или области, обычно, состоящие из иерархического представления уровней информации слева и области отображения справа.

Этапы создания формы:

1. На форму помещаются нужные элементы управления и красиво размещаются.

Результат: имеем форму с элементами управления, но надписи на них стандартные: Command1, Label1, и т.д.

2. Задаются свойства формы и элементов управления

Результат: форма имеет нужный вид, на всех ЭУ понятные надписи, нужные картинки и т.д. Запуск ее невозможен в связи отсутствия кода программы.

3. Пишутся обработчики событий элементов управления.

Результат: выполнение действий в соответствии с заданием.

Д ля вставки пользовательской формы необходимоInsert (Вставка) – UserForm (Пользовательская форма).

При отсутствии окна свойства его можно открыть, выполнив: View (Вид) Properties Window (Окно свойств).

Рис. 6.23. Интерфейс создания формы

Пример 1: Создать форму для расчета функции , содержащую:

место для вывода (из программы) результата расчета;

текстовое поле для ввода исходных данных;

кнопку для запуска программы и отмены.

После задания вида формы (рис. 6.24) следует задание кода программы.

Рис. 6.24. Создание формы для примера 1

Двойной щелчок по кнопке «Вычислить» переведет форму в редактирование кода.

P rivate Sub Calc_Click()

Dim a As Single

Dim b As Single

Dim c As Single

1: a = TextBox_a.Value

2: b = TextBox_b.Value

3: c = Sqr(a ^ 2 + b ^ 2)

4: Label1.Caption = «c = » & Str(c)

Private Sub Cancel_Click()

Рис. 6.25. Иллюстрация работы формы примера 1

Пользовательская форма может быть выведена из любого модуля. Для ее вывода используется метод Show. Name.Show

Private Sub VSch_Click()

Рис. 6.26. Использование метода Show

Пример 2. Создание формы для ввода пользователем переменных и управляющих выключателей с суммированием и вычитанием с отображение результата.

Рис. 6.27. Создание формы и ее код в VBA для примера 2

Private Sub CommandButton1_Click()

Dim first As Long, second As Long

‘Если выбрана первая кнопка, складываем переменные

If ob1.Value = True Then

lab4.Caption = first + second

‘Если выбрана вторая кнопка, вычитаем переменные

If ob2.Value = True Then

lab4.Caption = first — second

Рис. 6.28. Иллюстрация работы формы примера 2

Пример 3. Создание формы для ввода пользователем данных и вывода их в строки таблицы

Рис. 6.29. Создание формы для примера 3

Private Sub CB_Cancel_Click()

Private Sub CB_ok_Click()

Dim LastRow As Long

LastRow = Worksheets(«Лист3»).Range(«A65536»).End(xlUp).Row + 1

Cells(LastRow, 1).Value = tb1.Value

Cells(LastRow, 2).Value = tb2.Value

Cells(LastRow, 3).Value = tb3.Value

Рис. 6.30. Иллюстрация работы формы примера 3

Вопросы для самоконтроля

Что такое объекты, методы и свойства в VBA ?

Опишите иерархию в вVBA?

Что такое процедура?

Что такое элемент управления?

Опишите синтаксис переменной?

Какие типы констант используются в VBA?

Для чего используются функция MsgBox и InputBox?

Какие управляющие конструкции используются в VBA?

Что такое событие пользовательской формы?

Что такое пользовательская форма?

Какие стили интерфейса используются при создании пользовательской формы?

VBA (Visual Basic for Applications) — это объектно-ориентированный язык макропрограммирования высокого уровня, встроенный во все программы пакета Microsoft Office.

Макрос (или макрокоманда) — последовательность команд и функций, записанных в модуле VBA, позволяющая автоматизировать выполнение основных операций.

Элемент управления — размещаемые на рабочих листах и в диалоговых окнах объекты, предназначенные для отображения, ввода и вычисления данных.

Режим конструктора переводит Excel в режим отключения всех элементов управления на рабочем листе.

Объектом считается любой элемент приложения ─ ячейка, лист, рабочая книга, диаграмма. Объекты могут включать области ячеек, рамки ячеек, окна, сценарии, стили и т.д. Каждый класс объектов имеет свое множество свойств, функций и событий

Метод ─ это действие, которое может быть выполнено над объектом.

Свойство является атрибутом объекта, описывающим, как объект выглядит (его цвет, размер и местоположение) и как он действует (является ли видимым, ссылается ли на другой объект).

Событие – взаимодействие пользователя с определенным объектом на рабочем листе.

Модуль – это часть программы, оформленная в таком виде, при котором допускается ее независимая трансляция.

Процедурой называется фрагмент кода (минимальная семантически законченная программная конструкция), заключенный между операторами Sub и End Sub.

Переменная – это поименованная область памяти, используемая для хранения данных в течение работы процедуры

Область видимости переменной – это область программ, где имя переменной считается допустимым (видимым), а, следовательно, возможен доступ к ее значению.

MsgBox — эта функция отображает диалоговое окно, содержащее сообщение длиной до 1024 символов, в которое с помощью операции конкатенации можно включить значение переменных, а также (необязательно) кнопки для реакции на отображения окна (по умолчанию только кнопка ОК).

InputBox — функция, применяемая для ввода значений переменных в программу.

Оператор If — это оператор позволяющий задавать выполнение тех или иных действий в зависимости от заданных условий.

Управляющие конструкции языка программирования – это инструкции и группы инструкций, применение которых позволяет изменять по мере необходимости последовательность выполнения других инструкций программы

Ветвлением называется управляющая конструкция, позволяющая пропускать при выполнении те или иные группы инструкций в зависимости от значения условия.

Цикл – это управляющая конструкция, представляющая возможность многократно выполнять группы инструкций до наступления какого-либо события.

Событие элемента управления — это сигнал, подаваемый, если с объектом что-то происходит.

Иллюстрированный самоучитель по Visual Basic .NET

Создание объектов в VB.NET

В VB.NET, как и в прежних версиях VB, объекты создаются ключевым словом New (исключение составляют строки и массивы – для создания этих объектов предусмотрена сокращенная запись).

Рассмотрим практический пример – в .NET Framework входит полезный класс Random для работы со случайными числами. По своим возможностям этот класс превосходит функцию Rnd, сохраненную в языке для обеспечения обратной совместимости. Например, класс Random позволяет заполнить байтовый массив случайными числами от 0 до 255 или сгенерировать положительное случайное число в заданном интервале. Однако Random – не функция, а класс, методы которого вызываются с указанием конкретного экземпляра. А для этого необходимо предварительно создать экземпляр (проще говоря, объект) класса Random.

Сделать это можно несколькими способами, и в любом варианте используется ключевое слово New. Самый наглядный, хотя и не самый компактный способ заключается в отделении объявления класса от вызова New:

Многие программисты предпочитают использовать сокращенную запись:

Эта команда эквивалентна приведенному выше фрагменту; в ней используется такая возможность VB.NET, как инициализация переменных при объявлении.

На языке ООП метод New называется конструктором, поскольку он предназначен для создания (конструирования) экземпляров класса.

Примечание
Программисты, работавшие с предыдущими версиям VB, должны обратить внимание на следующее: в VB.NET не поддерживается ключевое слово Set (некоторые побочные эффекты его исчезновения описаны в разделе «Свойства» настоящей главы). Два варианта синтаксиса New различаются только реакцией на исключения, возникающие при создании объектов (см. главу 7)
.

В прежних версиях VB между полной и сокращенной формой вызова конструктора существовали тонкие различия, связанные с тем, что при сокращенной записи создание объекта откладывалось до момента первого использования. В VB.NET эта особенность была исключена.

Некоторые программисты (особенно работающие на С# и Java) предпочитают третий вариант синтаксиса, который выглядит как комбинация первых двух:

Он ничем не отличается от второго варианта синтаксиса.

Метод New позволяет конструировать объекты в любом выражении VB.NET, если результат соответствует контексту. Следующая команда VB.NET вполне допустима (хотя понять ее непросто, поэтому использовать подобный стиль программирования не рекомендуется):

Впрочем, подобные конструкции могут встретиться в чужих программах, которые вам придется сопровождать. Особенно часто они используются программистами с опытом работы на C++/Java.

Илон Маск рекомендует:  Шаблон сайта для бизнеса HTML + CSS
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL