Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Непейвода Н.Н. -> "Основания программирования " -> 121

Основания программирования - Непейвода Н.Н.

Непейвода Н.Н., Скопин И.Н. Основания программирования — Институт компьютерных исследований , 2002. — 919 c.
Скачать (прямая ссылка): osnovanprogramm2002.pdf
Предыдущая << 1 .. 115 116 117 118 119 120 < 121 > 122 123 124 125 126 127 .. 316 >> Следующая

Современне системы программирования вкл ча т в себя средства организации потоков-сообений для управления процессами и обеспечива т возмо ности реализации стандартного потокового управления. подавляющем большинстве случаев это связывается с объектной ориентированностью. Примеры: Visual Basic, Delphi, Visual C++ и др.
В отличие от программ, которые рассматривались до сих пор и которые можно назвать программами "одного измерения" (некая последовательность описаний и действий, понятная сама по себе, если знаеь язык), стандартизация потокового управления позволяет перейти к качественно иному стилю программирования. В рамках этого стиля, получившего название событийно-ориентированного (см. § 3.5), программист готовит (под-) программы, ре-агируие на собтия, происходяие в системе. ри этом стандартизован способ передачи такой программе сведений о том, что настало ее время (наступило событие).
342
7.
Важное уточнение! Реагируют такие программы не сами по себе, а через объекты, которые их содержат в качестве методов. Такое опосредованное действие удобно во всех отношениях:
• Объект содержит все, что нужно для задания реакции на события. В частности, он знает, на какие собтия предусмотрена его реакция.
• о но создавать копии объектов (методы не дублиру тся).
• Контекст методов — это атрибута объекта, другие его метода и, разумеется, описания, в которые погружено описание объектов данного класса.
ктивизация реакции объекта на событие задается следуей схемой:
если у объекта есть метод для данного события, то этот метод вызывается для исполнения иначе этот объект ничего не делает;
Это одна из мотиваций объектного подхода 15). При рассмотрении программ, построенных для отработки реакций на события, самое важное то, что все такие программ могут бть стандартизованы. бсу дение такой схемы см. в §3.5.
В случае событийно-ориентированного программирования схема программы, называемой обычно проектом, строится следующим образом:
1. инициировать первичный набор объектов //(в дальнейшем он может меняться, менять свои свойства и др.);
2. цикл // бесконечный цикл опроса-ожидания событий
если есть событие то
цикл для всех объектов из набора
// опрос текущего набора объектов если у объекта есть етод для данного собтия то вызывать этот метод для исполнения конец цикла конец цикла
15 Не самая главная, не самая важная, но существенная и вдобавок такая, с которой программист немедленно сталкивается при программировании на современных инструментальных системах, например, на Visual C++ или Delphi.
7.3.
343
7.3.5. Понятие обстановки вычислений. Действия, меняющие обстановку
Любой вид потоковой обработки — это схематическое описание процесса, управляемого последовательность , получение которой элемент за элементом задано генерацией потока. С формальной точки зрения итерации лю-бого цикла можно рассматривать как обработку некоторого 'умозрительного' потока, состоящего из сложных (структурированных) элементов: каждый такой элемент — вся совокупность даннх, используемх в итерации (см. п. 7.3.1). Но этот взгляд непродуктивен: схемы обработки составляются для того, чтобы удобнее записывать, обсуждать, сравнивать алгоритмы и способы их представления в языковых формах. Таким образом, нужно рассматривать обработку как потокову , когда это удобно, и говорить о других схемах, когда потоковое представление не помогает восприяти .
ри принудительном заверении конструкции действия становятся не-локальнми, и у е поэтому не могут адекватно описваться потоковми схемами. Наглядный пример обработки, которая не вписывается в эти схемы, — бинарный поиск (заодно здесь иллстрируется нелокальность заверителя): Программа 7.3.2
/* Binary Search*/ #include <stdio.h> #include <math.h>
#define SZA 10 // Размер массива поиска
int a[SZA]; // Массив поиска
void init () // Функция задания начальных значений a
{
}
int main() {
char c;
// еременная для организации потока ввода
init (); do {
int x;
// еременная для искомого значения
344
ГЛАВА 7. ЦИКЛИЧЕСКИЕ ВЫЧИСЛЕНИЯ
int imi = 0; int ima = SZA; int h;
// иний индекс поиска // Верхний индекс поиска
// Служебная переменная:
//полуразность imi и ima
int response;
// твет
printf ("Input:"); scanf &x); response=-1;
// Заранее предполагаем неудачу
while (imi <= ima) {
h = (imi+ima)/2;
if (x == a[h]) {response=h;break;} if (x > a[h]) imi = h+1; else ima = h-1;
while ( c != 'n'); return 0;
}
Заметим, что переменная response совмещает в себе две функции: индекса ну ного элемента, если он найден, и сообения о неудаче, если такого элемента нет. Такое совмеение часто целесообразно: особые значения результата служат естественным сигналом об исключительной ситуации. break; выводит нас за предел двух операторов сразу, поскольку исполняется внутри условного оператора, а заканчивает минимальный объемлющий цикл.
алее, поскольку м ием хотя бы одно реение, у нас в программе практически вчисляется квантор суествования, т. е. дизънкция целого мно-
ества элементов. оэтому в качестве начального значения ответа берется — 1, логически соответстующая единице дизъюнкции: лжи, отсутствию решения.16
Предыдущая << 1 .. 115 116 117 118 119 120 < 121 > 122 123 124 125 126 127 .. 316 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100