
УМП Технологические подходы к разработке ПО 105
явным образом или быть связаны с неявными объектами, в таком случае события обычно
называют системными. События могут возникать. Возникновение события подразумева-
ет, что состояние системы изменилось определенным образом. С событием может быть
связана процедура, которая называется реакцией на событие. При возникновении события
автоматически вызывается процедура реакции. В современных системах программирова-
ния, поддерживающих событийное управление, предусматривается большое число самых
разнообразных событий, реакции на которые могут быть определены в программе, напри-
мер: нажатие клавиши на клавиатуре, попадание указателя мыши в определенную область
экрана, достижение внутренним таймером заданного значения, открытие заданного файла
и т.д. В программе, целиком управляемой событиями, нет основного потока управления,
он находится вне программы (в операционной системе или в административной системе
времени выполнения, то есть там, где реализован механизм возникновения событий).
Управление в программу попадает только в форме вызова процедуры реакции. Такая ор-
ганизация программы обеспечивает высокую модульность, прозрачность, сбалансирован-
ность структуры и другие полезные свойства. Понятно, что если связать события с коман-
дами приложения (как обычно и делается), то событийное управление как нельзя лучше
подходит для реализации пассивного интерфейса.
Замечание
В сущности, событийное управление является развитием очень старой идеи прерываний, ко-
торые были придуманы для организации взаимодействия синхронно и монотонно работаю-
щего центрального процессора с асинхронными и немонотонными внешними устройствами.
Поэтому событийное управление называют еще асинхронным.
В современных системах программирования имеются богатые и все время развивающиеся
библиотеки готовых компонент, которые называются элементы управления (controls), и
которые тесно интегрированы со встроенными механизмами событийного управления.
Использование готовых элементов управления удобно, продуктивно и должно быть реко-
мендовано в большинстве случаев.
Замечание
У неумелых программистов существует иллюзия, что программировать вертикальные при-
ложения с пассивным интерфейсом очень просто: достаточно выслушать (даже не записав!)
перечень команд приложения, в том виде, как их представляет себе заказчик (пользователь),
"натаскать" готовых элементов управления в программу, определить некоторые реакции и
приложение готово. Это именно иллюзия, потому что хотя описанный способ действий дей-
ствительно прост и хорошо поддержан системой программирования, он непродуктивен: в
недопустимо большом числе случаев заказчик будет не удовлетворен результатом.
Предположение, что пользователь приложения для бизнеса с пассивным интерфейсом
имеет в голове правильную (с точки зрения приложения) программу выполнения функции
бизнеса является очень сильным и далеко не всегда выполняется. Например, похвальное и
естественное стремление программиста сделать набор элементарных команд приложения
компактным и ортогональным приводит к тому, что часто последовательность команд,
выполняющих некоторую функцию бизнеса, обязана быть транзакцией (для сохранения
целостности корпоративных данных). В лучшем случае проверка выполнения всех усло-
вий целостности предусматривается умелым программистом в процедуре реакции по-
следнего элемента управления, при этом пользователь просто встает в тупик, когда полу-
чает отказ программы выполнять операцию при нажатии самой невинной кнопки ОК. В
худшем случае программист не проверяет выполнение условий целостности в расчете на
то, что пользователь будет действовать только допустимым образом. В результате получа-
ется ненадежное приложение, в котором можно неумышленно нарушить целостность
корпоративных данных.
70
70
Снобистски настроенные программисты иногда называют такого рода проверки в программах обидным термином
"защита от дурака". Вопрос о том, кто же в данном случае является "дураком" — программист или пользователь —
очень спорен.