logo
Лекции_ПиОА[1]

4.5. События и событийная модель

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

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

Так как нельзя заранее предугадать последовательность событий, код такого приложения должен иметь определенные предположения о состоянии среды во время своего выполнения, например, что в поле ввода должно быть некоторое значение до выполнения процедуры обработки этого значения. Поэтому приложение строится так, чтобы при любом возможном порядке следования событий обеспечивалось выполнение предположений. Например, может, блокироваться кнопка управления, которая запускает процедуру обработки, пока в поле ввода не появится нужное значение. Код приложения может сам инициировать события во время выполнения. Можно, например, программно изменить текст в текстовом поле (text box), путем инициирования события Change (Изменить) для этого поля. Если предполагалось, что это событие могло быть инициировано только взаимодействием с пользователем, можно получить неожиданный результат. Таких проблем не возникает при использовании традиционной процедурной модели. Именно по этой причине важно понимать событийную модель и помнить о ней при проектировании приложений.

Объекты, как уже отмечалось, обладают свойствами, методами и возможностью обмениваться сообщениями в результате возбуждения событий. Свойства – некоторые атрибуты объекта, методы - действия над объектом, события – реакции объекта в форме сообщений.

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

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

Шар.Цвет = Красный

Шар.Диаметр = 10

Шар.Надут = True

Установка свойств шарика:

О

Шар.Надуть

Шар.Спустить

Шар.Подъем 5

братим внимание на синтаксис кода. Объект Шар, за которым следует свойство, например Цвет, а далее знак присваивания значения (равенство), например Красный. Если применить оператор присваивания с другим значением (цветом), то можно изменить цвет шарика в самом коде. При разработке приложения свойствам можно присваивать значения в окне Properties.

Методы шарика вызываются следующим образом:

Синтаксис такой же, как для свойств. Объект (существительное), за которым следует точка и метод (глагол). В третьем примере (Шар.Подъем 5) присутствует дополнительный элемент, называемый параметром, который означает высоту подъема шарика. Некоторые методы для более детального описания выполняемого действия могут иметь и более одного параметра.

К

Sub Шар_Прокол ()

Шар.Спустить

Шар.Звук "Бах!"

Шар.Надуть = False

Шар.Диаметр = 0

End Sub

аждому методу и событию соответствует определенная программа (процедура), реализующая соответствующие операции над объектом. Например, реакцию шарика на событие прокол (рис. справа). В данном случае код описывает поведение шарика при прокалывании. Вызывается метод Спустить, затем вызывается метод Звук с аргументом Бах! (звук "Б-а-а-х"). Так как шарик теперь не надут, то свойство Надуть принимает значение False (Ложь) и свойство Диаметр получает нулевое значение.