Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 700269.doc
Скачиваний:
15
Добавлен:
01.05.2022
Размер:
1.78 Mб
Скачать

1.1.4. Процедурное и событийное программирование

Вернемся к функциональным принципам работы компьютера. Было отмечено, что программа, начиная выполняться с определенной ячейки памяти, выполняется последовательно по управляющим инструкциям до своего завершения. Другими словами, программа является совокупностью последовательно выполняемых операций (процедур) и может рассматриваться как код, воздействующий на данные. Для программиста это означает следующее: любые инструкции программы будут выполняться по ходу программы немедленно и именно в последовательности, определенной при программировании. Такая модель построения программы называется процессорно-ориентированной, а языки программирования, реализующие подобный подход – процедурными [8].

Еще одной особенностью процессорно-ориентированной модели является то, что параллельная работа двух разных программ невозможна. До того, как на выполнение будет запущена следующая программа (фактически это означает загрузку в оперативную память), предыдущая должна завершиться. Такой вариант работы поддерживается, например, в операционной среде MS DOS (Microsoft Disk Operating System) и носит название однозадачного режима работы.

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

Переход к современному стилю программирования – событийному – осуществлялся постепенно. В работе Ч. Петзолда "Программирование для Windows 95" приведено сравнение, что программисты, работающие в рамках MS DOS, сами "вырыли себе яму" использованием резидентных программ – программ, которые все время находились в памяти компьютера, но не проявляли себя до определенных действий пользователя. (Самым типичным примером является программа, выполняющая копию экрана при нажатии определенного сочетания клавиш, допустим "Alt + W").

В приведенном примере факт поступления в центральный процессор кода нажатой пользователем клавиши можно назвать событием, и это неплохая иллюстрация принципов событийного программирования. Понаблюдайте внимательно: что делает большинство программ при их активации в операционной системе Windows (да, пожалуй, и в любой другой современной операционной системе)? Они рисуют свое окно, меню, панели управления, могут открыть и показать некоторый заданный файл и… И все! Далее они ожидают команд (действий) пользователя – необходимо нажать какую-либо кнопку, выбрать пункт меню, кликнуть где-нибудь мышкой – другими словами, для дальнейшей работы программе необходимо возникновение события. Реакцией на каждое событие будет отработка соответствующего программного кода.

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