ПАРАДИ́ГМЫ ПРОГРАММИ́РОВАНИЯ
-
Рубрика: Технологии и техника
-
-
Скопировать библиографическую ссылку:
ПАРАДИ́ГМЫ ПРОГРАММИ́РОВАНИЯ, системы базовых понятий, определяющие способ написания компьютерных программ. Возникновение П. п. связано с развитием языков программирования. П. п. затрагивают разл. аспекты языков программирования: абстракции, используемые для представления данных, подходы к декомпозиции процесса вычислений и т. п. Мн. языки программирования реализуют одновременно несколько П. п. Выделяют два осн. класса П. п. – императивные и декларативные, которые различаются способом задания правил обработки данных.
Императивные П. п. представляют программу как последовательность действий (операторов), которые преобразуют состояние программы. Допустимые виды операторов, а также типы обрабатываемых данных определяются конкретным языком программирования. К императивным парадигмам относится процедурная П. п., в которой отд. группы часто повторяемых операторов выделяются в процедуры (называемые также подпрограммами), описывающие действия по переводу одних данных в другие. В число операторов таких языков входит оператор обращения к процедуре. К процедурным языкам программирования относятся, напр., си, фортран, паскаль.
В декларативных П. п. описывается смысл изменений в состоянии программы, без явного указания конкретной последовательности выполняемых действий над состоянием. В языках, относящихся к декларативным П. п., эта последовательность формируется интерпретатором или компилятором. Одна из разновидностей декларативных П. п. – функциональная П. п., основанная на математич. аппарате функций высшего порядка, в качестве аргументов и результатов которых могут также выступать функции. Функциональная П. п. представляется в виде композиции таких функций. В частности, благодаря отсутствию побочных эффектов из двух применений функции с одинаковыми аргументами может потребоваться лишь одно. К функциональным языкам программирования относят, напр., Haskell, Lisp, OCaml, Scheme, однако данные языки содержат и элементы императивных П. п. К декларативным П. п. относится также логическая П. п., базирующаяся на математической логике и связанная с методами автоматич. доказательства теорем. В данной П. п. программа представляет собой набор формул логики, описывающих взаимосвязь между фактами и утверждениями. Логич. программа на входе получает запрос в виде формулы логики, а на выходе либо осуществляет подстановку значений свободных переменных во входной формуле, при которой она обращается в истину, либо выдаёт ответ «нет», если такая подстановка не существует. В логич. языках программирования на формулы, как правило, накладываются определённые ограничения. Напр., в языке пролог формулы представляют собой дизъюнкты Хорна – объединённые операцией дизъюнкции переменные, из которых все, кроме одной, входят в формулу с отрицанием (см. Алгебра логики, Логические операции). Единственная переменная без отрицания называется положительным литералом и соответствует истинности логич. утверждения в целом, в то время как остальные переменные описывают условия его истинности. Факты (аксиомы) при этом описываются в виде одного положительного литерала. Выполнение логич. программы сводится к поиску искомой подстановки. Для формул логики произвольного вида данная задача является переборной.
П. п. подразделяют также на структурные и неструктурные. Структурные П. п. нацелены на сокращение времени разработки и упрощение поддержки программ за счёт использования блочных операторов и подпрограмм. Отличит. чертой структурных программ является отказ от оператора перехода (goto). К структурным П. п. относится, в частности, процедурная П. п. В неструктурных П. п. для каждого типа вычислит. машины должен быть написан свой вариант внутр. кода и используется оператор goto.
Большое распространение имеет объектно ориентированное программирование, относящееся к структурным П. п. В данной П. п. программа разбивается на объекты – структуры данных, состоящие из полей, описывающих состояние, и методов – подпрограмм, применяемых к объектам для изменения или запроса их состояния. В большей части объектно ориентированных П. п. для описания объектов используются классы, объекты более высокого порядка, описывающие структуру и операции, связанные с объектами. В качестве более частной П. п. по отношению к объектно ориентированной выделяют прототипно ориентированную П. п. В отличие от основанных на классах объектно ориентированных систем, в прототипно ориентированных системах понятие классов не используется, а новые переменные объекты создаются путём копирования существующих прототипов. К языкам, поддерживающим объектно ориентированную П. п., относятся си++, Common Lisp (также содержит элементы функциональной П. п.), джава, джава-скрипт (прототипно ориентированная модель), смолток.