На этом шаге мы рассмотрим более подробно сущность императивной парадигмы.
Как и ранее, вначале договоримся о терминологии [1-4].
Языки императивные (Imperative Languages) (Imperative (англ.) - императивный, содержащий указание на выполнение некоторого действия) - класс языков программирования или манипулирования базой данных. Программа, написанная на императивном языке, явно указывает способ получения желаемого результата, не опеределяя при этом ожидаемых свойств результата - результат неявно задается только способом получения его при помощи определенной процедуры. Процедура получения желаемого результата имеет вид последовательности операций, поэтому для процедурных языков характерно указание логики управления в программе и порядка выполнения операторов. Типичными операторами являются операторы присваивания и передачи управления, операторы ввода-вывода и специальные операторы для организации циклов. Из них можно составлять фрагменты программ и подпрограммы. В основе такого программирования лежат взятие значения какой-то переменной, совершение над ним действия и сохранение нового значения с помощью оператора присваивания, и так до тех пор, пока не будет получено желаемое окончательное значение. Отметим, что операторы присваивания разрушают информацию (присваиваемое значение заменяет предыдущее значение переменной) и также зависят от порядка выполнения. Императивные языки тесно связаны с фон-неймановской моделью вычислений и поэтому большинство популярных языков являются императивными.
Язык процедурного программирования (Procedure-Oriented Language) - императивный язык программирования, основанный на понятии процедуры и переменной. Процедура выполняет некоторое действие, используя и изменяя значения переменных, являющихся ее параметрами, а также глобальных и локальных переменных.
Действие процедуры описывается последовательностью более простых действий, выполняемых обращением к другим процедурам и базовыми операторами языка. Примерами языков процедурного программирования являются FORTRAN, ALGOL-60, PL/1, COBOL, Pascal, Ada и т.д.
Заметим, что очень часто встречается следующее толкование термина "процедурный язык": процедурный язык - то же, что императивный язык программирования. Термин "процедурный язык" следует признать неудачным, потому что в программировании процедура связана с более специальным понятием, чем то, которое предполагает определение "процедурный" в процедурном языке.
Язык модульного программирования (Modular Programming Language) - язык программирования, программа на котором организована в виде совокупности модулей со строгим соблюдением правил их взаимодействия; описание модуля состоит из описания интерфейса и описания реализации. В простейшем случае модулем является процедура; в современных языках имеются более развитые средства модульности: пакеты и задачи в языке Ada, модули в языке Modula-2, абстрактные типы данных.
Все сказанное можно изобразить в виде дерева:
Рис.1. Дерево императивного программирования
История развития императивного программирования богата событиями:
1936 год. Двадцатипятилетний студент Кембриджского университета англичанин Алан Тьюринг опубликовал статью "О вычислимых числах", в которой рассматривалось гипотетическое устройство ("машина Тьюринга"), пригодное для решения любой разрешимой математической или логической задачи, - прообраз программируемого компьютера.
1945 год. Разослан отчет американского математика Джона фон Неймана "Предварительный отчет о машине "Эдвак", содержащий концепцию хранения команд компьютера в его собственной внутренней памяти.
1972 год. 31-летний специалист по системному программированию из фирмы Bell Labs Деннис Ритчи разработал язык программирования C.
1973 год. Швейцарский специалист по программированию Никлаус Вирт опубликовал "Пересмотренное сообщение", определившее точный стандарт языка Pascal.
1976 год. Опубликована книга Эдсгера Дейкстры "Дисциплина программирования", посвященная фундаментальным вопросам построения программ и представляющая принципиально новую точку зрения на существо программирования.
1979 год. Объявлен победитель конкурса по созданию языка программирования вычислительных систем Министерства обороны США. Им стал язык Ада, разработанный фирмой CII Honeywell Bull под руководством француза Жана Ишбиа. 1981 год. Опубликован учебник профессора Корнеллского университета (США) Дэвида Гриса "Наука программирования".
Передан пользователям компилятор с языка программирования Modula-2, разработанного Никлаусом Виртом и являющегося наследником языков Pascal и Modula. Основные особенности языка Modula-2 - реализация программ в виде набора самостоятельных модулей и мультипрограммирование.
1983 год. Группой исследователей во главе с Б.Страуструпом была окончена
разработка языка программирования C++, представляющего собой результат дальнейшего развития языка
программирования C в направление объектной ориентированности и включения в него механизмов контроля
типов, абстракции данных и совмещения операций. Название C++ выдумал Рик Масситти. Название
указывает на эволюционную природу перехода к нему от C. "++" - это операция приращения в C. Б.Страуструп
[5, с.10] шутит, что "знатоки семантики языка находят, что C++ хуже, чем ++C".
На следующем шаге мы рассмотрим декларативную (логическую) парадигму .