139
Термины программирование и программа необходимо определить более точно,
чтобы не возникало неоднозначности. В настоящее время под программой
понимается последовательность действий, совершаемых машиной Фон-
Неймана, а в качестве стиля программирования рассматривается базирующийся
на машине Фон-Неймана структурный стиль программирования. В таком
контексте непонятно, можно ли считать программой текст, написанный на
языке
VHDL или Verilog, а также тексты, описывающие системы, работающие
в других моделях вычислений.
Непейвода приводит следующую классификацию стилей
программирования:
• сентенциальное программирование (Рефал, Prolog);
• функциональное программирование (Lisp);
• автоматное программирование;
• событийное программирование;
• структурное программирование (Си);
• параллельное программирование;
• объектно-ориентированное программирование [42, 43].
3.2.7 Стиль программирования, модель вычислений, платформа
Стиль программирования находится над
моделью вычислений, так как
модель вычислений задает набор правил, в рамках которых реализуется тот или
иной стиль. Между решаемой задачей, стилем программирования и моделью
вычислений не должно быть концептуальных противоречий. В противном
случае возникает резкий скачок сложности проектируемой системы,
увеличиваются количество ошибок, сроки выполнения, быстро заканчивается
бюджет проекта. К сожалению,
большинство программистов не воспринимает
эту проблем, что обычно приводит к увеличению проектных бюджетов и
огромному количеству ошибок.
В качестве примера нарушения гармонии между стилем
программирования и моделью вычислений можно привести ОС РВ, в которых
искусственно создается потоковая модель вычислений, а в качестве стиля
программирования используется структурное программирование (чаще всего
на языке
Си). Аналогичные проблемы есть в современных операционных
системах общего назначения (Microsoft Windows 2000/XP/Vista, Linux,
FreeBSD, Mac OS и т.д.) и в системах программирования для них (Java, C#, C++
и т.д.). В своей статье "Проблемы с потоками" Эдвард Ли подробно освящает
эту проблему [13].
Чтобы избежать противоречий, используют способ проектирования на базе
платформ, в котором каждый слой имеет свою модель
вычислений и
гармонично связанный с ним стиль программирования. Каждый слой системы
при этом является фундаментом для последующих слоев и перемешивания
понятий, встречающегося в современных ОС РВ, не происходит [40].