Вторая конференция "Свободное програмное обеспечение в высшей школе" (27-28 января 2007)

Платформа для обучения событийному программированию

Фарафонов Александр Аркадьевич

Удмуртский Государственный Университет, Ижевск

1. Интерпретатор событийных программ

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

2. Событийная программа

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

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

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

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

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

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

Другие возможности:

3. Описание системы интерпретатора

Выбранная схема реализации

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

Обработка ошибок

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

Краткое описание системы

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

Помимо непосредственного исполнения программы доступны:

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

Программа конференции