245
Целью работы программиста всегда является создание программы, опи-
сывающей некоторый процесс.Программа есть структурное объединение сво-
их составляющих: выражений, операторов и др. Но отношение “
быть соста-
вленным из
” — лишь формально-лингвистическая основа структуры про-
граммы. В дополнение к ней нужно рассматривать, в частности, содержа-
тельную структуру, когда структурные единицы, выделяемые в программе,
отражают разбиение решаемой задачи на подзадачи. В этом случае говорят о
декомпозиции программы. Не менее важно для работы с программой струк-
турирование процесса ее выполнения, т. е. выделение в нем взаимодейству-
ющих статически заданных и динамически возникающих структурных еди-
ниц. При таком структурировании появляются процессы, вызовы процедур,
экземпляры объектов и т. д. Наконец, еще одним измерением, с которым при-
ходится иметь дело при составлении программ, является структурирование
данных, перерабатываемых в ходе выполнения программы.
Все эти виды структур взаимосвязаны, при программировании они пла-
нируются совместно, и далеко не всегда можно разделить работу программи-
ста, относящуюся к разным сторонам создаваемой системы. Если не брать в
расчет декомпозицию задачи, которая относится к уровню проектирования,
то с формальной точки зрения лингвистическое структурирование програм-
мы является первичным — программа строится как набор конструкций, ие-
рархически соподчиненных и соединенных для выполнения процесса. В по-
давляющем большинстве случаев программа задается до того, как процесс
будет запущен, и она определяет, какие входные данные и как будут перера-
батываться в выходные, какие промежуточные данные при этом будут поро-
ждаться.
Не так уж редки (и концептуально важны) схемы вычислений, при ко-
торых используются вычислительные процессы, порождающие программы
для дальнейшей обработки. Самый наглядный пример — компилятор, кото-
рый воспринимает текст на языке программирования, перерабатывает его в
последовательность команд конкретного компьютера, которая затем уже пе-
рерабатывает данные. В этом примере текст на языке программирования —
это структура данных для компилятора, в процессе исполнения программы
обрабатываемая до поступления других данных. Но отношение человека к
программе и к другим данным соврешенно различно. Поэтому говорится
о вычислителе, исполняющем программу на языке, отвлекаясь от того, что
для обработки основной части данных строится другая, рабочая, програм-
ма. Это естественная идеализация вычислительного процесса, позволяющая
раздельно обсуждать две структуры: программы и данных. Встречаются и