Событие (объектно-ориентированное программирование)

Событие (объектно-ориентированное программирование)

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

События предназначены для того, чтобы иметь возможность предусмотреть реакцию программного обеспечения.[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

См. также

Ссылки

Примечания

  1. В этом смысле события похожи на прерывания.
  2. 1 2 См. [1].

Литература

  1. Шлеер С, Меллор С. Объектно-ориентированный анализ: моделирование мира в состояниях: Пер. с англ. — Киев : Диалектика, 1993. — 240 с: ил.



Wikimedia Foundation. 2010.

Игры ⚽ Поможем сделать НИР

Полезное


Смотреть что такое "Событие (объектно-ориентированное программирование)" в других словарях:

  • Событийно-ориентированное программирование — Парадигмы программирования Агентно ориентированная Компонентно ориентированная Конкатенативная Декларативная (контрастирует с Императивной) Ограничениями Функциональная Потоком данных Таблично ориентированная (электронные таблицы) Реактивная …   Википедия

  • Метод (программирование) — У этого термина существуют и другие значения, см. Метод. Метод в объектно ориентированном программировании  это функция или процедура, принадлежащая какому то классу или объекту. Как и процедура в процедурном программировании, метод состоит… …   Википедия

  • Свойство (программирование) — У этого термина существуют и другие значения, см. Свойство (значения). В этой статье не хватает ссылок на источники информации. Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена. Вы м …   Википедия

  • Прерывание — (англ. interrupt)  сигнал, сообщающий процессору о наступлении какого либо события. При этом выполнение текущей последовательности команд приостанавливается и управление передаётся обработчику прерывания, который реагирует на событие и… …   Википедия

  • Switch-технология — технология разработки систем логического управления на базе конечных автоматов, охватывающая процесс спецификации, проектирования, реализации, отладки, верификации, документирования и сопровождения. Предложена А. А. Шалыто в 1991 году [1].… …   Википедия

  • C++ — У этого термина существуют и другие значения, см. C. См. также: Си (язык программирования) C++ Семантика: мультипарадигмальный: объектно ориентированное, обобщённое, процедурное, метапрограммирование Тип исполнения: компилируемый Появился в …   Википедия

  • Диаграмма классов — Для улучшения этой статьи желательно?: Викифицировать статью. В UML диаграмма классов является типом диаграммы статичес …   Википедия

  • Сравнение C Sharp и Java — Правильный заголовок этой статьи  Сравнение C# и Java. Он показан некорректно из за технических ограничений. Сравнения языков программирования Общее сравнение Основной синтаксис Основные инструкции Массивы Ассоциативные массивы Операции со… …   Википедия

  • Актор (UML) — У этого термина существуют и другие значения, см. Актор. Актор[источник не указан 160 дней] (англ. actor, в некоторых источниках  эктор или актёр)  множество логически связанных ролей в UML, исполняемых при… …   Википедия

  • Диаграмма прецедентов — Диаграмма вариантов использования для упрощенной модели работы ресторана. Диаграмма прецедентов (англ.  …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»