Парадигмы программирования¶
Модели компьютера¶
Фон-нейманновская архитектура — императивный подход¶

Императивный подход — исторически первый подход к программированию компьютеров, который применялся с момента их появления. Его суть в том, чтобы дать компьютеру точную команду, что и как нужно сделать, например переместить содержимое ячейки памяти по такому-то адресу в такой-то регистр. Таким образом происходило программирование в адресных кодах, затем в ассемблере, затем в первом "высокоуровневом" языке Fortran, затем в C и т.д. до наших дней. Иными словами, этот подход постепенно эволюцтонировал по мере развития мейнстрим инструментов и языков разработки. Эта эволюция постепенно прошла через стадии: "наивного" (без четко определенных правил и парадигм) программирования, структурного, затем объектно-ориентированного и скриптингового, которые являются основными на сегодняшний день.
Лямбда-исчисление — декларативный подход¶
Если первым "высокоуровневым" языком программирования был Fortran, то вторым — Lisp — первый представитель совсем другой модели вычислений. Декларативный подход ставит своей целью описать не детали выполнения, а требуемый результат каких-то операций.
Лямбда исчисление Черча является основой большинства (хотя и не всех) декларативных парадигм.
Хороший кейс дл сравнения императивного и декларативного подходов — это навигационные и реляционные БД и использующиеся для запросов к ним языки: FoxPro и SQL.
Парадигмы императивного подхода¶
Структурное программирование¶
Модульность
Объектно-ориентированное программирование¶
Наследование
Полиморфизм
Передача сообщений
Скриптинговая парадигма¶
Парадигмы декларативного подхода¶
Метапрограммирование¶
Функциональная парадигма¶
Другие парадигмы¶
Логическое программирование (язык Prolog)
Основанно на модели формальной логики предикатов I порядка. В рамках него появились такие подходы к вычислениям как:
- Сопоставление с образцом (Pattern matching)
- Перебор с возвратами (Backtracking)
Программирование в массивах (языки APL, J, K, Q)
Обобщение операций над скалярными данными на матричные операции. Основные идеи:
- Важность удачно подобранной нотации (Notation as a Tool of Thought)
- Бесточечное программирование (Point-free programming)