Шаг 48.
Декларативная (логическая) парадигма

    На этом шаге мы остановимся более подробно на декларативной (логической) парадигме .

    В толковых словарях [1-4] Вы можете прочесть, что языки декларативного программирования (Declarative languages) - класс языков программирования, программа на которых задает связи и отношения между объектами и величинами и не определяет последовательность выполнения действий. При использовании декларативного языка в программе в явном виде указывается, какими свойствами должен обладать результат, но не говорится, каким способом он будет получен; подходит любой способ получения результата, обладающего требуемыми свойствами.

    Поскольку в основе декларативных языков заложены статические, а не динамические понятия (т.е. определяется "что", а не "как"), такие понятия, как упорядочение и поток команд управления, не имеют никакого отношения к этим языкам и в них нет каких-либо операторов присваивания. В идеальном случае программа на декларативном языке будет состоять только из неупорядоченной системы уравнений, характеризующий требуемый результат. Однако в связи с тем, что реальная программа должна быть легко реализуемой и достаточно эффективной, такая идеальная модель не выдерживается - для этого существующие декларативные языки должны были бы иметь абсолютно совершенный синтаксис и стиль. Декларативные языки не привязаны к классической фон-неймановской модели вычислений, и в типичном случае алгоритм достижения требуемого результата может иметь высокую степень параллелизма. Степень "декларативности" языка является относительным понятием: PROLOG является декларативным языком по сравнению с языком ассемблера, но его можно рассматривать как императивный язык по сравнению с языками представления знаний.

    Дж.Робинсон пишет [5, с.13]: "Внешне функциональное программирование выглядит как понятие, независимое и несколько обособленное от логического программирования. Однако я утверждаю, что и то и другое являются примерами более общей, фундаментальной, единой и простой идеи, которую можно было бы ... назвать "утвердительное программирование". Это тип программирования, когда вы занимаетесь тем, что утверждаете о некоторых предложениях, что они истинны, и затем просите вывести другие предложения как их следствия.

    В логическом программировании эти утверждаемые предложения имеют вид импликаций, а в функциональном - равенств (уравнений). Но это в действительности только внешнее различие. Я думаю, что главное здесь то, что, когда вы запускаете системы того или иного вида, вы запускаете дедуктивные машины: просите их выполнить для вас нужные дедукции (выводы)."

    Приведем "архитектуру" декларативной (логической) парадигмы, которая, на наш взгляд является полезным инструментом для формирования взгляда на методику преподавания программирования:


Рис.1. Дерево логической парадигмы

    Символы "???" на схеме означают, что нам неизвестны объектно-ориентированные реализации языков продукционного программирования.

    К языкам эквационального программирования мы отнесем языки, семантика которых основана на системах подстановок. К этой парадигме часто относят и языки OBJ, AFFIRM, MAPC. Так как это экспериментальные языки, не претендующие на высокую эффективность реализации, их, возможно, уместнее называть языками эквациональной спецификации.


(1)Борковский А.Б. Англо-русский словарь по программированию и информатике (с толкованиями). - М.: Русский язык, 1989. - 335 с.
(2)Заморин А.П., Марков А.С. Толковый словарь по вычислительной технике и программированию: Основные термины. - М.: Русский язык, 1988. - 221 с.
(3)Толковый словарь по вычислительным системам / Под ред. В.Иллингуорта, Э.Л.Глейзера, И.К.Пайла. - М.: Машиностроение, 1989. - 568 с.
(4)Першиков В.И., Савинков В.М. Толковый словарь по информатике. - М.: Финансы и статистика, 1991. - 543 с.
(5)Логическое программирование.- М.: Мир, 1988. - 368 с.


    Со следующего шага мы начнем рассматривать перечисленные на рисунке 1 парадигмы, в частности, резолюционную (хорновскую) парадигму.




Предыдущий шаг Содержание Следующий шаг