Программа на процедурном языке программирования состоит из последовательности операторов (инструкций), задающих процедуру решения задачи. Основным является оператор присваивания, служащий для изменения содержимого областей памяти. Выполнение программы сводится к последовательному выполнению операторов с целью преобразования исходного состояния памяти, то есть значений исходных данных, в заключительное, то есть в результаты. Таким образом, с точки зрения программиста имеются программа и память, причем первая последовательно обновляет содержимое последней.
Процедурные языки характеризуются следующими особенностями:
Сущность функционального (аппликативного) программирования определена А.
П. Ершовым как «... способ составления программ, в которых единственным
действием является
вызов функции, единственным способом расчленения программы на части является
введение имени для функции, а единственным правилом композиции — оператор
суперпозиции функции. Никаких ячеек памяти, ни операторов присваивания,
ни циклов, ни, тем
более, блок-схем, ни передачи управления».
Роль основной конструкции в функциональных языках играет выражение. К
выражениям относятся скалярные константы, структурированные объекты,
функции, тела
функций и вызовы функций. Функция трактуется как однозначное отображение
из Х^ в
X, где Х — множество выражений.
Аппликативный язык программирования включает следующие элементы:
Программа представляет собой совокупность описаний функций и выражения, которые необходимо вычислить. Данное выражение вычисляется посредством редукции, то есть серии упрощений, до тех пор, пока это возможно по следующим правилам: вызовы базовых функций заменяются соответствующими значениями; вызовы небазовых функций заменяются их телами, в которых параметры замещены аргументами.
Функциональное программирование не использует концепцию памяти как хранилища значений переменных. Операторы присваивания отсутствуют, вследствие чего переменные обозначают не области памяти, а объекты программы, что полностью соответствует понятию переменной в математике. В принципе, можно составлять программы и вообще без переменных. Кроме того, нет существенных различий между константами и функциями, то есть между программами и данными. В результате этого функция может быть значением вызова другой функции и может быть элементом структурированного объекта. Число аргументов при вызове функции не обязательно должно совпадать с числом параметров, указанных при ее описании. Перечисленные свойства характеризуют аппликативные языки как языки программирования очень высокого уровня.
Первым таким языком был LISP (LISTProcessing — обработка списков), созданный в 1959 году. Цель его создания состояла в организации удобства обработки символьной информации. Существенная черта этого языка — унификация программных структур и структур данных: все выражения записываются в виде списков.
Новую область — логическое, или реляционное программирование, — открыло появление языка PROLOG {Пролог} (PROgramminginLOGic — программирование в терминах логики).. Центральным понятием в логическом программировании является отношение. Программа представляет собой совокупность определений отношений между объектами (в терминах условий или ограничений) и цели (запроса). Процесс выполнения программы трактуется как процесс общезначимости логической формулы, построенной из программы по правилам, установленным семантикой используемого языка. Результат вычисления является побочным продуктом этого процесса. В реляционном программировании нужно только специфицировать факты, на которых алгоритм основывается, а не определять последовательность шагов, которые требуется выполнить. Это свидетельствует о декларативности языка логического программирования. Она метко выражена в формуле Р. Ковальского: «алгоритм = логика + управление».
Языки логического программирования характеризуются:
Логические программы, в принципе, имеют небольшое быстродействие, так как вычисления осуществляются методом проб и ошибок, поиском с возвратами к предыдущим шагам.
В основе объектно-ориентированного стиля программирования лежит понятие объекта, а суть его выражается формулой: «объект = данные + процедуры». Каждый объект интегрирует в себе некоторую структуру данных и доступные только ему процедуры обработки этих данных, называемые методами. Объединение данных и процедур в одном объекте называется инкапсуляцией и присуще объектно-ориентированному программированию. Для описания объектов служат классы. Класс определяет свойства и методы объекта, принадлежащего этому классу. Соответственно, любой объект можно определить как экземпляр класса.
Программирование рассматриваемого стиля заключается в выборе имеющихся или создании новых объектов и организации взаимодействия между ними. При создании новых объектов свойства объектов могут добавляться или наследоваться от объектов-предков. В процессе работы с объектами допускается полиморфизм — возможность использования методов с одинаковыми именами для обработки данных разных типов.
К наиболее современным объектно-ориентированным языкам программирования
относятся C++ и Java.
В силу своей конструктивности идеи объектно-ориентированного
программирования используются во многих универсальных процедурных
языках. Так, например,
в состав интегрированной системы программирования на языке PASCAL
(корпорации BorlandInternational) версии 5.5 входит специальная
библиотека объектно-ориентированного
программирования TurboVision.
В последнее время многие программы, в особенности объектно-ориентированные, реализуются как системы визуального программирования. Отличительной особенностью таких систем является мощная среда разработки программ из готовых «строительных блоков», позволяющая создать интерфейсную часть программного продукта в диалоговом режиме, практически без кодирования программных операций. К числу объектно-ориентированных систем визуального программирования относятся: VisualBasic, Delphi, C++ Builder и Visual C++.
Основной принцип: логическая структура программы м.б. выражена
комбинацией 3-х базовых структур: следования, ветвления
и цикла. Причем возможны
суперпозиции. Все это позволяет избежать операторов условного
и безусловного перехода,
что
является важнейшим признаком структурного программирования.
Важнейший компонент –модульность.