Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Классы с событиями






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

Есть механизм, позволяющий объектам вести себя по-разному в одних и тех же обстоятельствах. Это механизм событий. Содержательно, событием является некоторое специальное состояние, в котором может оказаться объект класса.

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

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

event делегат_события имя_события;

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

О событиях в мире программных объектов чаще всего говорят в связи с интерфейсными объектами, у которых события возникают по причине действий пользователя. Так, командная кнопка может быть нажата пользователем - в результате у кнопки возникнет событие Click, документ может быть закрыт - событие Close, в список может быть добавлен новый элемент - событие Changed. Набор событий у всех объектов одного класса один и тот же, но вот методы, обрабатывающие возникшие события, могут быть разные. Если наследование позволяет задать характерное поведение для некоторого класса объектов, то события позволяют задать индивидуальное поведение объекта в специфических ситуациях, когда возникает некоторое событие. Две командные кнопки, посаженные на форму, ведут себя по-разному при возникновении события Click, поскольку обработчики события для этих объектов задаются разными методами.

Класс, решивший иметь события, должен уметь выполнить, по крайней мере, три вещи:

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

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

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

Рассмотрим такое событие с программистской точки зрения. Обработчик события - это метод, обычная процедура с аргументами. Какова сигнатура этого метода? Она задается событием. Как обычно в таких случаях, задается контракт между классом sender и классами reciever. Класс sender говорит своим клиентам: " У меня есть событие, оно задает сигнатуру обработчика события". Если классы receiver согласны заключить контракт с классом sender, то они должны иметь в своем составе обработчики события с заданной сигнатурой.

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






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.