DRAKON.SU

Текущее время: Четверг, 28 Март, 2024 22:05

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
СообщениеДобавлено: Воскресенье, 04 Март, 2018 20:43 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5846
Откуда: Москва
Событийно-ориентированное программирование и язык ДРАКОН

Из Википедии

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

Событи́йно-ориенти́рованное программи́рование (англ. event-driven programming; в дальнейшем СОП) — парадигма программирования, в которой выполнение программы определяется событиями — действиями пользователя (клавиатура, мышь), сообщениями других программ и потоков, событиями операционной системы (например, поступлением сетевого пакета).

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

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

Содержание

1 Сфера применения
2 Применение в серверных приложениях
2.1 Мультиплексирование
2.2 Примеры реализаций
3 Применение в настольных приложениях
3.1 Языки программирования
4 Инструменты и библиотеки
5 См. также
5.1 Англоязычные источники
5.2 Материалы на русском
6 Ссылки

Сфера применения

Событийно-ориентированное программирование, как правило, применяется в трёх случаях:

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

В серверах, построенных по модели «один поток на соединение», проблемы с масштабируемостью возникают по следующим причинам:

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

Философской предпосылкой для отказа от потоковой модели серверов может служить высказывание Алана Кокса: «Компьютер — это конечный автомат. Потоковое программирование нужно тем, кто не умеет программировать конечные автоматы»[1].

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

Мультиплексирование

Для мультиплексирования соединений могут быть использованы следующие средства операционной системы:

select (большинство UNIX систем). Плохо масштабируется, из-за того, что список дескрипторов представлен в виде битовой карты;
poll и epoll (Linux);
kqueue (FreeBSD);
/dev/poll (Solaris);
IO completion port (Windows);
POSIX AIO на текущий момент только для операций дискового ввода-вывода;
io submit и eventfd для операций дискового ввода-вывода.
Примеры реализаций
Веб-серверы:
Node.js
nginx
lighttpd
Tornado
Прокси-серверы:
Squid
Применение в настольных приложениях
В современных языках программирования события и обработчики событий являются центральным звеном реализации графического интерфейса пользователя. Рассмотрим, к примеру, взаимодействие программы с событиями от мыши. Нажатие правой клавиши мыши вызывает системное прерывание, запускающее определённую процедуру внутри операционной системы. В этой процедуре происходит поиск окна, находящегося под курсором мыши. Если окно найдено, то данное событие посылается в очередь обработки сообщений этого окна. Далее, в зависимости от типа окна, могут генерироваться дополнительные события. Например, если окно является кнопкой (в Windows все графические элементы являются окнами), то дополнительно генерируется событие нажатия на кнопку. Отличие последнего события в том, что оно более абстрактно, а именно, не содержит координат курсора, а говорит просто о том, что было произведено нажатие на данную кнопку.

Обработчик события может выглядеть следующим образом (на примере C#):

private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Была нажата кнопка");
}
Здесь обработчик события представляет собой процедуру, в которую передается параметр sender, как правило содержащий указатель на источник события. Это позволяет использовать одну и ту же процедуру для обработки событий от нескольких кнопок, различая их по этому параметру.

Языки программирования
В языке C# события реализованы как элемент языка и являются членами классов. Механизм событий здесь реализует шаблон проектирования Publisher/Subscriber. Пример объявления события:

public class MyClass
{
public event EventHandler MyEvent;
}
Здесь EventHandler — делегат, определяющий тип процедуры обработчика событий. Подписка на событие производится следующим образом:

myClass.MyEvent += new EventHandler(Handler);
Здесь myClass — экземпляр класса MyClass, Handler — процедура-обработчик. Событие может иметь неограниченное количество обработчиков. При добавлении обработчика события он добавляется в специальный стек, а при возникновении события вызываются все обработчики по их порядку в стеке. Отписка от события, то есть удаление обработчика производится аналогично, но с использованием оператора «-=».

Разные языки программирования поддерживают СОП в разной степени. Наиболее полной поддержкой событий обладают следующие языки (неполный список):

Perl (события и демоны DAEMON, и их приоритеты PRIO),[2]
Delphi (язык программирования),
ActionScript 3.0,
C# (события event)[3],
JavaScript (действия пользователя).
Остальные языки, в большей их части, поддерживают события как обработку исключительных ситуаций.

