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