Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Н.Р. Бухараев (3 семестр)(ООП в интегрированной...doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.41 Mб
Скачать

Событийное программирование Обработка событий

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

Идея событийного программирования отнюдь не нова:

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

Событием является сам вызов функции.

Стоит упомянуть о теореме об универсальной функции:

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

Нужно отметить, что на каждый предикат подвешено действие, которое должно выполниться. Это называется охраняемой командой.

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

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

Триггеры

Удаления Вставки

Идея: Когда что-то вставляется, срабатывает некоторый предикат. Например, после вызывается команда проверки, каскадного удаления или какая-нибудь другая команда. Генераторы и приёмники сообщений

Событие – это вызов метода. Обработка события заключается в кратном вызове процедур.

Сообщение – это передаваемые параметры.

Слушатель - приёмник – это вызываемый объект.

Говорящий - отправитель – это тот, кто вызывает.

Событийное программирование нужно:

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

- с другой стороны, для реализации – PTP (point to point)

Пример PTP:

1 слушатель – 1 говорящий

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

Замечание:

Нас интересует более общая схема. Отсюда возникают трудности.

broadcasting - вещание, радиовещание, телерадиовещание, трансляция, телевещание, эфир, широковещание

отправитель получатель 1

получатель n


Подразумевается схема «Подписка» – слушатели добровольно могут либо включаться в подписку, либо по желанию исключаться из неё.

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

Тип функции (метода, процедуры):

Пример:

An - функция двух аргументов

Её тип: Z * R->R, где Z– целый аргумент

R – вещественный аргумент

R – вещественный результат

Это и есть общематематическое понятие типа функции.

В каком смысле типы однотипны?

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

Отсылка сообщений – это кратный (многократный) вызов

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

Реализация такова:

Существует список (обработка событий), который применяется к какому- то аргументу.

Message (трактуется как аргумент) - произвольный список параметров, который у всех одинаков.

<f1, f2, …>(message) -> f1(m), f2(m),…

Список применить к аргументам (отправка сообщения)- это

поочерёдное применение всех функций к аргументу (т.е. f1(n) … f2(n) , где n= сonst)

Таким образом, при вызове многих методов фактические параметры применяются к одному списку. Передача сообщения состоит в том, что эти методы поочерёдно применяются к этому списку параметров.

Вызов процедуры:

о тправитель 1 получатель1

Вызов многих методов:

о тправитель 1 получатель 1

получатель 2

получатель n

Замечание:

Применяются они к одному и тому же списку параметров => параметры должны быть однотипными.

Замечание:

Фактически, это просто вызов, который где-то стоит и где-то «стреляет» (вызывается несколько методов с одним и тем же списком параметров).

Вводится новое понятие:

Функциональный тип- указатель на функцию (метод, процедуру), которая привязана к объекту.