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