См. также

Автоматное программирование
Callback (программирование)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 04 Март, 2018 20:48 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5846
Откуда: Москва
Геннадий Тышов попытался создать средства для обработки событий в программе ИС Дракон.

Это хорошая инициатива, но отсутствуют примеры использования (во всяком случае мне такие примеры не известны).

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 04 Март, 2018 20:58 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5846
Откуда: Москва
Степан Митькин высказал свои соображения по использованию иконы Событие здесь
viewtopic.php?f=176&t=6221


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 05 Март, 2018 05:46 

Зарегистрирован: Среда, 07 Январь, 2015 14:53
Сообщения: 1356
Владимир Паронджанов писал(а):
Если кто-нибудь обладает знаниями по этому вопросу, желательно сообщить в этой теме.
http://forum.easyelectronics.ru/viewtopic.php?p=457352#p457352


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 05 Март, 2018 20:07 

Зарегистрирован: Понедельник, 25 Июнь, 2012 17:26
Сообщения: 396
Подобные темы возникали неоднократно, к примеру:
http://forum.drakon.su/viewtopic.php?f=172&t=5370

Следует отметить, что семантически близкие темы возникают под разным соусом, но отдельно, как те же автоматы (плюс организация параллельных процессов обычно рассматривается отдельно от прочих потребностей):
http://forum.drakon.su/viewtopic.php?t=4284


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 06 Март, 2018 07:35 

Зарегистрирован: Вторник, 22 Сентябрь, 2015 20:43
Сообщения: 76
Технологию на базе графического языка Дракон следует сопоставлять с автоматным программированием, а не событийно-ориентированным.

Я имел счастье программировать в событийно-ориентированной технологии.
Логику программы приходится выворачивать наизнанку.

Краткая оценка событийно-ориентированной парадигмы в обзоре моей статьи
Технология автоматного программирования на примере программы управления лифтом
(раздел 6, стр. 14, последний абзац обзора)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 06 Март, 2018 08:43 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5846
Откуда: Москва
По ссылке Владимира Ивановича Шелехова

Цитата:
6. ОБЗОР РАБОТ

Современный пассажирский лифт [16] является сложным техническим сооружением.

Программа управления работой лифта нетривиальна. Ее нередко используют для демонстрации технологии программирования.

Примеры программ управления лифтом можно найти в работах [25, 12-15]. В книге Д. Кнута представлена нетривиальная реализация в форме сопрограмм [14]. В книге Х. Гома иллюстрируются различные виды диаграмм UML [25].

Автоматные методы программирования в сочетании с технологией объектно-ориентированного программирования представлены в работах [12, 13].

В руководстве [15] определяется серия из пяти последовательно уточняемых моделей лифта в технологии Event-B. Предложенная авторами программа управления лифтом существенно проще и короче программ в упомянутых выше работах.

Есть три составляющие, обеспечивающие простоту нашей программы Lift: гиперграфовая композиция в сочетании с механизмом гиперфункций, объектная ориентированность и реализация примитивов вне автоматной программы на языке P.

Формальный метод моделирования и анализа реактивных систем Event-B [17] определяет процесс построения серии моделей исходя из содержательного описания требований к реактивной системе.

Каждая очередная модель является детализацией (refinement) предыдущей модели. Корректность моделей и согласованность моделей различных уровней обеспечивается проведением математических доказательств истинности инвариантов.

Следует отметить неадекватность терминологии. Событие (event) в Event-B включает действия, реализующие реакцию на событие, т.е. сопоставимо с требованием в предлагаемом нами подходе.

По нашему мнению нет никаких оснований называть аксиомами ограничения на значения входных переменных модели.

Система управления лифтом рассматривается в руководстве [15] в качестве примера использования технологии Event-B.
Определяется пять уровней:
 лифт без дверей и кнопок;
 добавление дверей лифта;
 добавление дверей на этажах;
 добавление кнопок в лифте;
 добавление кнопок на этажах, по одной кнопке на этаж.

На пятом уровне используется 17 событий и 8 переменных: номер текущего этажа,
статус лифта (moving, stopped, idle),
направление движения (up, down),
статус дверей лифта (closed, opening, open, closing),
статус дверей на этажах, массив кнопок лифта,
подмножество нажатых кнопок,
массив кнопок на этажах.

