
- •1. Парадигмы программирования: императивная, функциональная, логическая. Применение различных парадигм программирования для решения различных задач.
- •Применение различных парадигм программирования для решения различных задач.
- •If логическое условие then оператор_1
- •Оператор выбора
- •Результат выполнения:
- •Оператор перехода
- •Примеры программирования вычислительных процессов с разветвлением
- •Информация во время выполнения программы имеет вид:
- •Вопрос 2
- •Поток управления. Управляющие конструкции языка программирования.
- •Модульное программирование.
- •Модульность программного кода
- •Модульная технология программирования
- •5 Формализация синтаксиса и семантики языков программирования. Способы описания языков программирования
1. Парадигмы программирования: императивная, функциональная, логическая. Применение различных парадигм программирования для решения различных задач.
Паради́гма программи́рования — это система идей и понятий, определяющих стиль написания компьютерных программ. Это способ концептуализации, определяющий организацию вычислений и структурирование работы, выполняемой компьютером.
Важно отметить, что парадигма программирования не определяется однозначно языком программирования; практически все современные языки программирования в той или иной мере допускают использование различных парадигм (мультипарадигмальное программирование). Так на языке Си, который не является объектно-ориентированным, можно работать в соответствии с принципами объектно-ориентированного программирования, хотя это и сопряжено с определёнными сложностями; функциональное программирование можно применять при работе на любом императивном языке, в котором имеются функции (для этого достаточно не применять присваивание).
Императи́вное программи́рование — это парадигма программирования, которая, в отличие от декларативного программирования, описывает процесс вычисления в виде инструкций, изменяющих состояние программы. Императивная программа очень похожа на приказы, выражаемые повелительным наклонением в естественных языках, то есть это последовательность команд, которые должен выполнить компьютер.
В отличие от функционального программирования, при императивном подходе интенсивно используется присваивание, что увеличивает сложность моделей вычислений и делает императивные программы подверженными специфическим ошибкам, не встречающимся при функциональном программировании.
Языки: С, С++, С#, Java, JS, Delphi… (короче говоря - все, кроме Пролога).
Функциональное программирование основано на математическом понятии функции, которая не изменяет свое окружение; это отличие функционального программирования от функций в структурных языках. Функциональная программа состоит из совокупности определений функций, которые в свою очередь представляют собой вызовы других функций и предложений, управляющих последовательностью вызовов. Каждая функция возвращает некоторое значение в вызвавшую его функцию, вычисление которой после этого продолжается; этот процесс повторяется до тех пор, пока не будет достигнут результат.
(иными словами у нас нет присваивания, есть только функции и возвращаемые ими значения)
Языки: Prolog, Python, Ruby (а при остром желании, как уже писалось выше можно и на С#, VB.NET (но нафиг оно надо))
Логи́ческое программи́рование
В логическом программировании программы выражены в виде формул математической логики, и решение задачи достигается путем вывода логических следствий из них.
Самым известным языком логического программирования является Prolog.
Прочие парадигмы, которых нет в вопросе, но их нужно знать:
Директивное (структурное)
Директивная программа предписывает, как достичь результата, пошагово описывая действия. Поэтому такое программирование является достаточно легким для понимания.
В структурном программировании от входных данных полностью зависит последовательность выполнения команд.
В директивном программировании в свое время возникла концепция локализации части кода в так называемые подпрограммы (функции, методы), с последующим их вызовом из разных мест основной программы. При вызове в подпрограмму могут передаваться какие-либо данные в виде аргументов; а подпрограмма, в свою очередь, может возвращать в главную программу результат (т.е. полученные в ходе ее выполнения данные).
Декларативная
Противоположность императивному. Декларативный язык описывает не столько решение задачи, сколько саму задачу («ЧТО» нужно получить), а каким образом получить решение, уже должен определять компьютер. (ненавидимый мной Пролог)
Объектно-ориентированное программирование
Особое внимание уделяется данным, которые представляются в программе в виде объектов. Объекты взаимодействуют между собой с помощью механизма передачи сообщений. Задача программиста - реализовать такие объекты, при взаимодействии которых можно будет получать желаемый результат.
ООП призвано решать более сложные и объемные задачи по сравнению с директивным программированием.
В основе ООП лежат такие понятия как наследование, полиморфизм и инкапсуляция.
Инкапсуляция предполагает, что малозначащие детали объекта скрыты. Объект, получая какую-либо команду, сам «знает» как ее обработать исходя из того, к какому классу он принадлежит.
Все объекты являются экземплярами классов, которые по отношению друг к другу могут выступать в роли родитель-потомок. Дочерние классы наследуют свойства родительского. В случае, когда 100% наследование не требуется, выручает так называемый полиморфизм, который предполагает переопределение методов родительского класса в дочерних классах. (всеми любимый C# является объектно-ориентированным)
Короткая таблица:
императивное |
программа = последовательность действий, связанных условными и безусловными переходами |
процедурное |
программа = последовательность процедур, каждая из которых есть последовательность элементарных действий и вызовов процедур, структурированных с помощью структурных операторов if, for и while |
объектно-ориентированное |
программа = несколько взаимодействующих объектов, функциональность (действия) и данные распределяются между этими объектами |
функциональное |
программа = система определений функций, описание того, что нужно вычислить, а как это сделать — решает транслятор; последовательность действий не прослеживается |
продукционное (логическое) |
программа = система определений и правил вида "условие => новый факт" |