"Парадигмы программирования", 2021, вводная лекция
Что такое «программирование»?
Алгоритм — «это когда» (∃ только операциональное определение)
- формализована задача (класс задач)
- формализованы однозначно интерпретируемые действия (правила, инструкции и т. п.) при решении задач
- формализован исполнитель этих действий:
- порядок (не «последовательность») исполнения,
- представление объектов из предметной области задачи
- и т. п.
- есть конечная запись действий (программа),
- приводящая к решению задачи за конечное число действий исполнителя
- для одной и той же задачи решение всегда одинаковое
- Алгоритмически полная система
- Примеры:
Рекурсивная функция (теория вычислимости)
TODO онлайновая версия
Примеры и учебники по SWI Prolog
- …
⇒ Вещественных чисел ∄
- Примеры:
- Требования к алгоритмически полной системе (нечёткие):
- Соответствие операциональному определению алгоритма
+ Аллегируемые объекты
- + Действия, обусловленные свойствами объектов
⇒ Эквивалентность какой либо актуальной алгоритмически полной системе в смысле Чёрча — Тьюринга
- ⇒ Программа — это формальная запись алгоритма
- ⇒ Программирование как актуализация понятия «программа» в этом определении
Что такое «парадигма программирования»?
Парадигма программирования: дисциплина построения и актуализации алгоритмически полных формализмов.
- Совокупность идей и понятий, определяющих стиль написания компьютерных программ
- «Такой способ думать»
Формализация исполнителя, задания и аллегирования объектов, порядка и обусловливания действий и удобные для такого формализма практики
- ⇒ Если аллегирование и обусловливание в ЯП похожи, скорее всего, они реализуют одну и ту же парадигму
- ⇒ Большинство современных ЯП мультипарадигмальны
Конкретнее? А конкретика всегда разная!
- Где в «требованиях» циклы?
Нужна ли последовательность выполнения инструкций?
- Существуют ли объекты, когда действия не выполняются?
- «Вычислитель» — это конкретная ЭВМ или что-то совсем иное?
- При повторном использовании алгоритма выполняется тот же самый код или другой?
- …
- О чём будет этот курс?
- Нет никакого конечного списка парадигм, а тем более единого критерия, который бы позволил составить такой список
- Парадигмы могут пересекаться, быть реализованы частично и т. п.
- Устоявшиеся парадигмы живы потому, что эффективно решают некоторые классы задач
- Языки программирования, как правило, хорошо отвечают не более, чем одной парадигме
- хотя зачастую имеют инструментарий для другой
- ⇒ Будем коротко изучать наиболее характерные некоторые ЯП, и как на них думать
- В числе прочего — ООП как основу для парадигмального сдвига
- …
- Процедурное окостенение алгоритмического мышления как недостаток современной программистской культуры
Бонус: о чём этот курс не будет
- Языки программирования с интересным/эффективным «способом думать», принадлежащие классическим парадигмам
Некоторые подходы, традиционно считающиеся парадигмами (например, событийно-ориентированное программирование) …