- Событие (объектно-ориентированное программирование)
-
Событие в объектно-ориентированное программировании — это сообщение, которое возникает в различных точках исполняемого кода при выполнении определённых условий.
События предназначены для того, чтобы иметь возможность предусмотреть реакцию программного обеспечения.[1]
Для решения поставленной задачи создаются обработчики событий: как только программа попадает в заданное состояние, происходит событие, посылается сообщение, а обработчик перехватывает это сообщение. В общем случае в обработчик не передаётся ничего, либо передаётся ссылка на объект, инициировавший (породивший) обрабатываемое событие. В особых случаях в обработчик передаются значения некоторых переменных или ссылки на какие-то другие объекты, чтобы обработка данного события могла учесть контекст возникновения события.
Самое простое событие — это событие, сообщающее о начале или о завершении некоторой процедуры. Событие, по сути, сообщает об изменении состояния некоторого объекта. Наиболее наглядно события представлены в пользовательском интерфейсе, когда каждое действие пользователя порождает цепочку событий, которые, затем обрабатываются в приложении.
Содержание
Общее описание
В объектно-ориентированном анализе для описания динамического поведения объектов принято использовать модель состояний.[2]
Событие — это переход объекта из одного состояния в другое. Взаимодействие объектов также осуществляется при помощи событий: изменение состояния одного объекта приводит к изменению состояния другого объекта, а событие оказывается средством связи между объектами.
Согласно [2], событие — это «абстракция инцидента или сигнала в реальном мире, который сообщает нам о перемещении чего- либо в новое состояние». Далее, выделяются четыре аспекта события:
- метка — уникальный идентификатор события.
- значение — текстовое сообщение о сути произошедшего.
- предназначение — модель событий, которая принимает событие.
- данные — данные, которые переносится от одного объекта к другому.
Примеры
Первый ряд примеров событий доставляет собственно сам жизненный цикл объекта:
- создание объекта;
- уничтожение объекта.
Более сложные примеры событий возникают тогда, когда у объекта появляются внутренние состояния, которые описываются соответствующей диаграммой переходов (из одного состояния в другое).
Пример на VB.NET
События позволяют классу или объекту уведомлять другие классы или объекты о возникновении каких-либо ситуаций. Класс, отправляющий (или вызывающий) событие, называется издателем, а классы, принимающие (или обрабатывающие) событие, называются подписчиками. В VB.NET события объявляются ключевым словом Event. Если опущен тип делегата, то компилятор сам создаст его, который может в дальнейшем содержать ссылку на метод реализованный в подписчике.
Реализовать подписку на событие можно несколькими способами:
- evtSample As sampleDel — механизм регистрации обработчика события для данного типа декларации должен быть предоставлен классом с объявленым событием. Событие генерируется путем вызова метода в делегате evtSample.
- Public Event evtSample As sampleDel — обработчик событий может быть зарегистрирован с помощью оператора AddHandler, который свяжет событие источника и метод в классе подписчика. Событие реализуется с помощью объявленного делегата sampleDel. Событие генерируется используя оператор RaiseEvent.
- Public Event evtSample — обработчик события будет зарегистрирован с помощью ключевых слов WithEvents в объявлении экземпляра класса и Handles в самой декларации метода класса подписчика. Событие реализуется с помощью неявно объявленного делегата. Событие генерируется используя оператор RaiseEvent.
Imports System Public Class CTimer Delegate Sub SecondDel(ByVal xintTime As Integer) Private evtSecond As SecondDel Public Event evtMinute As SecondDel Public Event evtHour(ByVal xHour As Integer) public Shared lngSeconds As Long Public Sub Register(ByVal objSecond As SecondDel) evtSecond = evtSecond.Combine(evtSecond, objSecond) End Sub Public Sub OnTimer() lngSeconds = lngSeconds + 1 If lngSeconds Mod 5 = 0 Then evtSecond(lngSeconds) 'Вызов метода делегата End If If lngSeconds Mod 10 = 0 Then RaiseEvent evtMinute(lngSeconds) 'Генерация события End If If lngSeconds Mod 30 = 0 Then RaiseEvent evtHour(lngSeconds) 'Генерация события End If End Sub End Class Public Class CClock Private WithEvents mobjTimer As CTimer 'Объявление объекта класса, с возможностью подключения к событиям Sub New() mobjTimer = New CTimer() mobjTimer.Register(New CTimer.SecondDel(AddressOf SecondEvent)) 'Регистрация события через метод предоставленный классом AddHandler mobjTimer.evtMinute, AddressOf MinuteEvent 'Регистрация события с помощью оператора AddHandler While (mobjTimer.lngSeconds < 60) mobjTimer.OnTimer() System.Threading.Thread.Sleep(100) End While End Sub Private Sub SecondEvent(ByVal xintTime As Integer) Console.WriteLine("Second's Event") End Sub Private Sub MinuteEvent(ByVal xintTime As Integer) Console.WriteLine("Minute's Event") End Sub 'Регистрация события с помощью ключевого слова Handles Private Sub mobjTimer_evtHour(ByVal xintTime As Integer) Handles mobjTimer.evtHour Console.WriteLine("Hour's Event") End Sub Public Shared Sub Main() Dim cc1 = New CClock() End Sub End Class
См. также
Ссылки
- Визуальное объектно-ориентированное программирование
- Введение в объектно-ориентированное программирование
- Основы объектно-ориентированного визуального программирования
- Article Event Handling in VB.NET
- Events and Event Handlers in VB.NET
- event keyword in C#
- Events and Delegates .NET Framework
Примечания
- ↑ В этом смысле события похожи на прерывания.
- ↑ 1 2 См. [1].
Литература
- Шлеер С, Меллор С. Объектно-ориентированный анализ: моделирование мира в состояниях: Пер. с англ. — Киев : Диалектика, 1993. — 240 с: ил.
Для улучшения этой статьи желательно?: - Дополнить статью (статья слишком короткая либо содержит лишь словарное определение).
- Добавить иллюстрации.
Категория:- Объектно-ориентированное программирование
Wikimedia Foundation. 2010.