Введение в парадигмы программирования
Экзаменационные вопросы по курсу (2006 г.)
Лектор — А. В. Столяров (см.
источник
).
Понятие «парадигма программирования» и его история. Взаимосвязь языков программирования и парадигм программирования.
Рекурсия. Виды рекурсии. Примеры.
Остаточная (хвостовая) рекурсия.
Императивное и императивно-процедурное программирование. Ключевые понятия.
Язык Лисп. Понятие S-выражения.
Язык Лисп. Функции высоких порядков, мапперы.
Язык Лисп. Лексическое и динамическое связывание. Лексические замыкания.
Функция REDUCE и примеры её использования.
Понятие функционального программирования. Ключевые особенности и термины.
Lambda-исчисление. Синтаксис и семантика. Понятие карринга.
Понятие редукции lambda-выражения, виды редукции, понятие редекса.
Аппликативный и номальный порядок редукции.
Чистое lambda-исчисление.
Понятие ленивых вычислений. Достоинства и недостатки.
Обработка потенциально бесконечных структур данных с помощью ленивых вычислений.
Представление сетей процессов ленивыми функциями. Ленивые вычисления и интерактивные программы.
Основные понятия языка Пролог: атом, терм, предикат, переменная. Сопоставление (унификация).
Выполнение программы на Прологе. Декларативная и процедурная семантика. Отрицание и отсечение.
Инвертирование предикатов в Прологе. Причины, по которым инвертирование может не работать.
Логическое программирование и базы данных. Понятие декларативного программирования.
Основы языка Рефал. Ситуационное программирование. Сравнение рефальского сопоставления с образцом и прологовской унификации.
Командно-скриптовые языки программирования и их ключевые особенности.
«Текст» как универсальное представление.
Алгебра программ. Unix-стиль оформления программ. Два вида суперпозиции.
Основы объектно-ориентированного программирования. Термин «object-based programming». Понятие класса как множетства.
Наследование в ООП. Наследование как сужение множества. Виртуальные методы.
Полиморфизм, его теоретико-множественное и техническое описание.
Обобщенное программирование.
Обработка исключительных ситуаций и её связь с основными стилями программирования.
Событийно-ориентированное программирование.