В нашей программе используется 10 требований, две переменных (dir и floor) и три массива кнопок.

Определяя более сложную функциональность, наша программа существенно проще.

Переменные, определяющие статусы лифта и дверей, у нас не нужны, поскольку все действия с дверями локализованы в подпрограмме atFloor, работающей при остановленном лифте и
завершающей работу с гарантией закрытия дверей.

Подпрограмма atFloor появилась в результате гиперграфовой декомпозиции программы Lift, что обеспечивает ее простоту.

Уже модель первого уровня (без дверей и кнопок) в [15] оказалась значительно сложнее нашей реализации. Полная коллекция из пяти уровней является громоздкой.

Технология Event-B [17] декларирует возможность экстракции исполняемой программы из коллекции моделей.

Даже если это возможно, польза от такой программы сомнительна.

Отметим, что в нашем подходе автоматная программа может быть оттранслирована в эффективную программу на язык С++.

Язык интервальной темпоральной логики, разработанный Джоном Рушби для верификации систем реального времени, демонстрировался для спецификации системы управления лифтом [27].

Спецификация в виде 31 темпоральной формулы достаточно сложна; она намного сложнее представленной в данной работе.

Работа [27] по интервальной логике не имела продолжений 1, поскольку появились более предпочтительные подходы к спецификации, например, диаграммы use case.

Разрабатываемая технология предикатного программирования до недавнего времени не имела в мире близких аналогов.

Впервые появился язык, похожий на язык предикатного программирования P.

Функциональный язык доказательного программирования Smart разработан французской компанией Prove&Run 2.

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

Язык Smart содержит конструкции, аналогичные гиперфункциям. Программа может быть оттранслирована на языки C и Java.

Полное описание языка недоступно. Некоторые особенности языка Smart изложены в работах [18, 19].

В событийно-ориентированной парадигме [20, 21] программа представлена в виде цикла, в котором последовательно просматривается определенный набор событий (сообщений).

Для всякого события запускается соответствующий обработчик события.

Таким образом, программа составляется из набора независимых обработчиков.

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

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

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

Отметим, что замена параллельного исполнения сопрограммным является преобразованием, существенно усложняющим программу; см. например [22].

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

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

Обзор работ по автоматному программированию представлен также в статьях [1, 11, 23].


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 06 Март, 2018 10:33 

Зарегистрирован: Среда, 07 Январь, 2015 14:53
Сообщения: 1356
Владимир Паронджанов писал(а):
Для всякого события запускается соответствующий обработчик события.

Таким образом, программа составляется из набора независимых обработчиков.

См. http://forum.easyelectronics.ru/viewtopic.php?p=457352#p457352
В ИС Дракон икона Событие предназначена для визуализации Дракон-схем обработчиков событий.
Так как программный код регистрации событий и вызов обработчиков событий не пишется программистом, а автоматически вставляется средой программирования, то Дракон-программисту необходимо визуализировать написанные Дракон-схемы обработчиков событий путем присоединением иконы Событие к иконе Заголовок. Нет необходимости присоединять икону Событие к другим иконам.

События генерируются операционной системой при выборе пункта в меню программы, от клавиатуры,и от мышки.
При объектно ориентированном программировании обработчики событий включаются в класс объектов.

Изображение

Изображение


Последний раз редактировалось LKom Вторник, 06 Март, 2018 12:18, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 06 Март, 2018 12:11 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5846
Откуда: Москва
Владимир Шелехов писал(а):
Для всякого события запускается соответствующий обработчик события.

Таким образом, программа составляется из набора независимых обработчиков.

LKom писал(а):
См. http://forum.easyelectronics.ru/viewtopic.php?p=457352#p457352

В ИС Дракон икона Событие предназначена для визуализации Дракон-схем обработчиков событий.
Так как программный код регистрации событий и вызов обработчиков событий не пишется программистом, а автоматически вставляется средой программирования, то Дракон-программисту необходимо визуализировать написанные Дракон-схемы обработчиков событий путем присоединением иконы Событие к иконе Заголовок. Нет необходимости присоединять икону Событие к другим иконам.

События генерируются операционной системой при выборе пункта в меню программы, от клавиатуры,и от мышки.
При объектно ориентированном программировании обработчики событий включаются в класс объектов.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2008-2024, участники конференции «DRAKON.SU», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB