Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
яимп.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
72.47 Кб
Скачать

1. Парадигмы программирования: императивная, функциональная, логическая. Применение различных парадигм программирования для решения различных задач.

Паради́гма программи́рования — это система идей и понятий, определяющих стиль написания компьютерных программ. Это способ концептуализации, определяющий организацию вычислений и структурирование работы, выполняемой компьютером.

Важно отметить, что парадигма программирования не определяется однозначно языком программирования; практически все современные языки программирования в той или иной мере допускают использование различных парадигм (мультипарадигмальное программирование). Так на языке Си, который не является объектно-ориентированным, можно работать в соответствии с принципами объектно-ориентированного программирования, хотя это и сопряжено с определёнными сложностями; функциональное программирование можно применять при работе на любом императивном языке, в котором имеются функции (для этого достаточно не применять присваивание).

Императи́вное программи́рование — это парадигма программирования, которая, в отличие от декларативного программирования, описывает процесс вычисления в виде инструкций, изменяющих состояние программы. Императивная программа очень похожа на приказы, выражаемые повелительным наклонением в естественных языках, то есть это последовательность команд, которые должен выполнить компьютер.

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

Языки: С, С++, С#, Java, JS, Delphi… (короче говоря - все, кроме Пролога).

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

(иными словами у нас нет присваивания, есть только функции и возвращаемые ими значения)

Языки: Prolog, Python, Ruby (а при остром желании, как уже писалось выше можно и на С#, VB.NET (но нафиг оно надо))

Логи́ческое программи́рование

В логическом программировании программы выражены в виде формул математической логики, и решение задачи достигается путем вывода логических следствий из них.

Самым известным языком логического программирования является Prolog.

Прочие парадигмы, которых нет в вопросе, но их нужно знать:

Директивное (структурное)

Директивная программа предписывает, как достичь результата, пошагово описывая действия. Поэтому такое программирование является достаточно легким для понимания.

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

В директивном программировании в свое время возникла концепция локализации части кода в так называемые подпрограммы (функции, методы), с последующим их вызовом из разных мест основной программы. При вызове в подпрограмму могут передаваться какие-либо данные в виде аргументов; а подпрограмма, в свою очередь, может возвращать в главную программу результат (т.е. полученные в ходе ее выполнения данные).

Декларативная

Противоположность императивному. Декларативный язык описывает не столько решение задачи, сколько саму задачу («ЧТО» нужно получить), а каким образом получить решение, уже должен определять компьютер. (ненавидимый мной Пролог)

Объектно-ориентированное программирование

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

ООП призвано решать более сложные и объемные задачи по сравнению с директивным программированием.

В основе ООП лежат такие понятия как наследованиеполиморфизм и инкапсуляция.

Инкапсуляция предполагает, что малозначащие детали объекта скрыты. Объект, получая какую-либо команду, сам «знает» как ее обработать исходя из того, к какому классу он принадлежит.

Все объекты являются экземплярами классов, которые по отношению друг к другу могут выступать в роли родитель-потомок. Дочерние классы наследуют свойства родительского. В случае, когда 100% наследование не требуется, выручает так называемый полиморфизм, который предполагает переопределение методов родительского класса в дочерних классах. (всеми любимый C# является объектно-ориентированным)

Короткая таблица:

императивное

программа = последовательность действий, связанных условными и безусловными переходами

процедурное

программа = последовательность процедур, каждая из которых есть последовательность элементарных действий и вызовов процедур, структурированных с помощью структурных операторов if, for и while

объектно-ориентированное

программа = несколько взаимодействующих объектов, функциональность (действия) и данные распределяются между этими объектами

функциональное

программа = система определений функций, описание того, что нужно вычислить, а как это сделать — решает транслятор; последовательность действий не прослеживается

продукционное (логическое)

программа = система определений и правил вида "условие => новый факт"

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]