Процедурное программирование

Процедурное или императивноепрограммирование есть отражение фон Неймановской архитек­туры компьютера. Программа на процедурном языке состоит из пос­ледовательности команд, определяющих процедуру решения задачи. Основным является оператор присваивания, предназначенный для определения и изменения содержимого памяти компьютера. Концеп­ция памяти как места хранения данных, значения которых можно изменять операторами программы, является фундаментальным в императивном программировании.

Выполнение программы сводится к последовательному выпол­нению операторов с целью преобразования исходного состояния памяти, т.е. программа последовательно обновляет содержимое памяти, изменяя его от исходного состояния до результирующего.

Одним из первых процедурных языков программированиявысокого уровня стал Фортран(FORTRAN − FORmula TRANslator, транслятор формул), созданный в начале 50-х гг. в США фирмой IBM. Первая публикация о нем появилась в 1954 г. Основное назначение языка − программирование научно-тех­нических задач. Объектами языка являются целые и вещественные числа и числовые переменные. Выражения в нем формируются с помощью четырех арифметических действий: возведения в степень, логических операций И, ИЛИ, НЕ, операций отношения и круглых скобок. Основные операторы Фортрана − ввод, вывод, присваива­ние, условный и безусловный переход, цикл, вызов подпрограмм. Долгие годы он был одним из самых распространенных языков в мире. За это время накоплена огромная библиотека программ, на­писанных на Фортране. И сейчас ведутся работы над очередным стандартом Фортрана. В 2000 г. была реализована версия Фортран F2k, имеется стандартная версия HPF для параллельных суперкомпьютеров. Многие средства Фортрана использованы в языках PL-1 и Бейсик.

Кобол(COBOL − Common Business Oriented Language, общепринятый де­ловой язык) — язык программирования, ориентированный на реше­ние задач обработки данных. Широко используется для решения учетно-экономических и управленческих задач. Разработан в США в 1958-1960 гг. Программа на Коболе имеет вид ряда предложений на английском языке и напоминает обычный текст. Группы после­довательно записанных операторов объединяются в предложения, предложения − в параграфы, параграфы − в секции. Программист присваивает параграфам и секциям имена (метки), что облегчает непосредственное обращение к нужному участку программы. В Коболе реализованы мощные средства работы с большими объемами данных, хранящи­мися на различных внешних носителях. На этом языке создано много приложений, некоторые из них активно эксплуатируются и сейчас. Достаточно сказать, что одной из высокооплачиваемых категорией граждан в США являются программисты на Коболе.

Алгол (ALGOrithmic Language, алгоритмический язык) разработан группой зарубежных специалистов в 1960 г., явился результатом международного сотруд­ничества конца 50-х гг. (Алгол-60). Алгол предназначался для запи­си алгоритмов, построенных в виде последовательности процедур, применяемых при решении поставленных задач. Специалисты-практики воспринимали этот язык неоднозначно. Тем не менее, он как признанный международный язык сыграл большую роль в станов­лении основных понятий программирования и для обучения про­граммистов. В нем впервые введены понятия «блочная структура программы», «динамическое распределение памяти». Внутри блока в Алголе можно вводить локальные обозначения, которые не зависят от остальной части программы. Несмотря на свое интернациональное происхождение, Алгол-60 получил меньшее распространение, чем Фортран. Например, не на всех зарубежных ЭВМ имелись трансля­торы с Алгола-60. В 1968 г. в результате дальнейшего развития и усо­вершенствования Алгола-60 была создана версия Алгол-68. Это многоцелевой универсальный расширенный язык программирования. Последнее свойство позволяло с помощью одной и той же программытранслятора осуществлять трансляцию с различных расширенных версий языка без дополнительных затрат на приспособление этого языка к различным категориям пользователей, на получение проблемно-ориентированных диалектов языка. По своим возможностям Алгол-68 и сегодня опережает многие языки программирования, од­нако из-за отсутствия эффективных компьютеров для него не уда­лось своевременно создать хорошие компиляторы. В нашей стране в те годы под руководством академика Андрея Петровича Ершова был создан транслятор Альфа, который представлял достаточно удачную русифицированную версию Алгола.

В середине 60-х гг. сотрудники математического факультета Дартмутского колледжа Томас Курц и Джон Кемени создали специализированный язык программирования, который состоял из простых английских слов. Новый язык назвали универсальным символическим кодом для начинающих (BASIC − Beginners All-purpose Symbolic Instruction Code) или сокращенно Бейсик. 1964 г. считают годом рождения этого языка. Он получил самое широкое распространение при работена персональных компьютерах в режиме интерактивного диалога. Популярность Бейсика объясняется как простотой его освоения, так и наличием достаточно мощных универсальных средств, пригодных для решения научных, технических и экономических задач, а также задач бытового характера, игровых и т.д. Согласно концепциям, за­ложенным в Бейсике, в нем широко распространены различные пра­вила умолчания, что считается плохим тоном в большинстве языков программирования подобного типа. Возникло множество версий языка, зачастую мало совместимых друг с другом. Однако, зная одну из версий, можно без особого труда освоить любую другую. Бейсик активно поглощает многие концепции и новинки из других языков. Первоначально интерактивный режим осуществлялся с использова­нием интерпретатора, в настоящее время для этого языка имеются также и компиляторы.

