Similar presentations:
Событийно-ориентированное программирование
1.
Парадигмы программирования(с примерами на языке R)
Событийно-ориентированное
программирование
Голубничий А.А.
[email protected]
@Golubnichij
2.
Структура занятия• основные понятия
• аспекты событий;
• области применения;
• делегаты;
• языки программирования;
• инструменты для разработки.
2
3.
Основные понятияСобытийно-ориентированное программирование – парадигма
программирования, в которой выполнение программы определяется
событиями – действиями пользователя (клавиатура, мышь),
сообщениями других программ и потоков, событиями операционной
системы (например, поступлением сетевого пакета).
Событийно-ориентированное программирование – способ
построения компьютерной программы, при котором в коде (как
правило, в головной функции программы) явным образом выделяется
главный цикл приложения, тело которого состоит из двух частей:
выборки события и обработки события
3
4.
Основные понятияСобытие – это сообщение, которое возникает в различных точках
исполняемого кода при выполнении определенных условий.
• события предназначены для того, чтобы иметь возможность
предусмотреть реакцию программного обеспечения;
• событие сообщает об изменении состояния некоторого объекта.
Событие – это абстракция инцидента или сигнала в реальном
мире, который сообщает нам о перемещении чего- либо в новое
состояние.
Событие – это именованный делегат, при вызове которого, будут
запущены все подписавшиеся на момент вызова события методы
заданной сигнатуры.
Делегат – класс, который позволяет хранить в себе ссылку на
4
метод с определенной сигнатурой произвольного класса
5.
Пример объявления и использованияделегата (С#)
using System;
// Объявление делегата
delegate void MyDelegate(string a);
class DelegateExample
{
static void Func(string param)
{
Console.WriteLine("Вызвана функция с параметром {0}.", param);
}
public static void Main()
{
// Создание экземпляра делегата
MyDelegate f = new MyDelegate(Func);
// Вызов функции
f("hello");
}
}
5
6.
Аспекты событийМетка – уникальный идентификатор события.
Значение – текстовое сообщение о сути произошедшего.
Предназначение – модель событий, которая принимает событие.
Данные – данные, которые переносятся от одного объекта к
другому.
6
7.
Области применения• построение пользовательских интерфейсов (в том числе
графических);
• создание серверных приложений;
• моделирование сложных систем;
• параллельные вычисления;
• автоматические системы управления, SCADA;
• программирование игр, в которых осуществляется управление
множеством объектов.
7
8.
Применение в серверных приложениях (C10k)Проблемы модели «один поток на соединение»:
• слишком велики накладные расходы на структуры данных
операционной системы, необходимые для описания одной задачи
(сегмент состояния задачи, стек);
• слишком велики накладные расходы на переключение контекстов.
Серверное
приложение
при
событийно-ориентированном
программировании реализуется на системном вызове, получающем
события
одновременно
от
многих
дескрипторов
(мультиплексирование). При обработке событий используются
исключительно неблокирующие операции ввода-вывода, чтобы ни
один дескриптор не препятствовал обработке событий от других
дескрипторов.
8
9.
Применение в настольных приложениях(пример)
Реализация графического интерфейса пользователя.
Обработчик событий (на примере C#):
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Была нажата кнопка");
}
9
10.
Языки программированияPerl (события и демоны DAEMON, и их приоритеты PRIO),
PHP
Java
Delphi
ActionScript 3.0
C# (события event),
JavaScript (действия пользователя).
10
11.
Инструменты и библиотекиNode.js – событийно-ориентированный I/O фреймворк на JavaScript
Cocoa & Objective-C – рефлексивный объектно-ориентированный
язык программирования, добавляющий сообщения в стиле Smalltalk
в язык Си.
Gui4Cli – событийно-ориентированный язык программирования для
Windows
PRADO – компонентный событийно-ориентированный инструмент
для Web-программирования на PHP5
Qt – кроссплатформенная библиотека виджетов для C++,
основанная на модели управления событиями.
QP – семейство открытых событийно-ориентированных окружений
для встроенных систем реального времени
11