В начале 60-х гг. каждый из существующих языков программи­рования был ориентирован на разные классы задач, но в той или иной мере привязан к конкретной архитектуре ЭВМ. Были предпри­няты попытки преодолеть этот недостаток путем создания универ­сального языка программирования ПЛ/1(PL/1 − Programming Language One). Это первый многоцелевой универсальный язык, разра­ботанный в США фирмой IВМ в 1963—1966 гг. Это один из наиболее распространенных универсальных языков, он хорошо приспособлен для решения задач в области вычислительной техники: исследования и планирования вычислительных процессов, моделирования, решения логических задач и исследования логических схем, разработки сис­тем математического обеспечения. При разработке PL/1 были ши­роко использованы основные понятия и средства языков Фортран, Алгол-60, Кобол. PL/1 — богатый и гибкий язык, он дает возможность производить вставки, исправлять текст программы в процессе ее отладки. Язык получил широкое распространение, трансляторы с него имеются для многих типов компьютеров. Компания IВМ и сегодня продолжает поддерживать этот язык.

Паскаль(Разса1)является одним из наиболее популярных про­цедурных языков программирования, особенно для персональных компьютеров. Созданный как учебный язык программирования в 1968—1971 гг. Никлаусом Виртом в Высшей технической школе (ЕТН) в Цюрихе (Швейцария), он был назван в честь французского ма­тематика и философа Блеза Паскаля (1623-1662). Целью работы Н. Вирта было создание языка, который

· строился бы на небольшом количестве базовых понятий;

· имел простой синтаксис;

· допускал перевод программ в машинный код простым компиля­тором.

Лингвистическая концепция Паскаля пропагандирует системный подход, выражающийся, в частности, в расчленении крупных задач на меньшие по сложности и размеру, легко поддающиеся решению. К основным принципам Паскаля следует отнести:

- Структурное программирование. Суть его заключается в оформлении последовательности команд как замкнутых функций или процедур и в объединении данных, связанных по смыслу, в сложные структуры данных. Благодаря этому повышается наглядность текста и упрощается его отладка.

- Программирование сверху-вниз, когда задача разбивается на простые, после чего каждая решается в отдельности. Затем компонуются результаты проектирования простых задач, и поставленная задача решается сверху-вниз в целом.

В основу разработки языка Паскаль был положен Алгол-60, но в Паскале ужесточен ряд требований к структуре программы и имеются возможности, позволяющие успешно применять его для создания крупных проектов, например, программ-трансляторов. Паскаль реализован для всех типов компьютеров, в настоящее время использу­ются во многих учебных заведениях для обучения программированию, и также для создания больших реальных проектов.

Период с конца 60-х до начала 80-х гг. характеризуется бурным ростом числа различных языков программирования, сопровождав­шим, как это ни парадоксально, кризис программного обеспечения. Этот кризис особенно остро переживало военное ведомство США. В январе 1975 г. Пентагон решил навести порядок среди бесчислен­ного множества трансляторов и создал комитет для разработки одного универсального языка. На конкурсной основе комитет рассмот­рел сотни проектов и выяснил, что ни один из существующих языков не может удовлетворить их требованиям, для окончательного рассмотрения было оставлено два проекта. В мае 1979 г. был объявлен победитель — группа ученых во главе с Жаном Ихбиа. Победивший язык назвали АДА, в честь Ады Лавлейс. Она в юности была увлечена идеями Чарльза Бэббиджа и помогала ему составлять описание машины, а в начале 40-х гг. XIX в. разработала первую в мире программу для вычислительной машины. Язык АДА — прямой наследник Паскаля. Он предназначен для создания и длительного сопровождения больших программных систем, управления процессами в реальном масштабе времени. В языке четковыражена модульность его конструкций, причем обеспечивается удобство организации разнообразных связей между модулями. Важным его достоинством является возможность параллельного програм­мирования ветвей программы, которые затем могут реализоваться на многопроцессорных компьютерах. Язык АДА сложен для изу­чения.

Язык программирования Си(С)был разработан в лаборатории Bell для реализации операционной системы UNIX в начале 70-х гг. и не рассматривался как массовый. Он планировался для замены Ассемблера, чтобы иметь возможность создавать столь же эффектив­ные и компактные программы, и в то же время не зависеть от конк­ретного типа процессора. В Си сочетаются достоинства современных высокоуровневых языков в части управляющих конструкций и струк­тур данных с возможностями прямого доступа к аппаратным сред­ствам компьютера. Синтаксис языка Си обеспечивает краткость программы, его компиляторы генерируют эффективный объектный код. Одна из наиболее существенных особенностей Си состоит в том, что различия между выражениями и операторами нивелируются, это при­ближает его к функциональным языкам. Например, выражение мо­жет обладать побочным эффектом присваивания, а также может ис­пользоваться в качестве оператора. Нет четкого различия между процедурами и функциями, более того, понятие процедуры вообще не вводится. Синтаксис языка затрудняет программирование и вос­приятие составленных программ. Отсутствует строгая типизация данных, что предоставляет дополнительные возможности программис­ту, но не способствует созданию надежных программ. Язык Си приобрел большую популярность среди системных и прикладных программистов. В настоящее время этот язык реализован для боль­шинства компьютерных платформ.